From fb26be821bd0ca5c5e7da807a06031eb8298751e Mon Sep 17 00:00:00 2001 From: HibiKier <775757368@qq.com> Date: Mon, 28 Aug 2023 17:30:24 +0800 Subject: [PATCH] =?UTF-8?q?feat=E2=9C=A8:=20=E5=BC=80=E7=AE=B1=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0`=E6=9B=B4=E6=96=B0=E6=AD=A6=E5=99=A8=E7=AE=B1?= =?UTF-8?q?=E5=9B=BE=E7=89=87`=E8=B6=85=E7=BA=A7=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + plugins/open_cases/__init__.py | 12 ++++++++++ plugins/open_cases/open_cases_c.py | 14 +++++++++--- plugins/open_cases/utils.py | 35 ++++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c7239087..74253e41 100644 --- a/README.md +++ b/README.md @@ -334,6 +334,7 @@ PS: **ARM平台** 请使用全量版 同时 **如果你的机器 RAM < 1G 可能 ### 2023/8/28 * 重构`红包`功能, 允许一个群聊中有多个用户发起的红包,发送`开`等命令会开启群中所有条件允许的红包,新增`红包结算排行`,在红包退回或抢完时统计,在`塞红包`时at可以发送专属红包 +* 开箱添加`更新武器箱图片`超级用户命令,用于导入数据表后更新图片 ### 2023/8/20 diff --git a/plugins/open_cases/__init__.py b/plugins/open_cases/__init__.py index d2e61014..4c1415a0 100755 --- a/plugins/open_cases/__init__.py +++ b/plugins/open_cases/__init__.py @@ -32,6 +32,7 @@ from .utils import ( KNIFE2ID, CaseManager, build_case_image, + download_image, get_skin_case, init_skin_trends, reset_count_daily, @@ -62,6 +63,7 @@ usage: 更新武器箱 ?[武器箱/ALL] 更新皮肤 ?[名称/ALL1] 更新皮肤 ?[名称/ALL1] -S: (必定更新罕见皮肤所属箱子) + 更新武器箱图片 * 不指定武器箱时则全部更新 * * 过多的爬取会导致账号API被封 * """.strip() @@ -75,6 +77,7 @@ __plugin_cmd__ = [ "查看武器箱?[武器箱]", "更新武器箱 ?[武器箱] [_superuser]", "更新皮肤 ?[刀具名称] [_superuser]", + "更新武器箱图片 [_superuser]", ] __plugin_type__ = ("抽卡相关", 1) __plugin_version__ = 0.1 @@ -133,6 +136,7 @@ open_multiple = cases_matcher_group.on_regex("(.*)连开箱(.*)?") update_case = on_command( "更新武器箱", aliases={"更新皮肤"}, priority=1, permission=SUPERUSER, block=True ) +update_case_image = on_command("更新武器箱图片", priority=1, permission=SUPERUSER, block=True) show_case = on_command("查看武器箱", priority=5, block=True) my_knifes = on_command("我的金色", priority=1, permission=GROUP, block=True) show_skin = on_command("查看皮肤", priority=5, block=True) @@ -286,6 +290,14 @@ async def _(arg: Message = CommandArg()): await show_case.send(image(result)) +@update_case_image.handle() +async def _(arg: Message = CommandArg()): + msg = arg.extract_plain_text().strip() + await update_case_image.send("开始更新图片...") + await download_image(msg) + await update_case_image.send("更新图片完成...", at_sender=True) + + # 重置开箱 @scheduler.scheduled_job( "cron", diff --git a/plugins/open_cases/open_cases_c.py b/plugins/open_cases/open_cases_c.py index 3bbea16d..1f9409d3 100755 --- a/plugins/open_cases/open_cases_c.py +++ b/plugins/open_cases/open_cases_c.py @@ -63,7 +63,9 @@ def add_count(user: OpenCasesUser, skin: BuffSkin, case_price: float): user.spend_money += 17 + case_price -async def get_user_max_count(user_id: str, group_id: int) -> int: +async def get_user_max_count( + user_id: Union[int, str], group_id: Union[str, int] +) -> int: """获取用户每日最大开箱次数 Args: @@ -84,7 +86,9 @@ async def get_user_max_count(user_id: str, group_id: int) -> int: return int(initial_open_case_count + impression / each_impression_add_count) # type: ignore -async def open_case(user_id: str, group_id: int, case_name: str) -> Union[str, Message]: +async def open_case( + user_id: Union[int, str], group_id: Union[int, str], case_name: str +) -> Union[str, Message]: """开箱 Args: @@ -95,6 +99,8 @@ async def open_case(user_id: str, group_id: int, case_name: str) -> Union[str, M Returns: Union[str, Message]: 回复消息 """ + user_id = str(user_id) + group_id = str(group_id) if not CaseManager.CURRENT_CASES: return "未收录任何武器箱" if not case_name: @@ -162,7 +168,7 @@ async def open_case(user_id: str, group_id: int, case_name: str) -> Union[str, M async def open_multiple_case( - user_id: str, group_id: int, case_name: str, num: int = 10 + user_id: Union[int, str], group_id: Union[str, int], case_name: str, num: int = 10 ): """多连开箱 @@ -175,6 +181,8 @@ async def open_multiple_case( Returns: _type_: _description_ """ + user_id = str(user_id) + group_id = str(group_id) if not CaseManager.CURRENT_CASES: return "未收录任何武器箱" if not case_name: diff --git a/plugins/open_cases/utils.py b/plugins/open_cases/utils.py index f90651c6..d5e783e8 100755 --- a/plugins/open_cases/utils.py +++ b/plugins/open_cases/utils.py @@ -603,6 +603,41 @@ async def reset_count_daily(): logger.error(f"开箱重置错误", e=e) +async def download_image(case_name: Optional[str] = None): + """下载皮肤图片 + + 参数: + case_name: 箱子名称. + """ + skin_list = ( + await BuffSkin.filter(case_name=case_name).all() + if case_name + else await BuffSkin.all() + ) + for skin in skin_list: + name_ = skin.name + "-" + skin.skin_name + "-" + skin.abrasion + for c_name_ in skin.case_name.split(","): + try: + file_path = BASE_PATH / cn2py(c_name_) / f"{cn2py(name_)}.jpg" + if not file_path.exists(): + logger.debug( + f"下载皮肤 {c_name_}/{skin.name} 图片: {skin.img_url}...", + "开箱图片更新", + ) + await AsyncHttpx.download_file(skin.img_url, file_path) + rand_time = random.randint(1, 5) + await asyncio.sleep(rand_time) + logger.debug(f"图片下载随机等待时间: {rand_time}", "开箱图片更新") + else: + logger.debug(f"皮肤 {c_name_}/{skin.name} 图片已存在...", "开箱图片更新") + except Exception as e: + logger.error( + f"下载皮肤 {c_name_}/{skin.name} 图片: {skin.img_url}", + "开箱图片更新", + e=e, + ) + + @driver.on_startup async def _(): await CaseManager.reload()