2023-03-12 19:50:08 +08:00
|
|
|
|
import asyncio
|
2023-02-26 22:17:26 +08:00
|
|
|
|
import random
|
2023-03-12 19:50:08 +08:00
|
|
|
|
from datetime import datetime, timedelta
|
2023-03-04 20:32:03 +08:00
|
|
|
|
from typing import Any, List, Tuple
|
2023-02-26 22:17:26 +08:00
|
|
|
|
|
2021-05-20 19:23:32 +08:00
|
|
|
|
from nonebot import on_command
|
2023-02-26 22:17:26 +08:00
|
|
|
|
from nonebot.adapters.onebot.v11 import GroupMessageEvent, Message, MessageEvent
|
2022-02-19 18:20:19 +08:00
|
|
|
|
from nonebot.adapters.onebot.v11.permission import GROUP
|
2023-02-26 22:17:26 +08:00
|
|
|
|
from nonebot.matcher import Matcher
|
|
|
|
|
|
from nonebot.params import CommandArg, RegexGroup
|
2021-05-20 19:23:32 +08:00
|
|
|
|
from nonebot.permission import SUPERUSER
|
|
|
|
|
|
from nonebot.plugin import MatcherGroup
|
2023-02-26 22:17:26 +08:00
|
|
|
|
from nonebot.typing import T_State
|
|
|
|
|
|
|
|
|
|
|
|
from configs.config import Config
|
2021-11-04 16:11:50 +08:00
|
|
|
|
from configs.path_config import IMAGE_PATH
|
2023-03-12 19:50:08 +08:00
|
|
|
|
from services.log import logger
|
|
|
|
|
|
from utils.message_builder import image
|
|
|
|
|
|
from utils.utils import CN2NUM, is_number, scheduler
|
2023-02-26 22:17:26 +08:00
|
|
|
|
|
2021-07-30 21:21:51 +08:00
|
|
|
|
from .open_cases_c import (
|
2023-03-12 19:50:08 +08:00
|
|
|
|
auto_update,
|
2023-03-04 20:32:03 +08:00
|
|
|
|
get_my_knifes,
|
2021-07-30 21:21:51 +08:00
|
|
|
|
group_statistics,
|
2023-02-26 22:17:26 +08:00
|
|
|
|
open_case,
|
|
|
|
|
|
open_multiple_case,
|
|
|
|
|
|
total_open_statistics,
|
2021-07-30 21:21:51 +08:00
|
|
|
|
)
|
2023-03-12 19:50:08 +08:00
|
|
|
|
from .utils import (
|
|
|
|
|
|
CASE2ID,
|
|
|
|
|
|
CaseManager,
|
|
|
|
|
|
build_case_image,
|
|
|
|
|
|
reset_count_daily,
|
|
|
|
|
|
update_case_data,
|
|
|
|
|
|
)
|
2021-10-03 14:24:07 +08:00
|
|
|
|
|
|
|
|
|
|
__zx_plugin_name__ = "开箱"
|
|
|
|
|
|
__plugin_usage__ = """
|
|
|
|
|
|
usage:
|
|
|
|
|
|
看看你的人品罢了
|
|
|
|
|
|
模拟开箱,完美公布的真实概率,只想看看替你省了多少钱
|
|
|
|
|
|
指令:
|
|
|
|
|
|
开箱 ?[武器箱]
|
|
|
|
|
|
[1-30]连开箱 ?[武器箱]
|
|
|
|
|
|
我的开箱
|
|
|
|
|
|
我的金色
|
|
|
|
|
|
群开箱统计
|
2023-03-12 19:50:08 +08:00
|
|
|
|
查看武器箱?[武器箱]
|
2021-10-03 14:24:07 +08:00
|
|
|
|
* 不包含[武器箱]时随机开箱 *
|
2023-03-12 19:50:08 +08:00
|
|
|
|
示例: 查看武器箱
|
|
|
|
|
|
示例: 查看武器箱英勇
|
2021-10-03 14:24:07 +08:00
|
|
|
|
""".strip()
|
|
|
|
|
|
__plugin_superuser_usage__ = """
|
|
|
|
|
|
usage:
|
|
|
|
|
|
更新皮肤指令
|
2022-08-21 14:10:49 +08:00
|
|
|
|
重置开箱: 重置今日开箱所有次数
|
2021-10-03 14:24:07 +08:00
|
|
|
|
指令:
|
|
|
|
|
|
更新开箱图片 ?[武器箱]
|
|
|
|
|
|
更新开箱价格 ?[武器箱]
|
|
|
|
|
|
* 不指定武器箱时则全部更新 *
|
|
|
|
|
|
* 过多的爬取会导致账号API被封 *
|
|
|
|
|
|
""".strip()
|
|
|
|
|
|
__plugin_des__ = "csgo模拟开箱[戒赌]"
|
|
|
|
|
|
__plugin_cmd__ = [
|
|
|
|
|
|
"开箱 ?[武器箱]",
|
|
|
|
|
|
"[1-30]连开箱 ?[武器箱]",
|
|
|
|
|
|
"我的开箱",
|
|
|
|
|
|
"我的金色",
|
|
|
|
|
|
"群开箱统计",
|
2023-03-12 19:50:08 +08:00
|
|
|
|
"查看武器箱?[武器箱]",
|
2021-10-03 14:24:07 +08:00
|
|
|
|
"更新开箱图片 ?[武器箱] [_superuser]",
|
|
|
|
|
|
"更新开箱价格 ?[武器箱] [_superuser]",
|
|
|
|
|
|
]
|
|
|
|
|
|
__plugin_type__ = ("抽卡相关", 1)
|
|
|
|
|
|
__plugin_version__ = 0.1
|
|
|
|
|
|
__plugin_author__ = "HibiKier"
|
|
|
|
|
|
__plugin_settings__ = {
|
|
|
|
|
|
"level": 5,
|
|
|
|
|
|
"default_status": True,
|
|
|
|
|
|
"limit_superuser": False,
|
|
|
|
|
|
"cmd": ["csgo开箱", "开箱"],
|
|
|
|
|
|
}
|
|
|
|
|
|
__plugin_task__ = {"open_case_reset_remind": "每日开箱重置提醒"}
|
|
|
|
|
|
__plugin_cd_limit__ = {"rst": "着什么急啊,慢慢来!"}
|
2021-11-04 16:11:50 +08:00
|
|
|
|
__plugin_resources__ = {f"cases": IMAGE_PATH}
|
|
|
|
|
|
__plugin_configs__ = {
|
2023-02-26 22:17:26 +08:00
|
|
|
|
"INITIAL_OPEN_CASE_COUNT": {
|
|
|
|
|
|
"value": 20,
|
|
|
|
|
|
"help": "初始每日开箱次数",
|
|
|
|
|
|
"default_value": 20,
|
|
|
|
|
|
"type": int,
|
|
|
|
|
|
},
|
2021-11-04 16:11:50 +08:00
|
|
|
|
"EACH_IMPRESSION_ADD_COUNT": {
|
|
|
|
|
|
"value": 3,
|
|
|
|
|
|
"help": "每 * 点好感度额外增加开箱次数",
|
|
|
|
|
|
"default_value": 3,
|
2023-02-26 22:17:26 +08:00
|
|
|
|
"type": int,
|
2021-11-04 16:11:50 +08:00
|
|
|
|
},
|
2023-03-12 19:50:08 +08:00
|
|
|
|
"COOKIE": {"value": None, "help": "BUFF的cookie", "type": str},
|
2021-11-04 16:11:50 +08:00
|
|
|
|
"BUFF_PROXY": {"value": None, "help": "使用代理访问BUFF"},
|
2023-03-04 20:32:03 +08:00
|
|
|
|
"DAILY_UPDATE": {
|
|
|
|
|
|
"value": None,
|
|
|
|
|
|
"help": "每日自动更新的武器箱,存在'ALL'时则更新全部武器箱",
|
|
|
|
|
|
"type": List[str],
|
|
|
|
|
|
},
|
2021-11-04 16:11:50 +08:00
|
|
|
|
}
|
2021-05-20 19:23:32 +08:00
|
|
|
|
|
2021-12-16 11:16:28 +08:00
|
|
|
|
Config.add_plugin_config(
|
|
|
|
|
|
"_task",
|
|
|
|
|
|
"DEFAULT_OPEN_CASE_RESET_REMIND",
|
|
|
|
|
|
True,
|
|
|
|
|
|
help_="被动 每日开箱重置提醒 进群默认开关状态",
|
|
|
|
|
|
default_value=True,
|
2023-03-02 18:31:36 +08:00
|
|
|
|
type=bool,
|
2021-12-16 11:16:28 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
2021-05-20 19:23:32 +08:00
|
|
|
|
|
|
|
|
|
|
cases_matcher_group = MatcherGroup(priority=5, permission=GROUP, block=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
k_open_case = cases_matcher_group.on_command("开箱")
|
2023-02-26 22:17:26 +08:00
|
|
|
|
reload_count = cases_matcher_group.on_command("重置开箱", permission=SUPERUSER)
|
2023-03-04 20:32:03 +08:00
|
|
|
|
total_case_data = cases_matcher_group.on_command(
|
|
|
|
|
|
"我的开箱", aliases={"开箱统计", "开箱查询", "查询开箱"}
|
|
|
|
|
|
)
|
|
|
|
|
|
group_open_case_statistics = cases_matcher_group.on_command("群开箱统计")
|
|
|
|
|
|
open_multiple = cases_matcher_group.on_regex("(.*)连开箱(.*)?")
|
2023-03-12 19:50:08 +08:00
|
|
|
|
update_case = on_command("更新武器箱", priority=1, permission=SUPERUSER, block=True)
|
|
|
|
|
|
show_case = on_command("查看武器箱", priority=5, block=True)
|
2023-03-04 20:32:03 +08:00
|
|
|
|
my_knifes = on_command("我的金色", priority=1, permission=GROUP, block=True)
|
2023-03-12 19:50:08 +08:00
|
|
|
|
show_skin = on_command("查看皮肤", priority=5, block=True)
|
|
|
|
|
|
# show_case = on_command("test", priority=1, permission=GROUP, block=True)
|
2022-08-21 14:10:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@reload_count.handle()
|
|
|
|
|
|
async def _(event: GroupMessageEvent):
|
2023-02-26 22:17:26 +08:00
|
|
|
|
await reset_count_daily()
|
2022-08-21 14:10:49 +08:00
|
|
|
|
|
2021-05-20 19:23:32 +08:00
|
|
|
|
|
|
|
|
|
|
@k_open_case.handle()
|
2022-02-19 18:20:19 +08:00
|
|
|
|
async def _(event: GroupMessageEvent, arg: Message = CommandArg()):
|
|
|
|
|
|
case_name = arg.extract_plain_text().strip()
|
2021-10-03 14:24:07 +08:00
|
|
|
|
case_name = case_name.replace("武器箱", "").strip()
|
2023-03-01 22:54:03 +08:00
|
|
|
|
result = await open_case(event.user_id, event.group_id, case_name)
|
2021-05-20 19:23:32 +08:00
|
|
|
|
await k_open_case.finish(result, at_sender=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@total_case_data.handle()
|
2022-02-19 18:20:19 +08:00
|
|
|
|
async def _(event: GroupMessageEvent):
|
2021-05-20 19:23:32 +08:00
|
|
|
|
await total_case_data.finish(
|
|
|
|
|
|
await total_open_statistics(event.user_id, event.group_id),
|
|
|
|
|
|
at_sender=True,
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@group_open_case_statistics.handle()
|
2022-02-19 18:20:19 +08:00
|
|
|
|
async def _(event: GroupMessageEvent):
|
2021-05-20 19:23:32 +08:00
|
|
|
|
await group_open_case_statistics.finish(await group_statistics(event.group_id))
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-03-04 20:32:03 +08:00
|
|
|
|
@my_knifes.handle()
|
2022-02-19 18:20:19 +08:00
|
|
|
|
async def _(event: GroupMessageEvent):
|
2023-03-04 20:32:03 +08:00
|
|
|
|
await my_knifes.finish(
|
|
|
|
|
|
await get_my_knifes(event.user_id, event.group_id), at_sender=True
|
2021-07-30 21:21:51 +08:00
|
|
|
|
)
|
2021-05-20 19:23:32 +08:00
|
|
|
|
|
|
|
|
|
|
|
2023-02-26 22:17:26 +08:00
|
|
|
|
@open_multiple.handle()
|
|
|
|
|
|
async def _(
|
|
|
|
|
|
event: GroupMessageEvent, state: T_State, reg_group: Tuple[Any, ...] = RegexGroup()
|
|
|
|
|
|
):
|
2022-05-21 15:58:29 +08:00
|
|
|
|
num, case_name = reg_group
|
2023-03-12 19:50:08 +08:00
|
|
|
|
if is_number(num) or CN2NUM.get(num):
|
2022-02-19 18:20:19 +08:00
|
|
|
|
try:
|
2023-03-12 19:50:08 +08:00
|
|
|
|
num = CN2NUM[num]
|
2022-02-19 18:20:19 +08:00
|
|
|
|
except KeyError:
|
|
|
|
|
|
num = int(num)
|
|
|
|
|
|
if num > 30:
|
2023-02-26 22:17:26 +08:00
|
|
|
|
await open_multiple.finish("开箱次数不要超过30啊笨蛋!", at_sender=True)
|
2022-02-19 18:20:19 +08:00
|
|
|
|
if num < 0:
|
2023-02-26 22:17:26 +08:00
|
|
|
|
await open_multiple.finish("再负开箱就扣你明天开箱数了!", at_sender=True)
|
2022-02-19 18:20:19 +08:00
|
|
|
|
else:
|
2023-02-26 22:17:26 +08:00
|
|
|
|
await open_multiple.finish("必须要是数字切不要超过30啊笨蛋!中文也可!", at_sender=True)
|
2022-02-19 18:20:19 +08:00
|
|
|
|
case_name = case_name.replace("武器箱", "").strip()
|
2023-02-26 22:17:26 +08:00
|
|
|
|
await open_multiple.finish(
|
|
|
|
|
|
await open_multiple_case(event.user_id, event.group_id, case_name, num),
|
2022-02-19 18:20:19 +08:00
|
|
|
|
at_sender=True,
|
|
|
|
|
|
)
|
2021-05-20 19:23:32 +08:00
|
|
|
|
|
|
|
|
|
|
|
2023-03-12 19:50:08 +08:00
|
|
|
|
@update_case.handle()
|
2022-05-23 22:01:56 +08:00
|
|
|
|
async def _(event: MessageEvent, arg: Message = CommandArg()):
|
2023-03-01 22:54:03 +08:00
|
|
|
|
msg = arg.extract_plain_text().strip()
|
|
|
|
|
|
if not msg:
|
|
|
|
|
|
case_list = []
|
|
|
|
|
|
for i, case_name in enumerate(CASE2ID):
|
|
|
|
|
|
if case_name in CaseManager.CURRENT_CASES:
|
|
|
|
|
|
case_list.append(f"{i+1}.{case_name} [已更新]")
|
|
|
|
|
|
else:
|
|
|
|
|
|
case_list.append(f"{i+1}.{case_name}")
|
2023-03-12 19:50:08 +08:00
|
|
|
|
await update_case.finish("未指定武器箱, 当前已包含武器箱\n" + "\n".join(case_list))
|
|
|
|
|
|
if msg == "ALL":
|
|
|
|
|
|
await update_case.send(f"即将更新所有武器箱, 请稍等")
|
|
|
|
|
|
case_list = list(CASE2ID.keys())
|
|
|
|
|
|
for i, case_name in enumerate(case_list):
|
|
|
|
|
|
try:
|
|
|
|
|
|
await update_case_data(case_name)
|
|
|
|
|
|
rand = random.randint(300, 500)
|
|
|
|
|
|
result = "更新全部武器箱完成"
|
|
|
|
|
|
if i < len(case_list):
|
|
|
|
|
|
next_case = case_list[i + 1]
|
|
|
|
|
|
result = f"将在 {rand} 秒后更新下一武器箱: {next_case}"
|
|
|
|
|
|
await update_case.send(f"成功更新武器箱: {case_name}, {result}")
|
|
|
|
|
|
logger.info(f"成功更新武器箱: {case_name}, {result}", "更新武器箱")
|
|
|
|
|
|
await asyncio.sleep(rand)
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
logger.error(f"自动更新武器箱: {case_name}", e=e)
|
|
|
|
|
|
await update_case.send(f"成功自动更新武器箱: {case_name} 发生错误: {type(e)}: {e}")
|
|
|
|
|
|
await update_case.send(f"开始更新全部武器箱完成")
|
|
|
|
|
|
else:
|
|
|
|
|
|
await update_case.send(f"开始更新武器箱: {msg}, 请稍等")
|
|
|
|
|
|
await update_case.send(await update_case_data(msg), at_sender=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@show_case.handle()
|
|
|
|
|
|
async def _(arg: Message = CommandArg()):
|
|
|
|
|
|
msg = arg.extract_plain_text().strip()
|
|
|
|
|
|
result = await build_case_image(msg)
|
|
|
|
|
|
if isinstance(result, str):
|
|
|
|
|
|
await show_case.send(result)
|
|
|
|
|
|
else:
|
|
|
|
|
|
await show_case.send(image(result))
|
2021-05-20 19:23:32 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 重置开箱
|
|
|
|
|
|
@scheduler.scheduled_job(
|
2021-07-30 21:21:51 +08:00
|
|
|
|
"cron",
|
2022-02-20 11:06:32 +08:00
|
|
|
|
hour=0,
|
|
|
|
|
|
minute=1,
|
2021-05-20 19:23:32 +08:00
|
|
|
|
)
|
|
|
|
|
|
async def _():
|
2023-02-26 22:17:26 +08:00
|
|
|
|
await reset_count_daily()
|
2023-03-12 19:50:08 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@scheduler.scheduled_job(
|
|
|
|
|
|
"cron",
|
|
|
|
|
|
hour=23,
|
|
|
|
|
|
minute=48,
|
|
|
|
|
|
)
|
|
|
|
|
|
async def _():
|
|
|
|
|
|
now = datetime.now()
|
|
|
|
|
|
hour = random.choice([0, 1, 2, 3])
|
|
|
|
|
|
date = now + timedelta(minutes=1)
|
|
|
|
|
|
logger.debug(f"将在 {date} 时自动更新武器箱...", "更新武器箱")
|
|
|
|
|
|
scheduler.add_job(
|
|
|
|
|
|
auto_update,
|
|
|
|
|
|
"date",
|
|
|
|
|
|
run_date=date.replace(microsecond=0),
|
|
|
|
|
|
id=f"auto_update_csgo_cases",
|
|
|
|
|
|
)
|