feat: 开箱添加更新武器箱图片超级用户命令

This commit is contained in:
HibiKier 2023-08-28 17:30:24 +08:00
parent 3abac67b2e
commit fb26be821b
4 changed files with 59 additions and 3 deletions

View File

@ -334,6 +334,7 @@ PS: **ARM平台** 请使用全量版 同时 **如果你的机器 RAM < 1G 可能
### 2023/8/28
* 重构`红包`功能, 允许一个群聊中有多个用户发起的红包,发送`开`等命令会开启群中所有条件允许的红包,新增`红包结算排行`,在红包退回或抢完时统计,在`塞红包`时at可以发送专属红包
* 开箱添加`更新武器箱图片`超级用户命令,用于导入数据表后更新图片
### 2023/8/20

View File

@ -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",

View File

@ -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:

View File

@ -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()