diff --git a/ArknightsUID/arknightsuid_ap/__init__.py b/ArknightsUID/arknightsuid_ap/__init__.py index f245df7..9ac73f9 100644 --- a/ArknightsUID/arknightsuid_ap/__init__.py +++ b/ArknightsUID/arknightsuid_ap/__init__.py @@ -12,55 +12,55 @@ from ..utils.ark_prefix import PREFIX from .draw_ap_card import get_ap_img from .notice import get_notice_list -sv_get_ap = SV('ark查询体力') -sv_get_ap_admin = SV('ark强制推送', pm=1) +sv_get_ap = SV("ark查询体力") +sv_get_ap_admin = SV("ark强制推送", pm=1) -@sv_get_ap_admin.on_fullmatch((f'{PREFIX}强制推送体力提醒')) # noqa: UP034 +@sv_get_ap_admin.on_fullmatch((f"{PREFIX}强制推送体力提醒")) # noqa: UP034 async def force_notice_job(bot: Bot, ev: Event): - await bot.logger.info('开始执行[ark强制推送体力信息]') + await bot.logger.info("开始执行[ark强制推送体力信息]") await ark_notice_job() -@scheduler.scheduled_job('cron', minute='*/30') +@scheduler.scheduled_job("cron", minute="*/30") async def ark_notice_job(): result = await get_notice_list() - logger.info('[ark推送检查]完成!等待消息推送中...') + logger.info("[ark推送检查]完成!等待消息推送中...") logger.debug(result) # 执行私聊推送 for bot_id in result: for BOT_ID in gss.active_bot: bot = gss.active_bot[BOT_ID] - for user_id in result[bot_id]['direct']: - msg = result[bot_id]['direct'][user_id] - await bot.target_send(msg, 'direct', user_id, bot_id, '', '') + for user_id in result[bot_id]["direct"]: + msg = result[bot_id]["direct"][user_id] + await bot.target_send(msg, "direct", user_id, bot_id, "", "") await asyncio.sleep(0.5) - logger.info('[ark推送检查] 私聊推送完成') - for gid in result[bot_id]['group']: + logger.info("[ark推送检查] 私聊推送完成") + for gid in result[bot_id]["group"]: msg_list = [] - for user_id in result[bot_id]['group'][gid]: + for user_id in result[bot_id]["group"][gid]: msg_list.append(MessageSegment.at(user_id)) - msg = result[bot_id]['group'][gid][user_id] + msg = result[bot_id]["group"][gid][user_id] msg_list.append(MessageSegment.text(msg)) - await bot.target_send(msg_list, 'group', gid, bot_id, '', '') + await bot.target_send(msg_list, "group", gid, bot_id, "", "") await asyncio.sleep(0.5) - logger.info('[ark推送检查] 群聊推送完成') + logger.info("[ark推送检查] 群聊推送完成") @sv_get_ap.on_fullmatch( ( - f'{PREFIX}每日', - f'{PREFIX}mr', - f'{PREFIX}实时便笺', - f'{PREFIX}便笺', - f'{PREFIX}便签', + f"{PREFIX}每日", + f"{PREFIX}mr", + f"{PREFIX}实时便笺", + f"{PREFIX}便笺", + f"{PREFIX}便签", ) ) async def send_daily_info_pic(bot: Bot, ev: Event): - await bot.logger.info('开始执行[ark每日信息]') + await bot.logger.info("开始执行[ark每日信息]") user_id = ev.at if ev.at else ev.user_id - await bot.logger.info(f'[ark每日信息]QQ号: {user_id}') + await bot.logger.info(f"[ark每日信息]QQ号: {user_id}") im = await get_ap_img(bot.bot_id, user_id) await bot.send(im) diff --git a/ArknightsUID/arknightsuid_ap/draw_ap_card.py b/ArknightsUID/arknightsuid_ap/draw_ap_card.py index 1bf538c..6b98a57 100644 --- a/ArknightsUID/arknightsuid_ap/draw_ap_card.py +++ b/ArknightsUID/arknightsuid_ap/draw_ap_card.py @@ -16,17 +16,17 @@ from ..utils.fonts.source_han_sans import ( ) from .utils import now_ap, seconds2hours_zhcn -TEXT_PATH = Path(__file__).parent / 'texture2D' +TEXT_PATH = Path(__file__).parent / "texture2D" -white_bg = Image.open(TEXT_PATH / 'white_bg.png') -up_bar = Image.open(TEXT_PATH / 'up_bar.png') -brain_pic = Image.open(TEXT_PATH / 'brain.png') -warn_pic = Image.open(TEXT_PATH / 'warn.png') -mask_pic = Image.open(TEXT_PATH / 'mask.png').convert('RGBA') -logo_white = Image.open(TEXT_PATH / 'logo_white.png') +white_bg = Image.open(TEXT_PATH / "white_bg.png") +up_bar = Image.open(TEXT_PATH / "up_bar.png") +brain_pic = Image.open(TEXT_PATH / "brain.png") +warn_pic = Image.open(TEXT_PATH / "warn.png") +mask_pic = Image.open(TEXT_PATH / "mask.png").convert("RGBA") +logo_white = Image.open(TEXT_PATH / "logo_white.png") -blue_bar_bg1 = Image.open(TEXT_PATH / 'blue_bar_bg1.png') -grey_bar_bg1 = Image.open(TEXT_PATH / 'grey_bar_bg1.png') +blue_bar_bg1 = Image.open(TEXT_PATH / "blue_bar_bg1.png") +grey_bar_bg1 = Image.open(TEXT_PATH / "grey_bar_bg1.png") based_w = 850 based_h = 1750 @@ -39,29 +39,31 @@ red_color = (235, 61, 75) async def get_ap_img(bot_id: str, user_id: str): try: uid_list = await ArknightsBind.get_uid_list_by_game(user_id, bot_id) - logger.info(f'[每日信息]UID: {uid_list}') + logger.info(f"[每日信息]UID: {uid_list}") # 进行校验UID是否绑定CK useable_uid_list = [] if uid_list is None: - return '请先绑定一个可用CRED & UID再来查询哦~' + return "请先绑定一个可用CRED & UID再来查询哦~" for uid in uid_list: status = await ark_skd_api.check_cred_valid(uid=uid) if status is not bool: useable_uid_list.append(uid) - logger.info(f'[每日信息]可用UID: {useable_uid_list}') + logger.info(f"[每日信息]可用UID: {useable_uid_list}") if len(useable_uid_list) == 0: - return '请先绑定一个可用CRED & UID再来查询哦~' + return "请先绑定一个可用CRED & UID再来查询哦~" # 开始绘图任务 task = [] - img = Image.new('RGBA', (based_w * len(useable_uid_list), based_h), (0, 0, 0, 0)) + img = Image.new( + "RGBA", (based_w * len(useable_uid_list), based_h), (0, 0, 0, 0) + ) for uid_index, uid in enumerate(useable_uid_list): task.append(_draw_all_ap_img(img, uid, uid_index)) await asyncio.gather(*task) res = await convert_img(img) - logger.info('[查询每日信息]绘图已完成,等待发送!') + logger.info("[查询每日信息]绘图已完成,等待发送!") except TypeError: - logger.exception('[查询每日信息]绘图失败!') - res = '你绑定过的UID中可能存在过期CRED~请重新绑定一下噢~' + logger.exception("[查询每日信息]绘图失败!") + res = "你绑定过的UID中可能存在过期CRED~请重新绑定一下噢~" return res @@ -77,28 +79,32 @@ def get_error(img: Image.Image, uid: str, daily_data: int): # 写UID img_draw.text( (350, 680), - f'UID{uid}', + f"UID{uid}", font=sans_font_26, fill=first_color, - anchor='mm', + anchor="mm", ) img_draw.text( (350, 650), - f'错误码 {daily_data}', + f"错误码 {daily_data}", font=sans_font_26, fill=red_color, - anchor='mm', + anchor="mm", ) return img async def draw_ap_img(uid: str) -> Image.Image: # char - char_pic = Image.open(TEXT_PATH / 'char_1028_texas2_1b.png').resize((1700, 1700)).convert('RGBA') + char_pic = ( + Image.open(TEXT_PATH / "char_1028_texas2_1b.png") + .resize((1700, 1700)) + .convert("RGBA") + ) - tmp_img = Image.new('RGBA', (based_w, based_h)) + tmp_img = Image.new("RGBA", (based_w, based_h)) tmp_img.paste(char_pic, (-250, 50), char_pic) - tmp_img2 = Image.new('RGBA', (based_w, based_h)) + tmp_img2 = Image.new("RGBA", (based_w, based_h)) tmp_img2.paste(tmp_img, (0, 0), mask_pic) img = Image.alpha_composite(white_bg, tmp_img2) @@ -114,10 +120,10 @@ async def draw_ap_img(uid: str) -> Image.Image: up_bar_draw = ImageDraw.Draw(up_bar_img) up_bar_draw.text( (40, 130), - f'Dr.{nickname}', + f"Dr.{nickname}", font=sans_font_34, fill=white_color, - anchor='lm', + anchor="lm", ) img.paste(up_bar_img, (0, 0), up_bar_img) @@ -128,10 +134,10 @@ async def draw_ap_img(uid: str) -> Image.Image: brain_pic_draw = ImageDraw.Draw(brain_pic_img) brain_pic_draw.text( (135, 255), - f'{current_ap}/{max_ap}', + f"{current_ap}/{max_ap}", font=sans_font_34, fill=white_color, - anchor='lm', + anchor="lm", ) img.paste(brain_pic_img, (50, 500), brain_pic_img) @@ -168,35 +174,35 @@ async def draw_ap_img(uid: str) -> Image.Image: blue_bar_bg1_draw = ImageDraw.Draw(blue_bar_bg1_img) blue_bar_bg1_draw.text( (170, 60), - '公开招募', + "公开招募", font=sans_font_34, fill=first_color, - anchor='lm', + anchor="lm", ) if recruit_task_finish_count == len(recruit): blue_bar_bg1_draw.text( (540, 70), - '招募已全部完成', + "招募已全部完成", font=sans_font_18, fill=first_color, - anchor='rm', + anchor="rm", ) else: blue_bar_bg1_draw.text( (540, 70), - f'{delta_hour}小时{delta_minute}分钟后全部完成', + f"{delta_hour}小时{delta_minute}分钟后全部完成", font=sans_font_18, fill=first_color, - anchor='rm', + anchor="rm", ) blue_bar_bg1_draw.text( xy=(777, 58), - text=f'{len(recruit) - recruit_task_finish_count}/{len(recruit)}', + text=f"{len(recruit) - recruit_task_finish_count}/{len(recruit)}", font=sans_font_34, fill=white_color, - anchor='rm', + anchor="rm", ) img.paste(blue_bar_bg1_img, (-20, 800), blue_bar_bg1_img) @@ -215,24 +221,24 @@ async def draw_ap_img(uid: str) -> Image.Image: delta_minute = (delta.seconds - delta_hour * 3600) // 60 grey_bar_bg1_draw.text( (170, 60), - '公开刷新', + "公开刷新", font=sans_font_34, fill=first_color, - anchor='lm', + anchor="lm", ) grey_bar_bg1_draw.text( (540, 70), - f'{delta_hour}小时{delta_minute}分钟后获取刷新次数', + f"{delta_hour}小时{delta_minute}分钟后获取刷新次数", font=sans_font_18, fill=first_color, - anchor='rm', + anchor="rm", ) grey_bar_bg1_draw.text( xy=(777, 58), - text='联络中', + text="联络中", font=sans_font_34, fill=white_color, - anchor='rm', + anchor="rm", ) img.paste(grey_bar_bg1_img, (-20, 910), grey_bar_bg1_img) else: @@ -240,24 +246,24 @@ async def draw_ap_img(uid: str) -> Image.Image: blue_bar_bg1_draw = ImageDraw.Draw(blue_bar_bg1_img) blue_bar_bg1_draw.text( (170, 60), - '公开招募刷新', + "公开招募刷新", font=sans_font_34, fill=first_color, - anchor='lm', + anchor="lm", ) blue_bar_bg1_draw.text( (540, 70), - '可进行公开招募刷新', + "可进行公开招募刷新", font=sans_font_18, fill=first_color, - anchor='rm', + anchor="rm", ) blue_bar_bg1_draw.text( xy=(777, 58), - text='可刷新', + text="可刷新", font=sans_font_34, fill=white_color, - anchor='rm', + anchor="rm", ) img.paste(blue_bar_bg1_img, (-20, 910), blue_bar_bg1_img) else: @@ -265,10 +271,10 @@ async def draw_ap_img(uid: str) -> Image.Image: grey_bar_bg1_draw = ImageDraw.Draw(grey_bar_bg1_img) grey_bar_bg1_draw.text( (170, 60), - '暂无数据', + "暂无数据", font=sans_font_34, fill=first_color, - anchor='lm', + anchor="lm", ) img.paste(grey_bar_bg1_img, (-20, 910), grey_bar_bg1_img) @@ -286,24 +292,24 @@ async def draw_ap_img(uid: str) -> Image.Image: blue_bar_bg1_draw = ImageDraw.Draw(blue_bar_bg1_img) blue_bar_bg1_draw.text( (170, 60), - '训练室', + "训练室", font=sans_font_34, fill=first_color, - anchor='lm', + anchor="lm", ) blue_bar_bg1_draw.text( (540, 70), - f'{remain_time}后完成专精' if remain_secs != -1 else '设备空闲中', + f"{remain_time}后完成专精" if remain_secs != -1 else "设备空闲中", font=sans_font_18, fill=first_color, - anchor='rm', + anchor="rm", ) blue_bar_bg1_draw.text( xy=(777, 58), - text=f'{char_cn_name}', + text=f"{char_cn_name}", font=sans_font_34, fill=white_color, - anchor='rm', + anchor="rm", ) img.paste(blue_bar_bg1_img, (-20, 1020), blue_bar_bg1_img) else: @@ -311,24 +317,24 @@ async def draw_ap_img(uid: str) -> Image.Image: grey_bar_bg1_draw = ImageDraw.Draw(grey_bar_bg1_img) grey_bar_bg1_draw.text( (170, 60), - '训练室', + "训练室", font=sans_font_34, fill=first_color, - anchor='lm', + anchor="lm", ) grey_bar_bg1_draw.text( (540, 70), - '设备空闲中', + "设备空闲中", font=sans_font_18, fill=first_color, - anchor='rm', + anchor="rm", ) grey_bar_bg1_draw.text( xy=(777, 58), - text='无干员', + text="无干员", font=sans_font_34, fill=white_color, - anchor='rm', + anchor="rm", ) img.paste(grey_bar_bg1_img, (-20, 1020), grey_bar_bg1_img) @@ -341,10 +347,10 @@ async def draw_ap_img(uid: str) -> Image.Image: blue_bar_bg1_draw = ImageDraw.Draw(blue_bar_bg1_img) blue_bar_bg1_draw.text( (170, 60), - '每周报酬合成玉', + "每周报酬合成玉", font=sans_font_34, fill=first_color, - anchor='lm', + anchor="lm", ) # 获取当前时间与下一周周一早上4点的时间差, 转换为几天几小时 @@ -356,18 +362,18 @@ async def draw_ap_img(uid: str) -> Image.Image: delta_hour = delta.seconds // 3600 blue_bar_bg1_draw.text( (540, 70), - f'{delta_day}天{delta_hour}小时后刷新', + f"{delta_day}天{delta_hour}小时后刷新", font=sans_font_18, fill=first_color, - anchor='rm', + anchor="rm", ) blue_bar_bg1_draw.text( xy=(777, 58), - text=f'{campaign_reward.current}/{campaign_reward.total}', + text=f"{campaign_reward.current}/{campaign_reward.total}", font=sans_font_34, fill=white_color, - anchor='rm', + anchor="rm", ) img.paste(blue_bar_bg1_img, (-20, 1130), blue_bar_bg1_img) @@ -387,24 +393,24 @@ async def draw_ap_img(uid: str) -> Image.Image: blue_bar_bg1_draw = ImageDraw.Draw(blue_bar_bg1_img) blue_bar_bg1_draw.text( (170, 60), - '每日任务', + "每日任务", font=sans_font_34, fill=first_color, - anchor='lm', + anchor="lm", ) blue_bar_bg1_draw.text( (540, 70), - f'{delta_hour}小时{delta_minute}分钟后刷新', + f"{delta_hour}小时{delta_minute}分钟后刷新", font=sans_font_18, fill=first_color, - anchor='rm', + anchor="rm", ) blue_bar_bg1_draw.text( xy=(777, 58), - text=f'{routine_daily.current}/{routine_daily.total}', + text=f"{routine_daily.current}/{routine_daily.total}", font=sans_font_34, fill=white_color, - anchor='rm', + anchor="rm", ) img.paste(blue_bar_bg1_img, (-20, 1240), blue_bar_bg1_img) @@ -424,24 +430,24 @@ async def draw_ap_img(uid: str) -> Image.Image: blue_bar_bg1_draw = ImageDraw.Draw(blue_bar_bg1_img) blue_bar_bg1_draw.text( (170, 60), - '每周任务', + "每周任务", font=sans_font_34, fill=first_color, - anchor='lm', + anchor="lm", ) blue_bar_bg1_draw.text( (540, 70), - f'{delta_day}天{delta_hour}小时后刷新', + f"{delta_day}天{delta_hour}小时后刷新", font=sans_font_18, fill=first_color, - anchor='rm', + anchor="rm", ) blue_bar_bg1_draw.text( xy=(777, 58), - text=f'{routine_weekly.current}/{routine_weekly.total}', + text=f"{routine_weekly.current}/{routine_weekly.total}", font=sans_font_34, fill=white_color, - anchor='rm', + anchor="rm", ) img.paste(blue_bar_bg1_img, (-20, 1350), blue_bar_bg1_img) @@ -462,24 +468,24 @@ async def draw_ap_img(uid: str) -> Image.Image: blue_bar_bg1_draw = ImageDraw.Draw(blue_bar_bg1_img) blue_bar_bg1_draw.text( (170, 60), - '数据增补仪', + "数据增补仪", font=sans_font_34, fill=first_color, - anchor='lm', + anchor="lm", ) blue_bar_bg1_draw.text( (540, 70), - f'{delta_day}天{delta_hour}小时后刷新', + f"{delta_day}天{delta_hour}小时后刷新", font=sans_font_18, fill=first_color, - anchor='rm', + anchor="rm", ) blue_bar_bg1_draw.text( xy=(777, 58), - text=f'{higher_item.current}/{higher_item.total}', + text=f"{higher_item.current}/{higher_item.total}", font=sans_font_34, fill=white_color, - anchor='rm', + anchor="rm", ) img.paste(blue_bar_bg1_img, (-20, 1460), blue_bar_bg1_img) @@ -491,34 +497,34 @@ async def draw_ap_img(uid: str) -> Image.Image: blue_bar_bg1_draw = ImageDraw.Draw(blue_bar_bg1_img) blue_bar_bg1_draw.text( (170, 60), - '数据增补条', + "数据增补条", font=sans_font_34, fill=first_color, - anchor='lm', + anchor="lm", ) blue_bar_bg1_draw.text( (540, 70), - f'{delta_day}天{delta_hour}小时后刷新', + f"{delta_day}天{delta_hour}小时后刷新", font=sans_font_18, fill=first_color, - anchor='rm', + anchor="rm", ) blue_bar_bg1_draw.text( xy=(777, 58), - text=f'{lower_item.current}/{lower_item.total}', + text=f"{lower_item.current}/{lower_item.total}", font=sans_font_34, fill=white_color, - anchor='rm', + anchor="rm", ) img.paste(blue_bar_bg1_img, (-20, 1570), blue_bar_bg1_img) img_draw = ImageDraw.Draw(img) img_draw.text( (425, 1710), - 'Powerd By ArknightsUID | GsCore', + "Powerd By ArknightsUID | GsCore", font=sans_font_26, fill=first_color, - anchor='mm', + anchor="mm", ) return img diff --git a/ArknightsUID/arknightsuid_ap/notice.py b/ArknightsUID/arknightsuid_ap/notice.py index 16c84a1..cdb9f32 100644 --- a/ArknightsUID/arknightsuid_ap/notice.py +++ b/ArknightsUID/arknightsuid_ap/notice.py @@ -9,11 +9,11 @@ from ..utils.database.models import ArknightsPush, ArknightsUser from ..utils.models.skland.models import ArknightsPlayerInfoModel from .utils import now_ap -MR_NOTICE = '\n可发送[arkmr]或者[ark每日]来查看更多信息!\n' +MR_NOTICE = "\n可发送[arkmr]或者[ark每日]来查看更多信息!\n" NOTICE = { - 'ap': f'你的理智快满啦!{MR_NOTICE}', - 'training': f'你的专精即将可收取!{MR_NOTICE}', + "ap": f"你的理智快满啦!{MR_NOTICE}", + "training": f"你的专精即将可收取!{MR_NOTICE}", } @@ -25,7 +25,7 @@ async def get_notice_list() -> Dict[str, Dict[str, Dict]]: if user.uid is not None: raw_data = await ark_skd_api.get_game_player_info(user.uid) if isinstance(raw_data, int): - logger.error(f'[ark推送提醒]获取{user.uid}的数据失败!') + logger.error(f"[ark推送提醒]获取{user.uid}的数据失败!") continue push_data = await ArknightsPush.select_push_data(user.uid) msg_dict = await all_check( @@ -49,48 +49,48 @@ async def all_check( ) -> Dict[str, Dict[str, Dict]]: for mode in NOTICE.keys(): # 检查条件 - if push_data[f'{mode}_is_push'] is True: - if arkconfig.get_config('CrazyNotice').data: - if not await check(mode, raw_data, push_data[f'{mode}_value']): + if push_data[f"{mode}_is_push"] is True: + if arkconfig.get_config("CrazyNotice").data: + if not await check(mode, raw_data, push_data[f"{mode}_value"]): await ArknightsPush.update_push_data( uid, - {f'{mode}_is_push': False}, + {f"{mode}_is_push": False}, ) continue # 准备推送 - if await check(mode, raw_data, push_data[f'{mode}_value']): - if push_data[f'{mode}_push'] is False: + if await check(mode, raw_data, push_data[f"{mode}_value"]): + if push_data[f"{mode}_push"] is False: pass # on 推送到私聊 else: # 初始化 if bot_id not in msg_dict: - msg_dict[bot_id] = {'direct': {}, 'group': {}} + msg_dict[bot_id] = {"direct": {}, "group": {}} - if push_data[f'{mode}_push'] is True: + if push_data[f"{mode}_push"] is True: # 添加私聊信息 - if user_id not in msg_dict[bot_id]['direct']: - msg_dict[bot_id]['direct'][user_id] = NOTICE[mode] + if user_id not in msg_dict[bot_id]["direct"]: + msg_dict[bot_id]["direct"][user_id] = NOTICE[mode] else: - msg_dict[bot_id]['direct'][user_id] += NOTICE[mode] - await ArknightsPush.update_push_data(uid, {f'{mode}_is_push': True}) + msg_dict[bot_id]["direct"][user_id] += NOTICE[mode] + await ArknightsPush.update_push_data(uid, {f"{mode}_is_push": True}) # 群号推送到群聊 else: # 初始化 - gid = push_data[f'{mode}_push'] - if gid not in msg_dict[bot_id]['group']: - msg_dict[bot_id]['group'][gid] = {} + gid = push_data[f"{mode}_push"] + if gid not in msg_dict[bot_id]["group"]: + msg_dict[bot_id]["group"][gid] = {} - if user_id not in msg_dict[bot_id]['group'][gid]: - msg_dict[bot_id]['group'][gid][user_id] = NOTICE[mode] + if user_id not in msg_dict[bot_id]["group"][gid]: + msg_dict[bot_id]["group"][gid][user_id] = NOTICE[mode] else: - msg_dict[bot_id]['group'][gid][user_id] += NOTICE[mode] - await ArknightsPush.update_push_data(uid, {f'{mode}_is_push': True}) + msg_dict[bot_id]["group"][gid][user_id] += NOTICE[mode] + await ArknightsPush.update_push_data(uid, {f"{mode}_is_push": True}) return msg_dict async def check(mode: str, data: ArknightsPlayerInfoModel, limit: int) -> bool: - if mode == 'ap': + if mode == "ap": current_ap = now_ap(data.status.ap) if current_ap >= limit: return True @@ -98,7 +98,7 @@ async def check(mode: str, data: ArknightsPlayerInfoModel, limit: int) -> bool: return True else: return False - if mode == 'training': + if mode == "training": if data.building.training: remain_secs = data.building.training.remainSecs if remain_secs <= limit * 60: diff --git a/ArknightsUID/arknightsuid_ap/utils.py b/ArknightsUID/arknightsuid_ap/utils.py index eb6773b..cd4a784 100644 --- a/ArknightsUID/arknightsuid_ap/utils.py +++ b/ArknightsUID/arknightsuid_ap/utils.py @@ -7,7 +7,7 @@ from ..utils.models.skland.models import PlayerStatusAp def seconds2hours_zhcn(seconds: int) -> str: m, s = divmod(int(seconds), 60) h, m = divmod(m, 60) - return '%02d小时%02d分钟' % (h, m) + return "%02d小时%02d分钟" % (h, m) def now_ap(ap: PlayerStatusAp) -> int: diff --git a/ArknightsUID/arknightsuid_config/__init__.py b/ArknightsUID/arknightsuid_config/__init__.py index a349358..0b8d7b5 100644 --- a/ArknightsUID/arknightsuid_config/__init__.py +++ b/ArknightsUID/arknightsuid_config/__init__.py @@ -9,7 +9,7 @@ from gsuid_core.utils.error_reply import UID_HINT from ..utils.database.models import ArknightsBind from .set_config import set_config_func, set_push_value -sv_self_config = SV('ark配置') +sv_self_config = SV("ark配置") # @sv_self_config.on_fullmatch(("ark配置", "方舟配置")) @@ -19,46 +19,46 @@ sv_self_config = SV('ark配置') # await bot.send(im) -@sv_self_config.on_prefix(('ark设置')) # noqa: UP034 +@sv_self_config.on_prefix(("ark设置")) # noqa: UP034 async def send_config_ev(bot: Bot, ev: Event): - logger.info('开始执行[设置阈值信息]') + logger.info("开始执行[设置阈值信息]") uid = await ArknightsBind.get_uid_by_game(ev.user_id, bot.bot_id) if uid is None: return await bot.send(UID_HINT) - func = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text.replace('阈值', ''))) - value = re.findall(r'\d+', ev.text) + func = "".join(re.findall("[\u4e00-\u9fa5]", ev.text.replace("阈值", ""))) + value = re.findall(r"\d+", ev.text) value = value[0] if value else None if value is None: - return await bot.send('请输入正确的阈值数字...') + return await bot.send("请输入正确的阈值数字...") - logger.info(f'[设置阈值信息]func: {func}, value: {value}') + logger.info(f"[设置阈值信息]func: {func}, value: {value}") im = await set_push_value(ev.bot_id, func, uid, int(value)) await bot.send(im) # 开启 自动签到 功能 -@sv_self_config.on_prefix(('ark开启', 'ark关闭')) +@sv_self_config.on_prefix(("ark开启", "ark关闭")) async def open_switch_func(bot: Bot, ev: Event): user_id = ev.user_id config_name = ev.text - logger.info(f'[{user_id}]尝试[{ev.command[2:]}]了[{ev.text}]功能') + logger.info(f"[{user_id}]尝试[{ev.command[2:]}]了[{ev.text}]功能") - if ev.command == 'ark开启': + if ev.command == "ark开启": query = True - gid = ev.group_id if ev.group_id else 'on' + gid = ev.group_id if ev.group_id else "on" else: query = False - gid = 'off' + gid = "off" is_admin = ev.user_pm <= 2 if ev.at and is_admin: user_id = ev.at elif ev.at: - return await bot.send('你没有权限...') + return await bot.send("你没有权限...") uid = await ArknightsBind.get_uid_by_game(ev.user_id, bot.bot_id) if uid is None: diff --git a/ArknightsUID/arknightsuid_config/ark_config.py b/ArknightsUID/arknightsuid_config/ark_config.py index 664e245..97c5589 100644 --- a/ArknightsUID/arknightsuid_config/ark_config.py +++ b/ArknightsUID/arknightsuid_config/ark_config.py @@ -3,4 +3,4 @@ from gsuid_core.utils.plugins_config.gs_config import StringConfig from ..utils.resource.RESOURCE_PATH import CONFIG_PATH from .config_default import CONIFG_DEFAULT -arkconfig = StringConfig('ArknightsUID', CONFIG_PATH, CONIFG_DEFAULT) +arkconfig = StringConfig("ArknightsUID", CONFIG_PATH, CONIFG_DEFAULT) diff --git a/ArknightsUID/arknightsuid_config/config_default.py b/ArknightsUID/arknightsuid_config/config_default.py index 6797bb5..1c66fa2 100644 --- a/ArknightsUID/arknightsuid_config/config_default.py +++ b/ArknightsUID/arknightsuid_config/config_default.py @@ -7,25 +7,27 @@ from gsuid_core.utils.plugins_config.models import ( ) CONIFG_DEFAULT: Dict[str, GSC] = { - 'SignTime': GsListStrConfig('每晚签到时间设置', '每晚森空岛签到时间设置(时,分)', ['0', '38']), - 'SignReportSimple': GsBoolConfig( - '简洁签到报告', - '开启后可以大大减少每日签到报告字数', + "SignTime": GsListStrConfig( + "每晚签到时间设置", "每晚森空岛签到时间设置(时,分)", ["0", "38"] + ), + "SignReportSimple": GsBoolConfig( + "简洁签到报告", + "开启后可以大大减少每日签到报告字数", True, ), - 'SchedSignin': GsBoolConfig( - '定时签到', - '开启后每晚00:30将开始自动签到任务', + "SchedSignin": GsBoolConfig( + "定时签到", + "开启后每晚00:30将开始自动签到任务", True, ), - 'ArknightsPrefix': GsStrConfig( - '插件命令前缀(确认无冲突再修改)', - '用于本插件的前缀设定', - 'ark', + "ArknightsPrefix": GsStrConfig( + "插件命令前缀(确认无冲突再修改)", + "用于本插件的前缀设定", + "ark", ), - 'CrazyNotice': GsBoolConfig( - '催命模式', - '开启后当达到推送阈值将会一直推送', + "CrazyNotice": GsBoolConfig( + "催命模式", + "开启后当达到推送阈值将会一直推送", False, ), } diff --git a/ArknightsUID/arknightsuid_config/set_config.py b/ArknightsUID/arknightsuid_config/set_config.py index c54b320..f6a0d58 100644 --- a/ArknightsUID/arknightsuid_config/set_config.py +++ b/ArknightsUID/arknightsuid_config/set_config.py @@ -7,13 +7,13 @@ from .ark_config import arkconfig from .config_default import CONIFG_DEFAULT PUSH_MAP = { - '理智': 'ap', - '训练室': 'train', - '版本更新': 'version', + "理智": "ap", + "训练室": "train", + "版本更新": "version", } PRIV_MAP = { - '自动签到': 'sign', - '推送': 'push', + "自动签到": "sign", + "推送": "push", } @@ -21,20 +21,20 @@ async def set_push_value(bot_id: str, func: str, uid: str, value: int): if func in PUSH_MAP: status = PUSH_MAP[func] else: - return '该配置项不存在!' - logger.info(f'[设置推送阈值]func: {status}, value: {value}') - if await ArknightsPush.update_push_data(uid, {f'{status}_value': value}): - return f'设置成功!\n当前{func}推送阈值:{value}' + return "该配置项不存在!" + logger.info(f"[设置推送阈值]func: {status}, value: {value}") + if await ArknightsPush.update_push_data(uid, {f"{status}_value": value}): + return f"设置成功!\n当前{func}推送阈值:{value}" else: - return '设置失败!\n请检查参数是否正确!' + return "设置失败!\n请检查参数是否正确!" async def set_config_func( bot_id: str, - config_name: str = '', - uid: str = '0', - user_id: str = '', - option: str = '0', + config_name: str = "", + uid: str = "0", + user_id: str = "", + option: str = "0", query: Optional[bool] = None, is_admin: bool = False, ): @@ -46,17 +46,17 @@ async def set_config_func( break else: logger.info( - f'uid: {uid}, option: {option}, config_name: {config_name}', + f"uid: {uid}, option: {option}, config_name: {config_name}", ) if config_name in PRIV_MAP: # 执行设置 await ArknightsUser.update_user_data( uid, { - f'{PRIV_MAP[config_name]}_switch': option, + f"{PRIV_MAP[config_name]}_switch": option, }, ) - elif config_name.replace('推送', '') in PUSH_MAP: + elif config_name.replace("推送", "") in PUSH_MAP: await ArknightsPush.update_push_data( uid, { @@ -64,24 +64,24 @@ async def set_config_func( }, ) else: - return '该配置项不存在!' + return "该配置项不存在!" - if option == 'on': - succeed_msg = '开启至私聊消息!' - elif option == 'off': - succeed_msg = '关闭!' + if option == "on": + succeed_msg = "开启至私聊消息!" + elif option == "off": + succeed_msg = "关闭!" else: - succeed_msg = f'开启至群{option}' - return f'{config_name}已{succeed_msg}' + succeed_msg = f"开启至群{option}" + return f"{config_name}已{succeed_msg}" if is_admin: - logger.info(f'config_name:{config_name},query:{query}') + logger.info(f"config_name:{config_name},query:{query}") # 执行设置 if query is not None: arkconfig.set_config(name, query) - im = '成功设置{}为{}。'.format(config_name, '开' if query else '关') + im = "成功设置{}为{}。".format(config_name, "开" if query else "关") else: - im = '未传入参数query!' + im = "未传入参数query!" else: - im = '只有管理员才能设置群服务。' + im = "只有管理员才能设置群服务。" return im diff --git a/ArknightsUID/arknightsuid_help/__init__.py b/ArknightsUID/arknightsuid_help/__init__.py index 95c7204..9846275 100644 --- a/ArknightsUID/arknightsuid_help/__init__.py +++ b/ArknightsUID/arknightsuid_help/__init__.py @@ -6,11 +6,11 @@ from gsuid_core.sv import SV from ..utils.ark_prefix import PREFIX from .get_help import get_core_help -sv_ark_help = SV('ark帮助') +sv_ark_help = SV("ark帮助") -@sv_ark_help.on_fullmatch((f'{PREFIX}帮助')) # noqa: UP034 +@sv_ark_help.on_fullmatch((f"{PREFIX}帮助")) # noqa: UP034 async def send_help_img(bot: Bot, ev: Event): - logger.info('开始执行[ark帮助]') + logger.info("开始执行[ark帮助]") im = await get_core_help() await bot.send(im) diff --git a/ArknightsUID/arknightsuid_help/get_help.py b/ArknightsUID/arknightsuid_help/get_help.py index ab5e5cd..fe921a4 100644 --- a/ArknightsUID/arknightsuid_help/get_help.py +++ b/ArknightsUID/arknightsuid_help/get_help.py @@ -8,15 +8,19 @@ from msgspec import json as msgjson from PIL import Image from ..utils.fonts.source_han_sans import source_han_sans_cn_origin -from ..version import Arknights_Client_version, Arknights_Res_version, ArknightsUID_version +from ..version import ( + Arknights_Client_version, + Arknights_Res_version, + ArknightsUID_version, +) -TEXT_PATH = Path(__file__).parent / 'texture2d' -HELP_DATA = Path(__file__).parent / 'Help.json' +TEXT_PATH = Path(__file__).parent / "texture2d" +HELP_DATA = Path(__file__).parent / "Help.json" async def get_help_data() -> Union[Dict[str, PluginHelp], None]: if HELP_DATA.exists(): - async with aiofiles.open(HELP_DATA, 'rb') as file: + async with aiofiles.open(HELP_DATA, "rb") as file: return msgjson.decode( await file.read(), type=Dict[str, PluginHelp], @@ -26,20 +30,21 @@ async def get_help_data() -> Union[Dict[str, PluginHelp], None]: async def get_core_help() -> Union[bytes, str]: help_data = await get_help_data() if help_data is None: - return '暂未找到帮助数据...' + return "暂未找到帮助数据..." img = await get_help( - 'ArknightsUID', - f'版本号:{ArknightsUID_version}', + "ArknightsUID", + f"版本号:{ArknightsUID_version}", help_data, - Image.open(TEXT_PATH / 'bg.jpg'), - Image.open(TEXT_PATH / 'icon.png'), - Image.open(TEXT_PATH / 'badge.png'), - Image.open(TEXT_PATH / 'banner.png'), - Image.open(TEXT_PATH / 'button.png'), + Image.open(TEXT_PATH / "bg.jpg"), + Image.open(TEXT_PATH / "icon.png"), + Image.open(TEXT_PATH / "badge.png"), + Image.open(TEXT_PATH / "banner.png"), + Image.open(TEXT_PATH / "button.png"), source_han_sans_cn_origin, extra_message=[ - f'Client Version:{Arknights_Client_version} ' f' Res version: {Arknights_Res_version}' + f"Client Version:{Arknights_Client_version} " + f" Res version: {Arknights_Res_version}" ], ) return img diff --git a/ArknightsUID/arknightsuid_mind/__init__.py b/ArknightsUID/arknightsuid_mind/__init__.py index c32966e..908a782 100644 --- a/ArknightsUID/arknightsuid_mind/__init__.py +++ b/ArknightsUID/arknightsuid_mind/__init__.py @@ -23,7 +23,7 @@ # sv_get_version_admin = SV('ark推送版本更新', pm=1) -# @sv_get_version_admin.on_fullmatch((f'{PREFIX}开启推送版本更新')) # noqa: UP034 +# @sv_get_version_admin.on_fullmatch((f'{PREFIX}开启推送版本更新')) # async def force_version_job(bot: Bot, ev: Event): # await bot.logger.info('开始执行[ark推送版本更新]') # await ark_version_job() diff --git a/ArknightsUID/arknightsuid_resource/__init__.py b/ArknightsUID/arknightsuid_resource/__init__.py index bb8a0a5..c76cdfe 100644 --- a/ArknightsUID/arknightsuid_resource/__init__.py +++ b/ArknightsUID/arknightsuid_resource/__init__.py @@ -6,17 +6,17 @@ from gsuid_core.plugins.ArknightsUID.ArknightsUID.utils.resource.download_all_re ) from gsuid_core.sv import SV -sv_download_config = SV('下载资源', pm=2) +sv_download_config = SV("下载资源", pm=2) -@sv_download_config.on_fullmatch(('ark下载全部资源')) # noqa: UP034 +@sv_download_config.on_fullmatch(("ark下载全部资源")) # noqa: UP034 async def send_download_resource_msg(bot: Bot, ev: Event): - await bot.send('正在开始下载~可能需要较久的时间!') + await bot.send("正在开始下载~可能需要较久的时间!") im = await download_all_resource() await bot.send(im) async def startup(): - logger.info('[资源文件下载] 正在检查与下载缺失的资源文件, 可能需要较长时间, 请稍等') + logger.info("[资源文件下载] 正在检查与下载缺失的资源文件, 可能需要较长时间, 请稍等") await download_all_resource() - logger.info('[资源文件下载] 完毕') + logger.info("[资源文件下载] 完毕") diff --git a/ArknightsUID/arknightsuid_resource/constants.py b/ArknightsUID/arknightsuid_resource/constants.py index f9de1ad..f5526cc 100644 --- a/ArknightsUID/arknightsuid_resource/constants.py +++ b/ArknightsUID/arknightsuid_resource/constants.py @@ -1,9 +1,10 @@ +import asyncio from pathlib import Path import json +import threading +from ..utils.resource.download_all_resource import download_all_resource from ..utils.resource.RESOURCE_PATH import GAMEDATA_PATH -from ..utils.models.gamedata.ActivityTable import ActivityTable -from ..utils.models.gamedata.AudioData import AudioData from ..utils.models.gamedata.BattleEquipTable import BattleEquipTable from ..utils.models.gamedata.BuildingData import BuildingData from ..utils.models.gamedata.CampaignTable import CampaignTable @@ -18,7 +19,6 @@ from ..utils.models.gamedata.ClimbTowerTable import ClimbTowerTable from ..utils.models.gamedata.ClueData import ClueData from ..utils.models.gamedata.CrisisTable import CrisisTable from ..utils.models.gamedata.CrisisV2Table import CrisisV2Table -from ..utils.models.gamedata.DisplayMetaTable import DisplayMetaTable from ..utils.models.gamedata.EnemyHandbookTable import EnemyHandbookTable from ..utils.models.gamedata.FavorTable import FavorTable from ..utils.models.gamedata.GachaTable import GachaTable @@ -60,82 +60,124 @@ def read_json(file_path: Path, **kwargs) -> dict: Read a JSON file and return its contents as a dictionary. """ try: - with Path.open(file_path, encoding='UTF-8', **kwargs) as file: + with Path.open(file_path, encoding="UTF-8", **kwargs) as file: return json.load(file) except (FileNotFoundError, json.JSONDecodeError) as e: - logger.error(f'Error reading JSON file: {e}') + logger.error(f"Error reading JSON file: {e}") return {} - +threading.Thread( + target=lambda: asyncio.run(download_all_resource()), daemon=True +).start() # ACTIVITY_TABLE = ActivityTable.convert(read_json(GAMEDATA_PATH / 'activity_table.json')) # AUDIO_DATA = AudioData.convert(read_json(GAMEDATA_PATH / 'audio_data.json')) BATTLE_EQUIP_TABLE = BattleEquipTable.convert( - {'equips': read_json(GAMEDATA_PATH / 'battle_equip_table.json')} + {"equips": read_json(GAMEDATA_PATH / "battle_equip_table.json")} ) -BUILDING_DATA = BuildingData.convert(read_json(GAMEDATA_PATH / 'building_data.json')) +BUILDING_DATA = BuildingData.convert(read_json(GAMEDATA_PATH / "building_data.json")) -CAMPAIGN_TABLE = CampaignTable.convert(read_json(GAMEDATA_PATH / 'campaign_table.json')) -CHAPTER_TABLE = ChapterTable.convert({'chapters': read_json(GAMEDATA_PATH / 'chapter_table.json')}) -CHARACTER_TABLE = CharacterTable.convert({'chars': read_json(GAMEDATA_PATH / 'character_table.json')}) -CHAR_META_TABLE = CharMetaTable.convert(read_json(GAMEDATA_PATH / 'char_meta_table.json')) -CHARM_TABLE = CharmTable.convert(read_json(GAMEDATA_PATH / 'charm_table.json')) -CHAR_PATH_TABLE = CharPatchTable.convert(read_json(GAMEDATA_PATH / 'char_patch_table.json')) -CHARWORD_TABLE = CharwordTable.convert(read_json(GAMEDATA_PATH / 'charword_table.json')) -CHECKIN_TABLE = CheckinTable.convert(read_json(GAMEDATA_PATH / 'checkin_table.json')) -CLIMB_TOWER_TABLE = ClimbTowerTable.convert(read_json(GAMEDATA_PATH / 'climb_tower_table.json')) -CLUE_DATA = ClueData.convert(read_json(GAMEDATA_PATH / 'clue_data.json')) -CRISIS_TABLE = CrisisTable.convert(read_json(GAMEDATA_PATH / 'crisis_table.json')) -CRISIS_V2_TABLE = CrisisV2Table.convert(read_json(GAMEDATA_PATH / 'crisis_v2_table.json')) +CAMPAIGN_TABLE = CampaignTable.convert(read_json(GAMEDATA_PATH / "campaign_table.json")) +CHAPTER_TABLE = ChapterTable.convert( + {"chapters": read_json(GAMEDATA_PATH / "chapter_table.json")} +) +CHARACTER_TABLE = CharacterTable.convert( + {"chars": read_json(GAMEDATA_PATH / "character_table.json")} +) +CHAR_META_TABLE = CharMetaTable.convert( + read_json(GAMEDATA_PATH / "char_meta_table.json") +) +CHARM_TABLE = CharmTable.convert(read_json(GAMEDATA_PATH / "charm_table.json")) +CHAR_PATH_TABLE = CharPatchTable.convert( + read_json(GAMEDATA_PATH / "char_patch_table.json") +) +CHARWORD_TABLE = CharwordTable.convert(read_json(GAMEDATA_PATH / "charword_table.json")) +CHECKIN_TABLE = CheckinTable.convert(read_json(GAMEDATA_PATH / "checkin_table.json")) +CLIMB_TOWER_TABLE = ClimbTowerTable.convert( + read_json(GAMEDATA_PATH / "climb_tower_table.json") +) +CLUE_DATA = ClueData.convert(read_json(GAMEDATA_PATH / "clue_data.json")) +CRISIS_TABLE = CrisisTable.convert(read_json(GAMEDATA_PATH / "crisis_table.json")) +CRISIS_V2_TABLE = CrisisV2Table.convert( + read_json(GAMEDATA_PATH / "crisis_v2_table.json") +) # DISPLAY_META_TABLE = DisplayMetaTable.convert(read_json(GAMEDATA_PATH / 'display_meta_table.json')) -ENEMY_HANDBOOK_TABLE = EnemyHandbookTable.convert(read_json(GAMEDATA_PATH / 'enemy_handbook_table.json')) - -FAVOR_TABLE = FavorTable.convert(read_json(GAMEDATA_PATH / 'favor_table.json')) - -GACHA_TABLE = GachaTable.convert(read_json(GAMEDATA_PATH / 'gacha_table.json')) -GAMEDATA_CONST = GamedataConst.convert(read_json(GAMEDATA_PATH / 'gamedata_const.json')) - -HANDBOOK_INFO_TABLE = HandbookInfoTable.convert(read_json(GAMEDATA_PATH / 'handbook_info_table.json')) -HANDBOOK_TABLE = HandbookTable.convert(read_json(GAMEDATA_PATH / 'handbook_table.json')) -HANDBOOK_TEAM_TABLE = HandbookTeamTable.convert( - {'team': read_json(GAMEDATA_PATH / 'handbook_team_table.json')} +ENEMY_HANDBOOK_TABLE = EnemyHandbookTable.convert( + read_json(GAMEDATA_PATH / "enemy_handbook_table.json") ) -ITEM_TABLE = ItemTable.convert(read_json(GAMEDATA_PATH / 'item_table.json')) +FAVOR_TABLE = FavorTable.convert(read_json(GAMEDATA_PATH / "favor_table.json")) -MEDAL_TABLE = MedalTable.convert(read_json(GAMEDATA_PATH / 'medal_table.json')) -MISSION_TABLE = MissionTable.convert(read_json(GAMEDATA_PATH / 'mission_table.json')) +GACHA_TABLE = GachaTable.convert(read_json(GAMEDATA_PATH / "gacha_table.json")) +GAMEDATA_CONST = GamedataConst.convert(read_json(GAMEDATA_PATH / "gamedata_const.json")) -OPEN_SERVER_TABLE = OpenServerTable.convert(read_json(GAMEDATA_PATH / 'open_server_table.json')) +HANDBOOK_INFO_TABLE = HandbookInfoTable.convert( + read_json(GAMEDATA_PATH / "handbook_info_table.json") +) +HANDBOOK_TABLE = HandbookTable.convert(read_json(GAMEDATA_PATH / "handbook_table.json")) +HANDBOOK_TEAM_TABLE = HandbookTeamTable.convert( + {"team": read_json(GAMEDATA_PATH / "handbook_team_table.json")} +) -PLAYER_AVATAR_TABLE = PlayerAvatarTable.convert(read_json(GAMEDATA_PATH / 'player_avatar_table.json')) +# ITEM_TABLE = ItemTable.convert(read_json(GAMEDATA_PATH / "item_table.json")) -RANGE_TABLE = RangeTable.convert({'range_': read_json(GAMEDATA_PATH / 'range_table.json')}) -REPLICATE_TABLE = ReplicateTable.convert({'replicate': read_json(GAMEDATA_PATH / 'replicate_table.json')}) -RETRO_TABLE = RetroTable.convert(read_json(GAMEDATA_PATH / 'retro_table.json')) -ROGUELIKE_TABLE = RoguelikeTable.convert(read_json(GAMEDATA_PATH / 'roguelike_table.json')) -ROGUELIKE_TOPIC_TABLE = RoguelikeTopicTable.convert(read_json(GAMEDATA_PATH / 'roguelike_topic_table.json')) +MEDAL_TABLE = MedalTable.convert(read_json(GAMEDATA_PATH / "medal_table.json")) +MISSION_TABLE = MissionTable.convert(read_json(GAMEDATA_PATH / "mission_table.json")) -SANDBOX_TABLE = SandboxTable.convert(read_json(GAMEDATA_PATH / 'sandbox_table.json')) -SANDBOX_PERM_TABLE = SandboxPermTable.convert(read_json(GAMEDATA_PATH / 'sandbox_perm_table.json')) -SHOP_CLIENT_TABLE = ShopClientTable.convert(read_json(GAMEDATA_PATH / 'shop_client_table.json')) -SKILL_TABLE = SkillTable.convert({'skills': read_json(GAMEDATA_PATH / 'skill_table.json')}) -SKIN_TABLE = SkinTable.convert(read_json(GAMEDATA_PATH / 'skin_table.json')) -STAGE_TABLE = StageTable.convert(read_json(GAMEDATA_PATH / 'stage_table.json')) +OPEN_SERVER_TABLE = OpenServerTable.convert( + read_json(GAMEDATA_PATH / "open_server_table.json") +) + +PLAYER_AVATAR_TABLE = PlayerAvatarTable.convert( + read_json(GAMEDATA_PATH / "player_avatar_table.json") +) + +RANGE_TABLE = RangeTable.convert( + {"range_": read_json(GAMEDATA_PATH / "range_table.json")} +) +REPLICATE_TABLE = ReplicateTable.convert( + {"replicate": read_json(GAMEDATA_PATH / "replicate_table.json")} +) +RETRO_TABLE = RetroTable.convert(read_json(GAMEDATA_PATH / "retro_table.json")) +ROGUELIKE_TABLE = RoguelikeTable.convert( + read_json(GAMEDATA_PATH / "roguelike_table.json") +) +ROGUELIKE_TOPIC_TABLE = RoguelikeTopicTable.convert( + read_json(GAMEDATA_PATH / "roguelike_topic_table.json") +) + +SANDBOX_TABLE = SandboxTable.convert(read_json(GAMEDATA_PATH / "sandbox_table.json")) +SANDBOX_PERM_TABLE = SandboxPermTable.convert( + read_json(GAMEDATA_PATH / "sandbox_perm_table.json") +) +SHOP_CLIENT_TABLE = ShopClientTable.convert( + read_json(GAMEDATA_PATH / "shop_client_table.json") +) +SKILL_TABLE = SkillTable.convert( + {"skills": read_json(GAMEDATA_PATH / "skill_table.json")} +) +SKIN_TABLE = SkinTable.convert(read_json(GAMEDATA_PATH / "skin_table.json")) +STAGE_TABLE = StageTable.convert(read_json(GAMEDATA_PATH / "stage_table.json")) STORY_REVIEW_META_TABLE = StoryReviewMetaTable.convert( - read_json(GAMEDATA_PATH / 'story_review_meta_table.json') + read_json(GAMEDATA_PATH / "story_review_meta_table.json") ) STORY_REVIEW_TABLE = StoryReviewTable.convert( - {'storyreviewtable': read_json(GAMEDATA_PATH / 'story_review_table.json')} + {"storyreviewtable": read_json(GAMEDATA_PATH / "story_review_table.json")} +) +STORY_TABLE = StoryTable.convert( + {"stories": read_json(GAMEDATA_PATH / "story_table.json")} ) -STORY_TABLE = StoryTable.convert({'stories': read_json(GAMEDATA_PATH / 'story_table.json')}) -TECH_BUFF_TABLE = TechBuffTable.convert(read_json(GAMEDATA_PATH / 'tech_buff_table.json')) -TIP_TABLE = TipTable.convert(read_json(GAMEDATA_PATH / 'tip_table.json')) -TOKEN_TABLE = TokenTable.convert({'tokens': read_json(GAMEDATA_PATH / 'token_table.json')}) +TECH_BUFF_TABLE = TechBuffTable.convert( + read_json(GAMEDATA_PATH / "tech_buff_table.json") +) +TIP_TABLE = TipTable.convert(read_json(GAMEDATA_PATH / "tip_table.json")) +TOKEN_TABLE = TokenTable.convert( + {"tokens": read_json(GAMEDATA_PATH / "token_table.json")} +) -UNIEQUIP_DATA = UniequipData.convert(read_json(GAMEDATA_PATH / 'uniequip_data.json')) -UNIEQUIP_TABLE = UniEquipTable.convert(read_json(GAMEDATA_PATH / 'uniequip_table.json')) -ZONE_TABLE = ZoneTable.convert(read_json(GAMEDATA_PATH / 'zone_table.json')) +UNIEQUIP_DATA = UniequipData.convert(read_json(GAMEDATA_PATH / "uniequip_data.json")) +UNIEQUIP_TABLE = UniEquipTable.convert(read_json(GAMEDATA_PATH / "uniequip_table.json")) +ZONE_TABLE = ZoneTable.convert(read_json(GAMEDATA_PATH / "zone_table.json")) diff --git a/ArknightsUID/arknightsuid_roleinfo/__init__.py b/ArknightsUID/arknightsuid_roleinfo/__init__.py index 31cef60..fdd6108 100644 --- a/ArknightsUID/arknightsuid_roleinfo/__init__.py +++ b/ArknightsUID/arknightsuid_roleinfo/__init__.py @@ -7,14 +7,14 @@ from ..utils.ark_prefix import PREFIX from ..utils.database.models import ArknightsBind from .draw_roleinfo_card import get_role_img -sv_get_info = SV('ark查询信息') +sv_get_info = SV("ark查询信息") -@sv_get_info.on_command((f'{PREFIX}uid')) # noqa: UP034 +@sv_get_info.on_command((f"{PREFIX}uid")) # noqa: UP034 async def send_role_info(bot: Bot, ev: Event): uid = await get_uid(bot, ev, bind_model=ArknightsBind) if uid is None: - return '你还没有绑定UID噢,请使用[ark绑定uid123]完成绑定!' + return "你还没有绑定UID噢,请使用[ark绑定uid123]完成绑定!" - await bot.logger.info('开始执行[ark查询信息]') + await bot.logger.info("开始执行[ark查询信息]") await bot.send(await get_role_img(uid)) diff --git a/ArknightsUID/arknightsuid_roleinfo/draw_roleinfo_card.py b/ArknightsUID/arknightsuid_roleinfo/draw_roleinfo_card.py index 188c36b..b616739 100644 --- a/ArknightsUID/arknightsuid_roleinfo/draw_roleinfo_card.py +++ b/ArknightsUID/arknightsuid_roleinfo/draw_roleinfo_card.py @@ -10,9 +10,9 @@ from ..utils.ark_api import ark_skd_api from ..utils.fonts.source_han_serif import sans_font_28 from ..utils.resource.RESOURCE_PATH import SKINPACK_PATH -TEXT_PATH = Path(__file__).parent / 'texture2D' -bg_img = Image.open(TEXT_PATH / 'bg.png') -base_info_img = Image.open(TEXT_PATH / 'base_info.png') +TEXT_PATH = Path(__file__).parent / "texture2D" +bg_img = Image.open(TEXT_PATH / "bg.png") +base_info_img = Image.open(TEXT_PATH / "base_info.png") async def get_role_img(uid: str): @@ -20,9 +20,9 @@ async def get_role_img(uid: str): if isinstance(player_info, int): return get_error(player_info) - player_save_path = get_res_path(['ArknightsUID', 'players']) + player_save_path = get_res_path(["ArknightsUID", "players"]) - with Path.open(player_save_path / f'{player_info.status.uid}.json', 'wb') as file: + with Path.open(player_save_path / f"{player_info.status.uid}.json", "wb") as file: file.write(msgjson.format(msgjson.encode(player_info), indent=4)) # 放 background @@ -31,10 +31,12 @@ async def get_role_img(uid: str): # 放干员主立绘 secretary = player_info.status.secretary # secretary_charId = secretary.charId - secretary_skinId = secretary.skinId.replace('@', '_') + secretary_skinId = secretary.skinId.replace("@", "_") secretary_char_img = ( - Image.open(SKINPACK_PATH / f'{secretary_skinId}b.png').resize((768, 768)).convert('RGBA') + Image.open(SKINPACK_PATH / f"{secretary_skinId}b.png") + .resize((768, 768)) + .convert("RGBA") ) char_info.paste(secretary_char_img, (0, -20), secretary_char_img) @@ -46,12 +48,12 @@ async def get_role_img(uid: str): player_info.status.name, (255, 255, 255), sans_font_28, - 'lm', + "lm", ) # 放入职信息 - base_info.resize((475, 400)).convert('RGBA') + base_info.resize((475, 400)).convert("RGBA") char_info.paste(base_info, (200, 0), base_info) char_info.show() diff --git a/ArknightsUID/arknightsuid_signin/__init__.py b/ArknightsUID/arknightsuid_signin/__init__.py index 861363d..72f7d03 100644 --- a/ArknightsUID/arknightsuid_signin/__init__.py +++ b/ArknightsUID/arknightsuid_signin/__init__.py @@ -14,46 +14,46 @@ from ..utils.ark_prefix import PREFIX from ..utils.database.models import ArknightsBind from .sign import daily_sign, sign_in -SIGN_TIME = arkconfig.get_config('SignTime').data +SIGN_TIME = arkconfig.get_config("SignTime").data -sv_sign = SV('森空岛签到') -sv_sign_config = SV('森空岛管理', pm=2) +sv_sign = SV("森空岛签到") +sv_sign_config = SV("森空岛管理", pm=2) # 每日零点半执行森空岛签到 -@scheduler.scheduled_job('cron', hour=SIGN_TIME[0], minute=SIGN_TIME[1]) +@scheduler.scheduled_job("cron", hour=SIGN_TIME[0], minute=SIGN_TIME[1]) async def ark_sign_at_night(): - if arkconfig.get_config('SchedSignin').data: + if arkconfig.get_config("SchedSignin").data: await send_daily_sign() # 群聊内 签到 功能 -@sv_sign.on_fullmatch(f'{PREFIX}签到') +@sv_sign.on_fullmatch(f"{PREFIX}签到") async def get_sign_func(bot: Bot, ev: Event): - await bot.logger.info(f'[ARK签到]QQ号: {ev.user_id}') + await bot.logger.info(f"[ARK签到]QQ号: {ev.user_id}") ark_uid = await get_uid(bot, ev, bind_model=ArknightsBind) if ark_uid is None: - return '你还没有绑定UID噢,请使用[ark绑定uid123]完成绑定!' - await bot.logger.info(f'[ARK签到]UID: {ark_uid}') + return "你还没有绑定UID噢,请使用[ark绑定uid123]完成绑定!" + await bot.logger.info(f"[ARK签到]UID: {ark_uid}") await bot.send(await sign_in(ark_uid)) return None -@sv_sign_config.on_fullmatch(f'{PREFIX}全部重签') +@sv_sign_config.on_fullmatch(f"{PREFIX}全部重签") async def recheck(bot: Bot, ev: Event): - await bot.logger.info('开始执行[ARK全部重签]') - await bot.send('已开始执行') + await bot.logger.info("开始执行[ARK全部重签]") + await bot.send("已开始执行") await send_daily_sign() - await bot.send('执行完成') + await bot.send("执行完成") async def send_daily_sign(): - logger.info('开始执行[ARK每日全部签到]') + logger.info("开始执行[ARK每日全部签到]") # 执行签到 并获得推送消息 result = await daily_sign() - private_msg_list = result['private_msg_list'] - group_msg_list = result['group_msg_list'] - logger.info('[ARK每日全部签到]完成') + private_msg_list = result["private_msg_list"] + group_msg_list = result["group_msg_list"] + logger.info("[ARK每日全部签到]完成") # 执行私聊推送 for qid in private_msg_list: @@ -61,41 +61,41 @@ async def send_daily_sign(): for bot_id in gss.active_bot: for single in private_msg_list[qid]: await gss.active_bot[bot_id].target_send( - single['msg'], 'direct', qid, single['bot_id'], '', '' + single["msg"], "direct", qid, single["bot_id"], "", "" ) except Exception as e: - logger.warning(f'[ARK每日全部签到] QQ {qid} 私聊推送失败!错误信息:{e}') + logger.warning(f"[ARK每日全部签到] QQ {qid} 私聊推送失败!错误信息:{e}") await asyncio.sleep(0.5) - logger.info('[ARK每日全部签到]私聊推送完成') + logger.info("[ARK每日全部签到]私聊推送完成") # 执行群聊推送 for gid in group_msg_list: # 根据succee数判断是否为简洁推送 - if group_msg_list[gid]['success'] >= 0: + if group_msg_list[gid]["success"] >= 0: report = ( - '以下为签到失败报告:{}'.format(group_msg_list[gid]['push_message']) - if group_msg_list[gid]['push_message'] != '' - else '' + "以下为签到失败报告:{}".format(group_msg_list[gid]["push_message"]) + if group_msg_list[gid]["push_message"] != "" + else "" ) - msg_title = '森空岛今日自动签到已完成!\n本群共签到成功{}人,共签到失败{}人。{}'.format( - group_msg_list[gid]['success'], - group_msg_list[gid]['failed'], + msg_title = "森空岛今日自动签到已完成!\n本群共签到成功{}人,共签到失败{}人。{}".format( + group_msg_list[gid]["success"], + group_msg_list[gid]["failed"], report, ) else: - msg_title = group_msg_list[gid]['push_message'] + msg_title = group_msg_list[gid]["push_message"] # 发送群消息 try: for bot_id in gss.active_bot: await gss.active_bot[bot_id].target_send( msg_title, - 'group', + "group", gid, - group_msg_list[gid]['bot_id'], - '', - '', + group_msg_list[gid]["bot_id"], + "", + "", ) except Exception as e: - logger.warning(f'[ARK每日全部签到]群 {gid} 推送失败!错误信息:{e}') + logger.warning(f"[ARK每日全部签到]群 {gid} 推送失败!错误信息:{e}") await asyncio.sleep(0.5 + random.randint(1, 3)) - logger.info('[ARK每日全部签到]群聊推送完成') + logger.info("[ARK每日全部签到]群聊推送完成") diff --git a/ArknightsUID/arknightsuid_signin/sign.py b/ArknightsUID/arknightsuid_signin/sign.py index 5d9cf88..5d839c4 100644 --- a/ArknightsUID/arknightsuid_signin/sign.py +++ b/ArknightsUID/arknightsuid_signin/sign.py @@ -2,7 +2,7 @@ import asyncio import random from copy import deepcopy from datetime import datetime -from typing import List +from typing import Sequence from gsuid_core.gss import gss from gsuid_core.logger import logger @@ -18,106 +18,108 @@ already = 0 # 签到函数 async def sign_in(ark_uid: str) -> str: - logger.info(f'[ARK签到] {ark_uid} 开始执行签到') + logger.info(f"[ARK签到] {ark_uid} 开始执行签到") # 获得签到信息 sign_info = await ark_skd_api.get_sign_info(ark_uid) # 初步校验数据 if isinstance(sign_info, int): - logger.warning(f'[ARK签到] {ark_uid} 出错, 请检查森空岛Cred是否过期!') - return '签到失败...请检查森空岛Cred是否过期!' + logger.warning(f"[ARK签到] {ark_uid} 出错, 请检查森空岛Cred是否过期!") + return "签到失败...请检查森空岛Cred是否过期!" # 检测是否已签到 for calendar in sign_info.calendar: if calendar.available: break else: - logger.info(f'[ARK签到] {ark_uid} 该用户今日已签到,跳过...') - global already # noqa: PLW0603 + logger.info(f"[ARK签到] {ark_uid} 该用户今日已签到,跳过...") + global already already += 1 # 获取今天和月初的日期,计算漏签次数 day_of_month = datetime.now().day special_count = 0 count = 0 for calendar in sign_info.calendar: - special_count += 1 if calendar.type_ == 'first' else 0 + special_count += 1 if calendar.type_ == "first" else 0 done = calendar.done if done is True: count += 1 sign_missed = day_of_month - count + special_count - return f'今日已签到!本月漏签次数:{sign_missed}' + return f"今日已签到!本月漏签次数:{sign_missed}" # 进行一次签到 sign_data = await ark_skd_api.skd_sign(uid=ark_uid) # 检测数据 if isinstance(sign_data, int): - logger.warning(f'[ARK签到] {ark_uid} 出错, 请检查森空岛Cred是否过期!') - return 'ark签到失败...请检查森空岛Cred是否过期!' + logger.warning(f"[ARK签到] {ark_uid} 出错, 请检查森空岛Cred是否过期!") + return "ark签到失败...请检查森空岛Cred是否过期!" # 获取签到奖励物品,拿旧的总签到天数 + 1 为新的签到天数,再 -1 即为今日奖励物品的下标 getitem = sign_data.awards - get_im = '' + get_im = "" for award in getitem: - get_im = f'本次ark签到获得{award.resource.name}x{award.count}' + get_im = f"本次ark签到获得{award.resource.name}x{award.count}" # 签到后计算漏签次数 new_sign_info = await ark_skd_api.get_sign_info(ark_uid) # 校验数据 if isinstance(new_sign_info, int): - logger.warning(f'[ARK签到] {ark_uid} 出错, 请检查森空岛Cred是否过期!') - return '签到失败...请检查森空岛Cred是否过期!' + logger.warning(f"[ARK签到] {ark_uid} 出错, 请检查森空岛Cred是否过期!") + return "签到失败...请检查森空岛Cred是否过期!" # 获取今天和月初的日期,计算漏签次数 day_of_month = datetime.now().day special_count = 0 count = 0 for calendar in new_sign_info.calendar: - special_count += 1 if calendar.type_ == 'first' else 0 + special_count += 1 if calendar.type_ == "first" else 0 done = calendar.done if done is True: count += 1 sign_missed = day_of_month - count + special_count - im = f'ark签到成功!\n{get_im}\n本月漏签次数:{sign_missed}' - logger.info(f'[ARK签到] {ark_uid} 签到完成, 结果: ark签到成功, 漏签次数: {sign_missed}') + im = f"ark签到成功!\n{get_im}\n本月漏签次数:{sign_missed}" + logger.info( + f"[ARK签到] {ark_uid} 签到完成, 结果: ark签到成功, 漏签次数: {sign_missed}" + ) return im async def single_daily_sign(bot_id: str, ark_uid: str, gid: str, qid: str): im = await sign_in(ark_uid) - if gid == 'on': + if gid == "on": if qid not in private_msg_list: private_msg_list[qid] = [] - private_msg_list[qid].append({'bot_id': bot_id, 'uid': ark_uid, 'msg': im}) + private_msg_list[qid].append({"bot_id": bot_id, "uid": ark_uid, "msg": im}) else: # 向群消息推送列表添加这个群 if gid not in group_msg_list: group_msg_list[gid] = { - 'bot_id': bot_id, - 'success': 0, - 'failed': 0, - 'push_message': '', + "bot_id": bot_id, + "success": 0, + "failed": 0, + "push_message": "", } # 检查是否开启简洁签到 - if arkconfig.get_config('SignReportSimple').data: + if arkconfig.get_config("SignReportSimple").data: # 如果失败, 则添加到推送列表 - if im.startswith(('ark签到失败', '网络有点忙', 'OK', 'ok')): - message = f'[CQ:at,qq={qid}] {im}' - group_msg_list[gid]['failed'] += 1 - group_msg_list[gid]['push_message'] += '\n' + message + if im.startswith(("ark签到失败", "网络有点忙", "OK", "ok")): + message = f"[CQ:at,qq={qid}] {im}" + group_msg_list[gid]["failed"] += 1 + group_msg_list[gid]["push_message"] += "\n" + message else: - group_msg_list[gid]['success'] += 1 + group_msg_list[gid]["success"] += 1 # 没有开启简洁签到, 则每条消息都要携带@信息 else: # 不用MessageSegment.at(row[2]),因为不方便移植 - message = f'[CQ:at,qq={qid}] {im}' - group_msg_list[gid]['push_message'] += '\n' + message - group_msg_list[gid]['success'] -= 1 + message = f"[CQ:at,qq={qid}] {im}" + group_msg_list[gid]["push_message"] += "\n" + message + group_msg_list[gid]["success"] -= 1 async def daily_sign(): - global already # noqa: PLW0603 + global already tasks = [] for _ in gss.active_bot: - user_list: List[ArknightsUser] = await ArknightsUser.get_all_user() - logger.info(f'[ARK签到] 共有{len(user_list)}个用户需要签到') - logger.info(f'[ARK签到] {user_list}') + user_list: Sequence[ArknightsUser] = await ArknightsUser.get_all_user() + logger.info(f"[ARK签到] 共有{len(user_list)}个用户需要签到") + logger.info(f"[ARK签到] {user_list}") for user in user_list: - if user.sign_switch != 'off' and user.uid is not None: + if user.sign_switch != "off" and user.uid is not None: tasks.append( single_daily_sign( user.bot_id, @@ -132,15 +134,17 @@ async def daily_sign(): delay = 1 else: delay = 50 + random.randint(3, 45) - logger.info(f'[ARK签到] 已签到{len(tasks)}个用户, 等待{delay}秒进行下一次签到') + logger.info( + f"[ARK签到] 已签到{len(tasks)}个用户, 等待{delay}秒进行下一次签到" + ) tasks.clear() already = 0 await asyncio.sleep(delay) await asyncio.gather(*tasks) tasks.clear() result = { - 'private_msg_list': deepcopy(private_msg_list), - 'group_msg_list': deepcopy(group_msg_list), + "private_msg_list": deepcopy(private_msg_list), + "group_msg_list": deepcopy(group_msg_list), } private_msg_list.clear() group_msg_list.clear() diff --git a/ArknightsUID/arknightsuid_start/start.py b/ArknightsUID/arknightsuid_start/start.py index 2e4eb14..8e0f86c 100644 --- a/ArknightsUID/arknightsuid_start/start.py +++ b/ArknightsUID/arknightsuid_start/start.py @@ -3,13 +3,13 @@ import threading from gsuid_core.logger import logger -from ..arknightsuid_resource import startup +# from ..arknightsuid_resource import startup from ..utils.database.startup import ark_adapter async def all_start(): try: - await startup() + # await startup() await ark_adapter() except Exception as e: logger.exception(e) diff --git a/ArknightsUID/arknightsuid_user/__init__.py b/ArknightsUID/arknightsuid_user/__init__.py index 73a2692..ef9e21d 100644 --- a/ArknightsUID/arknightsuid_user/__init__.py +++ b/ArknightsUID/arknightsuid_user/__init__.py @@ -10,10 +10,10 @@ from .deal_skd_cred import deal_skd_cred # from .draw_user_card import get_user_card -sv_user_config = SV('ark用户管理', pm=2) -sv_user_add = SV('ark用户添加') -sv_user_info = SV('ark用户信息') -ark_skd_cred_add = SV('森空岛cred绑定') +sv_user_config = SV("ark用户管理", pm=2) +sv_user_add = SV("ark用户添加") +sv_user_info = SV("ark用户信息") +ark_skd_cred_add = SV("森空岛cred绑定") # sv_user_help = SV('ark绑定帮助') @@ -25,47 +25,49 @@ ark_skd_cred_add = SV('森空岛cred绑定') # await bot.send(uid_list) -@sv_user_info.on_command((f'{PREFIX}绑定uid', f'{PREFIX}切换uid', f'{PREFIX}删除uid', f'{PREFIX}解绑uid')) +@sv_user_info.on_command( + (f"{PREFIX}绑定uid", f"{PREFIX}切换uid", f"{PREFIX}删除uid", f"{PREFIX}解绑uid") +) async def send_link_uid_msg(bot: Bot, ev: Event): - await bot.logger.info('开始执行[绑定/解绑用户信息]') + await bot.logger.info("开始执行[绑定/解绑用户信息]") qid = ev.user_id - await bot.logger.info(f'[绑定/解绑]UserID: {qid}') + await bot.logger.info(f"[绑定/解绑]UserID: {qid}") ark_uid = ev.text.strip() if ark_uid and not ark_uid.isdigit(): - return await bot.send('你输入了错误的格式!') + return await bot.send("你输入了错误的格式!") - if '绑定' in ev.command: + if "绑定" in ev.command: data = await ArknightsBind.insert_uid(qid, ev.bot_id, ark_uid, ev.group_id) return await send_diff_msg( bot, data, { - 0: f'绑定ARK_UID{ark_uid}成功!', - -1: f'ARK_UID{ark_uid}的位数不正确!', - -2: f'ARK_UID{ark_uid}已经绑定过了!', - -3: '你输入了错误的格式!', + 0: f"绑定ARK_UID{ark_uid}成功!", + -1: f"ARK_UID{ark_uid}的位数不正确!", + -2: f"ARK_UID{ark_uid}已经绑定过了!", + -3: "你输入了错误的格式!", }, ) - elif '切换' in ev.command: + elif "切换" in ev.command: data = await ArknightsBind.switch_uid_by_game(qid, ev.bot_id, ark_uid) if isinstance(data, List): - return await bot.send(f'切换ARK_UID{ark_uid}成功!') + return await bot.send(f"切换ARK_UID{ark_uid}成功!") else: - return await bot.send(f'尚未绑定该ARK_UID{ark_uid}') + return await bot.send(f"尚未绑定该ARK_UID{ark_uid}") else: data = await ArknightsBind.delete_uid(qid, ev.bot_id, ark_uid) return await send_diff_msg( bot, data, { - 0: f'删除ARK_UID{ark_uid}成功!', - -1: f'该ARK_UID{ark_uid}不在已绑定列表中!', + 0: f"删除ARK_UID{ark_uid}成功!", + -1: f"该ARK_UID{ark_uid}不在已绑定列表中!", }, ) -@ark_skd_cred_add.on_prefix(('skd添加cred', '森空岛添加CRED')) +@ark_skd_cred_add.on_prefix(("skd添加cred", "森空岛添加CRED")) async def send_ark_skd_add_cred_msg(bot: Bot, ev: Event): im = await deal_skd_cred(ev.bot_id, ev.text, ev.user_id) await bot.send(im) diff --git a/ArknightsUID/arknightsuid_user/deal_skd_cred.py b/ArknightsUID/arknightsuid_user/deal_skd_cred.py index adb6d0c..27f4900 100644 --- a/ArknightsUID/arknightsuid_user/deal_skd_cred.py +++ b/ArknightsUID/arknightsuid_user/deal_skd_cred.py @@ -3,8 +3,8 @@ import re from ..utils.ark_api import ark_skd_api from ..utils.database.models import ArknightsBind, ArknightsPush, ArknightsUser -ERROR_HINT = '添加失败, 格式为: skd添加cred Cred 例如: skd添加cred VropL583Sb1hClS5buQ4nSASkDlL8tMT' -UID_HINT = '添加失败, 请先绑定明日方舟UID' +ERROR_HINT = "添加失败, 格式为: skd添加cred Cred 例如: skd添加cred VropL583Sb1hClS5buQ4nSASkDlL8tMT" +UID_HINT = "添加失败, 请先绑定明日方舟UID" async def deal_skd_cred(bot_id: str, cred: str, user_id: str) -> str: @@ -12,9 +12,9 @@ async def deal_skd_cred(bot_id: str, cred: str, user_id: str) -> str: if uid_list is None: return UID_HINT - match = re.search(r'\S+', cred) + match = re.search(r"\S+", cred) if not match: - return 'Cred无效!' + return "Cred无效!" # refresh token token = await ark_skd_api.refresh_token(match.group()) @@ -25,12 +25,12 @@ async def deal_skd_cred(bot_id: str, cred: str, user_id: str) -> str: ) if isinstance(check_cred, bool): - return 'Cred无效!' + return "Cred无效!" else: skd_uid = check_cred.user.id_ uid = check_cred.gameStatus.uid if uid not in uid_list: - return '请先绑定该 Cred 对应的 uid' + return "请先绑定该 Cred 对应的 uid" # 检查是否已经绑定过 Cred, 如果有的话就 update skd_data = await ArknightsUser.select_data_by_uid(uid) @@ -55,4 +55,4 @@ async def deal_skd_cred(bot_id: str, cred: str, user_id: str) -> str: ) if not push_data: await ArknightsPush.insert_push_data(bot_id, uid=uid, skd_uid=skd_uid) - return '添加成功!' + return "添加成功!" diff --git a/ArknightsUID/arknightsuid_wiki/__init__.py b/ArknightsUID/arknightsuid_wiki/__init__.py index c1a4ef0..bf7186e 100644 --- a/ArknightsUID/arknightsuid_wiki/__init__.py +++ b/ArknightsUID/arknightsuid_wiki/__init__.py @@ -15,23 +15,25 @@ from ..arknightsuid_wiki.draw_wiki_img import ( from ..arknightsuid_resource.constants import CHARACTER_TABLE from ..utils.fonts.source_han_sans import sans_font_20 -sv_sr_wiki = SV('arkWIKI') +sv_sr_wiki = SV("arkWIKI") async def text2pic(text: str, max_size: int = 800, font_size: int = 20): - if text.endswith('\n'): + if text.endswith("\n"): text = text[:-1] - img = Image.new('RGB', (max_size, len(text) * font_size // 5), (228, 222, 210)) + img = Image.new("RGB", (max_size, len(text) * font_size // 5), (228, 222, 210)) img_draw = ImageDraw.ImageDraw(img) - y = draw_center_text_by_line(img_draw, (25, 0), text, sans_font_20, 'black', 750, True) + y = draw_center_text_by_line( + img_draw, (25, 0), text, sans_font_20, "black", 750, True + ) img = img.crop((0, 0, 800, int(y + 30))) return await convert_img(img) -@sv_sr_wiki.on_prefix('ark角色图鉴') +@sv_sr_wiki.on_prefix("ark角色图鉴") async def send_role_wiki_pic(bot: Bot, ev: Event): - char_name = ' '.join(re.findall('[\u4e00-\u9fa5]+', ev.text)) + char_name = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text)) char_id = None for char_id_, char_info in CHARACTER_TABLE.chars.items(): @@ -39,17 +41,17 @@ async def send_role_wiki_pic(bot: Bot, ev: Event): char_id = char_id_ break if not char_id: - await bot.send('未找到该干员') + await bot.send("未找到该干员") return - await bot.logger.info(f'开始获取{char_name}图鉴') + await bot.logger.info(f"开始获取{char_name}图鉴") # img = await draw_wiki(char_id=char_id) img = await get_wiki_info(char_id=char_id) await bot.send(await text2pic(img)) -@sv_sr_wiki.on_prefix('ark模组图鉴') +@sv_sr_wiki.on_prefix("ark模组图鉴") async def send_equip_wiki_pic(bot: Bot, ev: Event): - char_name = ' '.join(re.findall('[\u4e00-\u9fa5]+', ev.text)) + char_name = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text)) char_id = None for char_id_, char_info in CHARACTER_TABLE.chars.items(): @@ -57,8 +59,8 @@ async def send_equip_wiki_pic(bot: Bot, ev: Event): char_id = char_id_ break if not char_id: - await bot.send('未找到该干员') + await bot.send("未找到该干员") return - await bot.logger.info(f'开始获取{char_name}图鉴') + await bot.logger.info(f"开始获取{char_name}图鉴") img = await get_equip_info(char_id=char_id) await bot.send(await text2pic(img)) diff --git a/ArknightsUID/arknightsuid_wiki/draw_wiki_img.py b/ArknightsUID/arknightsuid_wiki/draw_wiki_img.py index 7235f85..6bdb0d2 100644 --- a/ArknightsUID/arknightsuid_wiki/draw_wiki_img.py +++ b/ArknightsUID/arknightsuid_wiki/draw_wiki_img.py @@ -4,7 +4,6 @@ from pathlib import Path from pprint import pformat from typing import Dict, Union -from colorama import Fore, Style from gsuid_core.utils.colortext.ColorText import ColorTextGroup, split_ctg from gsuid_core.utils.image.image_tools import draw_text_by_line from jinja2 import Template @@ -16,23 +15,18 @@ from ..arknightsuid_resource.constants import ( RANGE_TABLE, SKILL_TABLE, UNIEQUIP_TABLE, - CharacterTable, ) from ..utils.fonts.source_han_sans import ( - sans_font_18, - sans_font_20, sans_font_24, - sans_font_26, sans_font_34, - sans_font_50, sans_font_120, ) -TEXTURE2D_PATH = Path(__file__).parent / 'texture2D' +TEXTURE2D_PATH = Path(__file__).parent / "texture2D" -bg_img = Image.open(TEXTURE2D_PATH / 'bg.jpg') -title_img = Image.open(TEXTURE2D_PATH / 'title.png') -vvan_img = Image.open(TEXTURE2D_PATH / 'char_4098_vvana_2b.png').resize((2000, 2000)) +bg_img = Image.open(TEXTURE2D_PATH / "bg.jpg") +title_img = Image.open(TEXTURE2D_PATH / "title.png") +vvan_img = Image.open(TEXTURE2D_PATH / "char_4098_vvana_2b.png").resize((2000, 2000)) first_color = (29, 29, 29) white_color = (255, 255, 255) @@ -40,36 +34,36 @@ red_color = (235, 61, 75) black_color = (0, 0, 0) profession_en_to_cn = { - 'WARRIOR': '近卫', - 'SNIPER': '狙击', - 'TANK': '重装', - 'MEDIC': '医疗', - 'SUPPORT': '辅助', - 'CASTER': '术师', - 'SPECIAL': '特种', - 'PIONEER': '先锋', - 'TOKEN': '召唤物', - 'TRAP': '陷阱', + "WARRIOR": "近卫", + "SNIPER": "狙击", + "TANK": "重装", + "MEDIC": "医疗", + "SUPPORT": "辅助", + "CASTER": "术师", + "SPECIAL": "特种", + "PIONEER": "先锋", + "TOKEN": "召唤物", + "TRAP": "陷阱", } char_position_en_to_cn = { - 'MELEE': '近战', - 'RANGED': '远程', - 'ALL': '近战/远程', - 'NONE': '无', + "MELEE": "近战", + "RANGED": "远程", + "ALL": "近战/远程", + "NONE": "无", } attr_en_to_cn = { - 'maxHp': '生命', - 'atk': '攻击', - 'def_': '防御', - 'magicResistance': '法抗', - 'cost': '部署费用', - 'blockCnt': '阻挡', + "maxHp": "生命", + "atk": "攻击", + "def_": "防御", + "magicResistance": "法抗", + "cost": "部署费用", + "blockCnt": "阻挡", # "moveSpeed": "移动速度", - 'attackSpeed': '攻击速度', - 'baseAttackTime': '攻击间隔', - 'respawnTime': '再部署时间', + "attackSpeed": "攻击速度", + "baseAttackTime": "攻击间隔", + "respawnTime": "再部署时间", # "hpRecoveryPerSec": "生命回复", # "spRecoveryPerSec": "技力回复", # "maxDeployCount": "部署数量上限", @@ -85,50 +79,47 @@ attr_en_to_cn = { } potential_id_to_cn = { - 0: '潜能2', - 1: '潜能3', - 2: '潜能4', - 3: '潜能5', - 4: '潜能6', + 0: "潜能2", + 1: "潜能3", + 2: "潜能4", + 3: "潜能5", + 4: "潜能6", } def test_ctg(length: int, *params): - print( - f'{Fore.GREEN}> running split_ctg(){Style.RESET_ALL}\ - \n length: {length}\ - \n texts: {params}' - ) groups_ = ColorTextGroup(list(params)) - f_ = pformat(split_ctg(groups_, length)).split('\n') - print(Fore.CYAN, '\t', f_[0], '\n\t'.join(f_[0:])) + f_ = pformat(split_ctg(groups_, length)).split("\n") def render_template(template_str: str, data: Dict[str, Union[float, Union[int, None]]]): - matches = re.finditer(r'\{([^}:]+)\}', template_str) - matches_1 = re.finditer(r'\{([^{}]+):([^{}]+)\}', template_str) + matches = re.finditer(r"\{([^}:]+)\}", template_str) + matches_1 = re.finditer(r"\{([^{}]+):([^{}]+)\}", template_str) placeholder_data = {} for match in matches: placeholder = match.groups() - formatting_option = '' - placeholder_data[placeholder[0]] = (formatting_option, data.get(placeholder[0], '')) + formatting_option = "" + placeholder_data[placeholder[0]] = ( + formatting_option, + data.get(placeholder[0], ""), + ) for match in matches_1: placeholder, formatting_option = match.groups() - value = data.get(placeholder.replace('-', ''), '') + value = data.get(placeholder.replace("-", ""), "") # 可以在下列状态和初始状态间切换:\n攻击范围缩小,防御力+{def:0%}, # 每秒恢复最大生命的{HP_RECOVERY_PER_SEC_BY_MAX_HP_RATIO:0.0%} # {'def': 1, 'hp_recovery_per_sec_by_max_hp_ratio': 0.06} - if value == '': - value = data.get(placeholder.replace('-', '_').lower(), '') + if value == "": + value = data.get(placeholder.replace("-", "_").lower(), "") placeholder_data[placeholder] = (formatting_option, value) for placeholder, (formatting_option, value) in placeholder_data.items(): - if formatting_option == '': - template_str = template_str.replace(f'{{{placeholder}}}', f'{value}') + if formatting_option == "": + template_str = template_str.replace(f"{{{placeholder}}}", f"{value}") else: template_str = template_str.replace( - f'{{{placeholder}:{formatting_option}}}', f'{value:{formatting_option}}' + f"{{{placeholder}:{formatting_option}}}", f"{value:{formatting_option}}" ) template = Template(template_str) @@ -138,12 +129,12 @@ def render_template(template_str: str, data: Dict[str, Union[float, Union[int, N async def get_equip_info(char_id: str): - im = '' + im = "" try: char_equip_id_list = UNIEQUIP_TABLE.charEquip[char_id] except KeyError: - return '该干员没有模组' + return "该干员没有模组" for char_equip_id in char_equip_id_list: equip_dict = UNIEQUIP_TABLE.equipDict[char_equip_id] uniequip_name = equip_dict.uniEquipName @@ -153,12 +144,12 @@ async def get_equip_info(char_id: str): except KeyError: continue - im += f'模组名: {uniequip_name}\n' + im += f"模组名: {uniequip_name}\n" for equip_phase in char_equip_phases: equip_level = equip_phase.equipLevel - im += '-----------------\n' - im += f'等级: {equip_level}\n' + im += "-----------------\n" + im += f"等级: {equip_level}\n" equip_attribute_add_dict = {} equip_attribute_blackboard = equip_phase.attributeBlackboard for attribute in equip_attribute_blackboard: @@ -166,12 +157,12 @@ async def get_equip_info(char_id: str): for attr in equip_attribute_add_dict: if attr in attr_en_to_cn: - im += f'{attr_en_to_cn[attr]}: +{equip_attribute_add_dict[attr]}\n' - im += '-----------------\n' - im += '效果:\n' + im += f"{attr_en_to_cn[attr]}: +{equip_attribute_add_dict[attr]}\n" + im += "-----------------\n" + im += "效果:\n" for part in equip_phase.parts: target = part.target - if target == 'TRAIT': + if target == "TRAIT": overrideTraitDataBundle = part.overrideTraitDataBundle assert overrideTraitDataBundle.candidates is not None for candidate in overrideTraitDataBundle.candidates: @@ -181,12 +172,18 @@ async def get_equip_info(char_id: str): for blackboard_ in blackboard: blackboard_dict[blackboard_.key] = blackboard_.value if additionalDescription: - additionalDescription = re.sub(r'<[^>]+>', '', additionalDescription) - additionalDescription = render_template(additionalDescription, blackboard_dict) - additionalDescription = re.sub(r'.000000', '', additionalDescription) - im += f'{additionalDescription}\n' + additionalDescription = re.sub( + r"<[^>]+>", "", additionalDescription + ) + additionalDescription = render_template( + additionalDescription, blackboard_dict + ) + additionalDescription = re.sub( + r".000000", "", additionalDescription + ) + im += f"{additionalDescription}\n" - elif target == 'TALENT_DATA_ONLY': + elif target == "TALENT_DATA_ONLY": addOrOverrideTalentDataBundle = part.addOrOverrideTalentDataBundle assert addOrOverrideTalentDataBundle.candidates is not None for candidate in addOrOverrideTalentDataBundle.candidates: @@ -195,10 +192,12 @@ async def get_equip_info(char_id: str): upgradeDescription = candidate.upgradeDescription blackboard = candidate.blackboard if upgradeDescription and blackboard: - upgradeDescription = re.sub(r'<[^>]+>', '', upgradeDescription) - im += f'{upgradeDescription}\n' + upgradeDescription = re.sub( + r"<[^>]+>", "", upgradeDescription + ) + im += f"{upgradeDescription}\n" - elif target == 'DISPLAY': + elif target == "DISPLAY": overrideTraitDataBundle = part.overrideTraitDataBundle assert overrideTraitDataBundle.candidates is not None for candidate in overrideTraitDataBundle.candidates: @@ -208,23 +207,31 @@ async def get_equip_info(char_id: str): for blackboard_ in blackboard: blackboard_dict[blackboard_.key] = blackboard_.value if additionalDescription and blackboard: - additionalDescription = re.sub(r'<[^>]+>', '', additionalDescription) - additionalDescription = render_template(additionalDescription, blackboard_dict) - additionalDescription = re.sub(r'.000000', '', additionalDescription) - im += f'{additionalDescription}\n' + additionalDescription = re.sub( + r"<[^>]+>", "", additionalDescription + ) + additionalDescription = render_template( + additionalDescription, blackboard_dict + ) + additionalDescription = re.sub( + r".000000", "", additionalDescription + ) + im += f"{additionalDescription}\n" - elif target == 'TALENT': + elif target == "TALENT": addOrOverrideTalentDataBundle = part.addOrOverrideTalentDataBundle assert addOrOverrideTalentDataBundle.candidates is not None for candidate in addOrOverrideTalentDataBundle.candidates: upgradeDescription = candidate.upgradeDescription - if upgradeDescription == '': + if upgradeDescription == "": continue else: - upgradeDescription = re.sub(r'<[^>]+>', '', upgradeDescription) - im += f'{upgradeDescription}\n' + upgradeDescription = re.sub( + r"<[^>]+>", "", upgradeDescription + ) + im += f"{upgradeDescription}\n" - elif target == 'TRAIT_DATA_ONLY': + elif target == "TRAIT_DATA_ONLY": overrideTraitDataBundle = part.overrideTraitDataBundle assert overrideTraitDataBundle.candidates is not None for candidate in overrideTraitDataBundle.candidates: @@ -234,13 +241,17 @@ async def get_equip_info(char_id: str): for blackboard_ in blackboard: blackboard_dict[blackboard_.key] = blackboard_.value if overrideDescripton and blackboard: - overrideDescripton = re.sub(r'<[^>]+>', '', overrideDescripton) - overrideDescripton = render_template(overrideDescripton, blackboard_dict) - im += f'{overrideDescripton}\n' + overrideDescripton = re.sub( + r"<[^>]+>", "", overrideDescripton + ) + overrideDescripton = render_template( + overrideDescripton, blackboard_dict + ) + im += f"{overrideDescripton}\n" else: raise NotImplementedError - im += '-----------------\n' + im += "-----------------\n" im = im[:-19] @@ -248,39 +259,39 @@ async def get_equip_info(char_id: str): async def get_wiki_info(char_id: str): - im = '' + im = "" character_data = CHARACTER_TABLE[char_id] char_name = character_data.name - im += f'干员名: {char_name}\n' - im += '-----------------\n' + im += f"干员名: {char_name}\n" + im += "-----------------\n" char_rarity = character_data.rarity - im += f'星级: {str(char_rarity + 1)}\n' - im += '-----------------\n' + im += f"星级: {char_rarity + 1!s}\n" + im += "-----------------\n" profession = character_data.profession - im += f'职业: {profession_en_to_cn[profession]}\n' + im += f"职业: {profession_en_to_cn[profession]}\n" char_position = character_data.position - im += f'攻击方式: {char_position_en_to_cn[char_position]}\n' + im += f"攻击方式: {char_position_en_to_cn[char_position]}\n" sub_profession_id = character_data.subProfessionId sub_profession = UNIEQUIP_TABLE.subProfDict[sub_profession_id].subProfessionName - im += f'子职业: {sub_profession}\n' - im += '-----------------\n' + im += f"子职业: {sub_profession}\n" + im += "-----------------\n" nation_id = character_data.nationId group_id = character_data.groupId team_id = character_data.teamId - im += '属性:\n' + im += "属性:\n" char_phases_data = character_data.phases[-1] char_max_phase = len(character_data.phases) char_max_level = char_phases_data.maxLevel char_attributes_key_frame = char_phases_data.attributesKeyFrames[-1].data for idx, attr in enumerate(char_attributes_key_frame): if attr[0] in attr_en_to_cn: - im += f'{attr_en_to_cn[attr[0]]}: {attr[1]}\n' + im += f"{attr_en_to_cn[attr[0]]}: {attr[1]}\n" - im += '-----------------\n' - im += '天赋:\n' + im += "-----------------\n" + im += "天赋:\n" if character_data.talents: char_talent_num = len(character_data.talents) @@ -291,16 +302,18 @@ async def get_wiki_info(char_id: str): char_talent_name = talent_candidates[-1].name char_talent_description = talent_candidates[-1].description if char_talent_description: - char_talent_description = re.sub(r'<[^>]+>', '', char_talent_description) - im += f'{char_talent_name}: {char_talent_description}\n' + char_talent_description = re.sub( + r"<[^>]+>", "", char_talent_description + ) + im += f"{char_talent_name}: {char_talent_description}\n" char_potential_data = character_data.potentialRanks potential_add_dict: dict[int, tuple[int, float]] = {} - im += '-----------------\n' - im += '潜能加成\n' + im += "-----------------\n" + im += "潜能加成\n" for potential_id, potential in enumerate(char_potential_data): potential_add_description = potential.description - im += f'{potential_id_to_cn[potential_id]}: {potential_add_description}\n' + im += f"{potential_id_to_cn[potential_id]}: {potential_add_description}\n" if potential.buff: potential_add_attribute = potential.buff.attributes.attributeModifiers if len(potential.buff.attributes.attributeModifiers) == 1: @@ -312,81 +325,83 @@ async def get_wiki_info(char_id: str): ) else: raise NotImplementedError - im += '-----------------\n' + im += "-----------------\n" if character_data.favorKeyFrames: char_favor_add_data = character_data.favorKeyFrames[-1].data - im += '满信赖加成\n' + im += "满信赖加成\n" for attr in char_favor_add_data: - if attr[0] in ['maxHp', 'atk', 'def_', 'magicResistance'] and attr[1] != 0: - im += f'{attr_en_to_cn[attr[0]]}: +{attr[1]}\n' + if attr[0] in ["maxHp", "atk", "def_", "magicResistance"] and attr[1] != 0: + im += f"{attr_en_to_cn[attr[0]]}: +{attr[1]}\n" - im += '-----------------\n' + im += "-----------------\n" skill_id_list: list[str] = [] for skill in character_data.skills: if skill.skillId is None: continue skill_id_list.append(skill.skillId) - im += '技能:\n' + im += "技能:\n" for skill in skill_id_list: skill_data = SKILL_TABLE.skills[skill] skill_level_data = skill_data.levels[-1] skill_name = skill_level_data.name - im += f'技能名: {skill_name}\n' + im += f"技能名: {skill_name}\n" skill_type = skill_level_data.skillType skill_description = skill_level_data.description skill_sp_data = skill_level_data.spData skill_sp_type = skill_sp_data.spType if skill_sp_type == 1: - im += '自动回复 ' + im += "自动回复 " elif skill_sp_type == 2: - im += '攻击回复 ' + im += "攻击回复 " elif skill_sp_type == 4: - im += '受击回复 ' + im += "受击回复 " elif skill_sp_type == 8: pass else: raise NotImplementedError if skill_type == 1: - im += '手动触发\n' + im += "手动触发\n" elif skill_type == 2: - im += '自动触发\n' + im += "自动触发\n" elif skill_type == 0: pass else: raise NotImplementedError skill_duration = skill_level_data.duration - im += f'消耗: {skill_sp_data.spCost} ' - im += f'初始: {skill_sp_data.initSp} ' - im += f'持续: {str(skill_duration)}\n' + im += f"消耗: {skill_sp_data.spCost} " + im += f"初始: {skill_sp_data.initSp} " + im += f"持续: {skill_duration!s}\n" skill_blackboard_data = skill_level_data.blackboard black_board_dict: dict[str, Union[Union[int, float], None]] = {} for black_board in skill_blackboard_data: black_board_dict[black_board.key] = black_board.value if skill_description: - skill_description = skill_description.replace(':0.0', '') - skill_description = re.sub(r'<[^>]+>', '', skill_description) - skill_description = render_template(skill_description, black_board_dict).replace('--', '-') - last_skill_description = re.sub(r'.000000', '', skill_description) - if '{' in last_skill_description: + skill_description = skill_description.replace(":0.0", "") + skill_description = re.sub(r"<[^>]+>", "", skill_description) + skill_description = render_template( + skill_description, black_board_dict + ).replace("--", "-") + last_skill_description = re.sub(r".000000", "", skill_description) + if "{" in last_skill_description: raise NotImplementedError - skill_desc = re.findall(r'[^\\n]+', last_skill_description) + skill_desc = re.findall(r"[^\\n]+", last_skill_description) for skill_desc_line in skill_desc: - im += f'{skill_desc_line}\n' - im += '-----------------\n' + im += f"{skill_desc_line}\n" + im += "-----------------\n" im = im[:-19] return im async def draw_wiki(char_id: str): - img = Image.new('RGBA', (1500, 2800), (255, 255, 255, 0)) + img = Image.new("RGBA", (1500, 2800), (255, 255, 255, 0)) draw = ImageDraw.Draw(img) img.paste(bg_img, (0, 0)) @@ -401,19 +416,19 @@ async def draw_wiki(char_id: str): char_name, font=sans_font_120, fill=black_color, - anchor='lm', + anchor="lm", ) char_rarity = character_data.rarity - rarity_img = Image.open(TEXTURE2D_PATH / f'rarity_yellow_{char_rarity}.png') + rarity_img = Image.open(TEXTURE2D_PATH / f"rarity_yellow_{char_rarity}.png") img.paste(rarity_img, (960, 120), rarity_img) profession = character_data.profession - profession_img = Image.open(TEXTURE2D_PATH / f'icon_{profession.lower()}.png') + profession_img = Image.open(TEXTURE2D_PATH / f"icon_{profession.lower()}.png") img.paste(profession_img, (1100, 7050), profession_img) - bar_img = Image.open(TEXTURE2D_PATH / 'bar.png') - light_line = Image.open(TEXTURE2D_PATH / 'light_line.png') + bar_img = Image.open(TEXTURE2D_PATH / "bar.png") + light_line = Image.open(TEXTURE2D_PATH / "light_line.png") bar_img.paste(light_line, (290, 60), light_line) bar_img_draw = ImageDraw.ImageDraw(bar_img) @@ -424,7 +439,7 @@ async def draw_wiki(char_id: str): char_position_cn, font=sans_font_34, fill=white_color, - anchor='lm', + anchor="lm", ) sub_profession_id = character_data.subProfessionId @@ -434,70 +449,70 @@ async def draw_wiki(char_id: str): sub_profession, font=sans_font_34, fill=white_color, - anchor='lm', + anchor="lm", ) img.paste(bar_img, (40, 110), bar_img) nation_id = character_data.nationId - bar_img = Image.open(TEXTURE2D_PATH / 'bar.png') - light_line = Image.open(TEXTURE2D_PATH / 'light_line.png') + bar_img = Image.open(TEXTURE2D_PATH / "bar.png") + light_line = Image.open(TEXTURE2D_PATH / "light_line.png") bar_img.paste(light_line, (290, 60), light_line) bar_img_draw = ImageDraw.ImageDraw(bar_img) bar_img_draw.text( (155, 100), - '势力', + "势力", font=sans_font_34, fill=white_color, - anchor='lm', + anchor="lm", ) bar_img_draw.text( (355, 100), - nation_id if nation_id else '未知', + nation_id if nation_id else "未知", font=sans_font_34, fill=white_color, - anchor='lm', + anchor="lm", ) img.paste(bar_img, (940, 180 - 50), bar_img) group_id = character_data.groupId - bar_img = Image.open(TEXTURE2D_PATH / 'bar.png') - light_line = Image.open(TEXTURE2D_PATH / 'light_line.png') + bar_img = Image.open(TEXTURE2D_PATH / "bar.png") + light_line = Image.open(TEXTURE2D_PATH / "light_line.png") bar_img.paste(light_line, (290, 60), light_line) bar_img_draw = ImageDraw.ImageDraw(bar_img) bar_img_draw.text( (155, 100), - '阵营', + "阵营", font=sans_font_34, fill=white_color, - anchor='lm', + anchor="lm", ) bar_img_draw.text( (355, 100), - group_id if group_id else '未知', + group_id if group_id else "未知", font=sans_font_34, fill=white_color, - anchor='lm', + anchor="lm", ) img.paste(bar_img, (940, 188 + 20), bar_img) team_id = character_data.teamId - bar_img = Image.open(TEXTURE2D_PATH / 'bar.png') - light_line = Image.open(TEXTURE2D_PATH / 'light_line.png') + bar_img = Image.open(TEXTURE2D_PATH / "bar.png") + light_line = Image.open(TEXTURE2D_PATH / "light_line.png") bar_img.paste(light_line, (290, 60), light_line) bar_img_draw = ImageDraw.ImageDraw(bar_img) bar_img_draw.text( (155, 100), - '队伍', + "队伍", font=sans_font_34, fill=white_color, - anchor='lm', + anchor="lm", ) bar_img_draw.text( (355, 100), - team_id if team_id else '未知', + team_id if team_id else "未知", font=sans_font_34, fill=white_color, - anchor='lm', + anchor="lm", ) img.paste(bar_img, (940, 196 + 90), bar_img) @@ -506,94 +521,94 @@ async def draw_wiki(char_id: str): char_max_level = char_phases_data.maxLevel char_attributes_key_frame = char_phases_data.attributesKeyFrames[-1].data - bar_img = Image.open(TEXTURE2D_PATH / 'bar.png') - light_line = Image.open(TEXTURE2D_PATH / 'light_line.png') + bar_img = Image.open(TEXTURE2D_PATH / "bar.png") + light_line = Image.open(TEXTURE2D_PATH / "light_line.png") bar_img.paste(light_line, (320, 60), light_line) bar_img_draw = ImageDraw.ImageDraw(bar_img) bar_img_draw.text( (140, 100), - '生命上限', + "生命上限", font=sans_font_34, fill=white_color, - anchor='lm', + anchor="lm", ) bar_img_draw.text( (420, 100), str(char_attributes_key_frame.maxHp), font=sans_font_34, fill=white_color, - anchor='mm', + anchor="mm", ) img.paste(bar_img, (940, 380), bar_img) - bar_img = Image.open(TEXTURE2D_PATH / 'bar.png') - light_line = Image.open(TEXTURE2D_PATH / 'light_line.png') + bar_img = Image.open(TEXTURE2D_PATH / "bar.png") + light_line = Image.open(TEXTURE2D_PATH / "light_line.png") bar_img.paste(light_line, (320, 60), light_line) bar_img_draw = ImageDraw.ImageDraw(bar_img) bar_img_draw.text( (140, 100), - '攻击力', + "攻击力", font=sans_font_34, fill=white_color, - anchor='lm', + anchor="lm", ) bar_img_draw.text( (420, 100), str(char_attributes_key_frame.atk), font=sans_font_34, fill=white_color, - anchor='mm', + anchor="mm", ) img.paste(bar_img, (940, 380 + 78), bar_img) - bar_img = Image.open(TEXTURE2D_PATH / 'bar.png') - light_line = Image.open(TEXTURE2D_PATH / 'light_line.png') + bar_img = Image.open(TEXTURE2D_PATH / "bar.png") + light_line = Image.open(TEXTURE2D_PATH / "light_line.png") bar_img.paste(light_line, (320, 60), light_line) bar_img_draw = ImageDraw.ImageDraw(bar_img) bar_img_draw.text( (140, 100), - '防御力', + "防御力", font=sans_font_34, fill=white_color, - anchor='lm', + anchor="lm", ) bar_img_draw.text( (420, 100), str(char_attributes_key_frame.def_), font=sans_font_34, fill=white_color, - anchor='mm', + anchor="mm", ) img.paste(bar_img, (940, 380 + 78 * 2), bar_img) - bar_img = Image.open(TEXTURE2D_PATH / 'bar.png') - light_line = Image.open(TEXTURE2D_PATH / 'light_line.png') + bar_img = Image.open(TEXTURE2D_PATH / "bar.png") + light_line = Image.open(TEXTURE2D_PATH / "light_line.png") bar_img.paste(light_line, (320, 60), light_line) bar_img_draw = ImageDraw.ImageDraw(bar_img) bar_img_draw.text( (140, 100), - '法抗', + "法抗", font=sans_font_34, fill=white_color, - anchor='lm', + anchor="lm", ) bar_img_draw.text( (420, 100), str(char_attributes_key_frame.magicResistance), font=sans_font_34, fill=white_color, - anchor='mm', + anchor="mm", ) img.paste(bar_img, (940, 380 + 78 * 3), bar_img) # 攻击范围 range_id = char_phases_data.rangeId - attack_area_img = Image.open(TEXTURE2D_PATH / 'attack_area.png') + attack_area_img = Image.open(TEXTURE2D_PATH / "attack_area.png") if range_id: range_data = RANGE_TABLE.range_[range_id] grids = range_data.grids - area_0 = Image.open(TEXTURE2D_PATH / 'area_0.png').resize((58, 58)) - area_1 = Image.open(TEXTURE2D_PATH / 'area_1.png') + area_0 = Image.open(TEXTURE2D_PATH / "area_0.png").resize((58, 58)) + area_1 = Image.open(TEXTURE2D_PATH / "area_1.png") for grid in grids: col = grid.col row = grid.row @@ -638,8 +653,8 @@ async def draw_wiki(char_id: str): skill_id_list.append(skill.skillId) for skill in skill_id_list: - skill_bg = Image.open(TEXTURE2D_PATH / 'skill_bg.png') - skill3_bar_bg = Image.open(TEXTURE2D_PATH / 'skill3_bar.png') + skill_bg = Image.open(TEXTURE2D_PATH / "skill_bg.png") + skill3_bar_bg = Image.open(TEXTURE2D_PATH / "skill3_bar.png") skill_data = SKILL_TABLE.skills[skill] skill_level_data = skill_data.levels[-1] @@ -652,22 +667,21 @@ async def draw_wiki(char_id: str): for black_board in skill_blackboard_data: black_board_dict[black_board.key] = black_board.value if skill_description: - skill_description = re.sub(r'<[^>]+>', '', skill_description) - skill_description = render_template(skill_description, black_board_dict).replace('--', '-') - last_skill_description = re.sub(r'.000000', '', skill_description) - print(last_skill_description) - if '{' in last_skill_description: + skill_description = re.sub(r"<[^>]+>", "", skill_description) + skill_description = render_template( + skill_description, black_board_dict + ).replace("--", "-") + last_skill_description = re.sub(r".000000", "", skill_description) + if "{" in last_skill_description: raise NotImplementedError # 匹配 -70% +200% 这种格式的数字 - c = re.sub(r'(\d+)%', r'\1%', last_skill_description) - print(c) - print(test_ctg(30, last_skill_description)) + c = re.sub(r"(\d+)%", r"\1%", last_skill_description) draw_text_by_line( img=skill_bg, pos=(70, 20), text=last_skill_description, font=sans_font_24, - fill='#3b4354', + fill="#3b4354", max_length=400, ) # skill_bg.show() @@ -677,5 +691,5 @@ async def draw_wiki(char_id: str): return img -if __name__ == '__main__': - asyncio.run(draw_wiki(char_id='char_4098_vvana')) +if __name__ == "__main__": + asyncio.run(draw_wiki(char_id="char_4098_vvana")) diff --git a/ArknightsUID/utils/api/skd/api.py b/ArknightsUID/utils/api/skd/api.py index e3275f9..595c81d 100644 --- a/ArknightsUID/utils/api/skd/api.py +++ b/ArknightsUID/utils/api/skd/api.py @@ -1,8 +1,8 @@ -ARK_USER_ME = 'https://zonai.skland.com/api/v1/user/me' +ARK_USER_ME = "https://zonai.skland.com/api/v1/user/me" -ARK_REFRESH_TOKEN = 'https://zonai.skland.com/api/v1/auth/refresh' +ARK_REFRESH_TOKEN = "https://zonai.skland.com/api/v1/auth/refresh" -ARK_PLAYER_INFO = 'https://zonai.skland.com/api/v1/game/player/info' -ARK_GEN_CRED_BY_CODE = 'https://zonai.skland.com/api/v1/user/auth/generate_cred_by_code' +ARK_PLAYER_INFO = "https://zonai.skland.com/api/v1/game/player/info" +ARK_GEN_CRED_BY_CODE = "https://zonai.skland.com/api/v1/user/auth/generate_cred_by_code" -ARK_SKD_SIGN = 'https://zonai.skland.com/api/v1/game/attendance' +ARK_SKD_SIGN = "https://zonai.skland.com/api/v1/game/attendance" diff --git a/ArknightsUID/utils/api/skd/request.py b/ArknightsUID/utils/api/skd/request.py index 79c7f8f..af1914e 100644 --- a/ArknightsUID/utils/api/skd/request.py +++ b/ArknightsUID/utils/api/skd/request.py @@ -20,23 +20,23 @@ from ...models.skland.models import ( ) from .api import ARK_PLAYER_INFO, ARK_REFRESH_TOKEN, ARK_SKD_SIGN, ARK_USER_ME -proxy_url = core_plugins_config.get_config('proxy').data -ssl_verify = core_plugins_config.get_config('MhySSLVerify').data +proxy_url = core_plugins_config.get_config("proxy").data +ssl_verify = core_plugins_config.get_config("MhySSLVerify").data _HEADER: Dict[str, str] = { - 'Host': 'zonai.skland.com', - 'platform': '1', - 'Origin': 'https://www.skland.com', - 'Referer': 'https://www.skland.com/', - 'Content-Type': 'application/json', - 'User-Agent': 'Skland/1.5.1 (com.hypergryph.skland; build:100501001; Android 33; ) Okhttp/4.11.0', - 'vName': '1.5.1', - 'vCode': '100501001', - 'nId': '1', - 'os': '33', - 'manufacturer': 'Xiaomi', - 'Connection': 'close', + "Host": "zonai.skland.com", + "platform": "1", + "Origin": "https://www.skland.com", + "Referer": "https://www.skland.com/", + "Content-Type": "application/json", + "User-Agent": "Skland/1.5.1 (com.hypergryph.skland; build:100501001; Android 33; ) Okhttp/4.11.0", + "vName": "1.5.1", + "vCode": "100501001", + "nId": "1", + "os": "33", + "manufacturer": "Xiaomi", + "Connection": "close", } @@ -51,25 +51,31 @@ class TokenRefreshFailed(Exception): class BaseArkApi: proxy_url: Union[str, None] = proxy_url if proxy_url else None - async def _pass(self, gt: str, ch: str) -> Tuple[Union[str, None], Union[str, None]]: - _pass_api = core_plugins_config.get_config('_pass_API').data + async def _pass( + self, gt: str, ch: str + ) -> Tuple[Union[str, None], Union[str, None]]: + _pass_api = core_plugins_config.get_config("_pass_API").data if _pass_api: data = await self._ark_request( - url=f'{_pass_api}>={gt}&challenge={ch}', - method='GET', + url=f"{_pass_api}>={gt}&challenge={ch}", + method="GET", ) if isinstance(data, int) or not data: return None, None else: - validate = data['data']['validate'] - ch = data['data']['challenge'] + validate = data["data"]["validate"] + ch = data["data"]["challenge"] else: validate = None return validate, ch - async def get_game_player_info(self, uid: str) -> Union[int, ArknightsPlayerInfoModel]: - cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred') + async def get_game_player_info( + self, uid: str + ) -> Union[int, ArknightsPlayerInfoModel]: + cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid( + uid=uid, attr="cred" + ) if cred is None: return -60 is_vaild = await self.check_cred_valid(cred) @@ -77,11 +83,11 @@ class BaseArkApi: await ArknightsUser.delete_user_data_by_uid(uid) return -61 header = deepcopy(_HEADER) - header['cred'] = cred + header["cred"] = cred header = await self.set_sign(ARK_PLAYER_INFO, header=header) raw_data = await self.ark_request( url=ARK_PLAYER_INFO, - params={'uid': uid}, + params={"uid": uid}, header=header, ) if isinstance(raw_data, int): @@ -95,7 +101,9 @@ class BaseArkApi: return msgspec.convert(unpack_data, type=ArknightsPlayerInfoModel) async def skd_sign(self, uid: str) -> Union[int, ArknightsAttendanceModel]: - cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred') + cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid( + uid=uid, attr="cred" + ) if cred is None: return -60 is_vaild = await self.check_cred_valid(cred) @@ -103,18 +111,18 @@ class BaseArkApi: await ArknightsUser.delete_user_data_by_uid(uid) return -61 header = deepcopy(_HEADER) - header['cred'] = cred - data = {'uid': uid, 'gameId': 1} + header["cred"] = cred + data = {"uid": uid, "gameId": 1} header = await self.set_sign( ARK_SKD_SIGN, header=header, data=data, ) - header['Content-Type'] = 'application/json' - header['Content-Length'] = str(len(json.dumps(data))) + header["Content-Type"] = "application/json" + header["Content-Length"] = str(len(json.dumps(data))) raw_data = await self.ark_request( url=ARK_SKD_SIGN, - method='POST', + method="POST", data=data, header=header, ) @@ -128,8 +136,12 @@ class BaseArkApi: else: return msgspec.convert(unpack_data, ArknightsAttendanceModel) - async def get_sign_info(self, uid: str) -> Union[int, ArknightsAttendanceCalendarModel]: - cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred') + async def get_sign_info( + self, uid: str + ) -> Union[int, ArknightsAttendanceCalendarModel]: + cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid( + uid=uid, attr="cred" + ) if cred is None: return -60 is_vaild = await self.check_cred_valid(cred) @@ -137,21 +149,21 @@ class BaseArkApi: await ArknightsUser.delete_user_data_by_uid(uid) return -61 header = deepcopy(_HEADER) - header['cred'] = cred + header["cred"] = cred header = await self.set_sign( ARK_SKD_SIGN, header=header, params={ - 'uid': uid, - 'gameId': 1, + "uid": uid, + "gameId": 1, }, ) raw_data = await self.ark_request( url=ARK_SKD_SIGN, - method='GET', + method="GET", params={ - 'uid': uid, - 'gameId': 1, + "uid": uid, + "gameId": 1, }, header=header, ) @@ -166,43 +178,52 @@ class BaseArkApi: return msgspec.convert(unpack_data, ArknightsAttendanceCalendarModel) async def check_cred_valid( - self, cred: Union[str, None] = None, token: Union[str, None] = None, uid: Union[str, None] = None + self, + cred: Union[str, None] = None, + token: Union[str, None] = None, + uid: Union[str, None] = None, ) -> Union[bool, ArknightsUserMeModel]: if uid is not None: - cred = cred if cred else await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred') + cred = ( + cred + if cred + else await ArknightsUser.get_user_attr_by_uid(uid=uid, attr="cred") + ) header = deepcopy(_HEADER) if cred is None: return False - header['cred'] = cred + header["cred"] = cred header = await self.set_sign(ARK_USER_ME, header=header, token=token) raw_data = await self.ark_request(ARK_USER_ME, header=header) if isinstance(raw_data, int) or not raw_data: return False - if 'code' in raw_data and raw_data['code'] == 10001: - logger.info(f'cred is invalid {raw_data}') + if "code" in raw_data and raw_data["code"] == 10001: + logger.info(f"cred is invalid {raw_data}") return False unpack_data = self.unpack(raw_data) return msgspec.convert(unpack_data, type=ArknightsUserMeModel) def unpack(self, raw_data: Dict) -> Dict: try: - data = raw_data['data'] + data = raw_data["data"] return data except KeyError: return raw_data async def refresh_token(self, cred: str, uid: Union[str, None] = None) -> str: header = deepcopy(_HEADER) - header['cred'] = cred - header['sign_enable'] = 'false' + header["cred"] = cred + header["sign_enable"] = "false" raw_data = await self.ark_request(url=ARK_REFRESH_TOKEN, header=header) if isinstance(raw_data, int) or not raw_data: raise TokenRefreshFailed else: - token = cast(str, self.unpack(raw_data)['token']) + token = cast(str, self.unpack(raw_data)["token"]) uid = await ArknightsUser.get_uid_by_cred(cred) if uid is not None: - await ArknightsUser.update_user_attr_by_uid(uid=uid, attr='token', value=token) + await ArknightsUser.update_user_attr_by_uid( + uid=uid, attr="token", value=token + ) return token async def set_sign( @@ -216,49 +237,54 @@ class BaseArkApi: parsed_url = urlparse(url) path = parsed_url.path timestamp = str(int(time.time()) - 2) - dId = hashlib.sha256(header['cred'].encode('utf-8')).hexdigest()[0:16] + dId = hashlib.sha256(header["cred"].encode("utf-8")).hexdigest()[0:16] str1 = json.dumps( { - 'platform': header.get('platform', '1'), - 'timestamp': timestamp, - 'dId': dId, - 'vName': header.get('vName', ''), + "platform": header.get("platform", "1"), + "timestamp": timestamp, + "dId": dId, + "vName": header.get("vName", ""), }, - separators=(',', ':'), + separators=(",", ":"), ) - s2 = '' + s2 = "" if params: - logger.debug(f'params {params}') - s2 += '&'.join([str(x) + '=' + str(params[x]) for x in params]) + logger.debug(f"params {params}") + s2 += "&".join([str(x) + "=" + str(params[x]) for x in params]) if data: - logger.debug(f'data {data}') + logger.debug(f"data {data}") s2 += json.dumps(data) - logger.debug(f'{path} {s2} {timestamp} {str1}') + logger.debug(f"{path} {s2} {timestamp} {str1}") str2 = path + s2 + timestamp + str1 - token_ = await ArknightsUser.get_token_by_cred(header['cred']) + token_ = await ArknightsUser.get_token_by_cred(header["cred"]) logger.debug(f'cred {header["cred"]} token {token} token_ {token_}') token = token if token else token_ if token is None: - raise Exception('token is None') - encode_token = token.encode('utf-8') - hex_s = hmac.new(encode_token, str2.encode('utf-8'), hashlib.sha256).hexdigest() - sign = hashlib.md5(hex_s.encode('utf-8')).hexdigest().encode('utf-8').decode('utf-8') - header['sign'] = sign - header['timestamp'] = timestamp - header['dId'] = dId + raise Exception("token is None") + encode_token = token.encode("utf-8") + hex_s = hmac.new(encode_token, str2.encode("utf-8"), hashlib.sha256).hexdigest() + sign = ( + hashlib.md5(hex_s.encode("utf-8")) + .hexdigest() + .encode("utf-8") + .decode("utf-8") + ) + header["sign"] = sign + header["timestamp"] = timestamp + header["dId"] = dId logger.debug(header) return header async def ark_request( self, url: str, - method: Literal['GET', 'POST'] = 'GET', + method: Literal["GET", "POST"] = "GET", header: Dict[str, Any] = _HEADER, params: Union[Dict[str, Any], None] = None, data: Union[Dict[str, Any], None] = None, use_proxy: Union[bool, None] = False, ) -> Union[Dict, Union[int, None]]: - logger.debug(f'{url} {method} {header} {params} {data} {use_proxy}') + logger.debug(f"{url} {method} {header} {params} {data} {use_proxy}") try: raw_data = await self._ark_request( url=url, @@ -269,7 +295,7 @@ class BaseArkApi: use_proxy=use_proxy, ) except TokenExpiredError: - await self.refresh_token(header['cred']) + await self.refresh_token(header["cred"]) header = await self.set_sign(url, header, data, params) raw_data = await self._ark_request( url=url, @@ -284,15 +310,17 @@ class BaseArkApi: async def _ark_request( self, url: str, - method: Literal['GET', 'POST'] = 'GET', + method: Literal["GET", "POST"] = "GET", header: Dict[str, Any] = _HEADER, params: Union[Dict[str, Any], None] = None, data: Union[Dict[str, Any], None] = None, use_proxy: Union[bool, None] = False, ) -> Union[Dict, Union[int, None]]: - async with ClientSession(connector=TCPConnector(verify_ssl=ssl_verify)) as client: + async with ClientSession( + connector=TCPConnector(verify_ssl=ssl_verify) + ) as client: raw_data = {} - if 'cred' not in header: + if "cred" not in header: return 10001 async with client.request( @@ -308,21 +336,21 @@ class BaseArkApi: raw_data = await resp.json() except ContentTypeError: _raw_data = await resp.text() - raw_data = {'code': -999, 'data': _raw_data} + raw_data = {"code": -999, "data": _raw_data} logger.info(raw_data) # 判断code - if raw_data['code'] == 0: + if raw_data["code"] == 0: return raw_data - if raw_data['code'] == 10000: + if raw_data["code"] == 10000: # token失效 - logger.info(f'{url} {raw_data}') + logger.info(f"{url} {raw_data}") raise TokenExpiredError - if raw_data['code'] == 10001: + if raw_data["code"] == 10001: # 重复签到 - return raw_data['code'] + return raw_data["code"] # 判断status # if 'status' in raw_data and 'msg' in raw_data: diff --git a/ArknightsUID/utils/ark_prefix.py b/ArknightsUID/utils/ark_prefix.py index 5df1018..506cbc7 100644 --- a/ArknightsUID/utils/ark_prefix.py +++ b/ArknightsUID/utils/ark_prefix.py @@ -1,3 +1,3 @@ from ..arknightsuid_config.ark_config import arkconfig -PREFIX = arkconfig.get_config('ArknightsPrefix').data +PREFIX = arkconfig.get_config("ArknightsPrefix").data diff --git a/ArknightsUID/utils/database/models.py b/ArknightsUID/utils/database/models.py index 7aef687..825016d 100644 --- a/ArknightsUID/utils/database/models.py +++ b/ArknightsUID/utils/database/models.py @@ -1,4 +1,4 @@ -from typing import Dict, List, Literal, Optional, Type, TypeVar, Union +from typing import Dict, Literal, Optional, Sequence, Type, TypeVar, Union from gsuid_core.utils.database.base_models import ( BaseModel, @@ -13,18 +13,18 @@ from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.future import select from sqlmodel import Field -T_ARK_User = TypeVar('T_ARK_User', bound='ArknightsUser') +T_ARK_User = TypeVar("T_ARK_User", bound="ArknightsUser") class ArknightsBind(Bind, table=True): - uid: Union[str, None] = Field(default=None, title='明日方舟UID') + uid: Union[str, None] = Field(default=None, title="明日方舟UID") class ArknightsUser(User, table=True): - uid: Union[str, None] = Field(default=None, title='明日方舟UID') - skd_uid: Union[str, None] = Field(default=None, title='SKD用户ID') - cred: Union[str, None] = Field(default=None, title='SKD凭证') - token: Union[str, None] = Field(default=None, title='SKD Token') + uid: Union[str, None] = Field(default=None, title="明日方舟UID") + skd_uid: Union[str, None] = Field(default=None, title="SKD用户ID") + cred: Union[str, None] = Field(default=None, title="SKD凭证") + token: Union[str, None] = Field(default=None, title="SKD Token") @classmethod @with_session @@ -40,21 +40,23 @@ class ArknightsUser(User, table=True): @classmethod @with_session - async def get_all_user(cls: Type[T_ARK_User], session: AsyncSession) -> List[T_ARK_User]: - sql = select(cls).where(cls.cred is not None, cls.cred != '') + async def get_all_user( + cls: Type[T_ARK_User], session: AsyncSession + ) -> Sequence[T_ARK_User]: + sql = select(cls).where(cls.cred is not None, cls.cred != "") result = await session.execute(sql) - data: List[T_ARK_User] = result.scalars().all() + data: Sequence[T_ARK_User] = result.scalars().all() return data @classmethod async def get_token_by_cred(cls, cred: str) -> Union[str, None]: result = await cls.select_data_by_cred(cred) - return getattr(result, 'token') if result else None + return getattr(result, "token") if result else None @classmethod async def get_uid_by_cred(cls, cred: str) -> Union[str, None]: result = await cls.select_data_by_cred(cred) - return getattr(result, 'uid') if result else None + return getattr(result, "uid") if result else None @classmethod async def update_user_attr_by_uid( @@ -79,16 +81,20 @@ class ArknightsUser(User, table=True): class ArknightsPush(Push, table=True): - uid: Union[str, None] = Field(default=None, title='明日方舟UID') - skd_uid: Union[str, None] = Field(default=None, title='森空岛用户ID') - ap_push: Union[bool, None] = Field(default=False, title='理智推送') - ap_value: Union[int, None] = Field(default=110, title='理智推送阈值') - ap_is_push: Union[bool, None] = Field(default=False, title='理智是否已经推送') - training_push: Union[bool, None] = Field(default=False, title='训练室推送') - training_value: Union[int, None] = Field(default=30, title='训练室推送阈值') - training_is_push: Union[bool, None] = Field(default=False, title='训练室是否已经推送') - version_push: Union[bool, None] = Field(default=False, title='版本更新推送') - version_is_push: Union[bool, None] = Field(default=False, title='版本更新是否已经推送') + uid: Union[str, None] = Field(default=None, title="明日方舟UID") + skd_uid: Union[str, None] = Field(default=None, title="森空岛用户ID") + ap_push: Union[bool, None] = Field(default=False, title="理智推送") + ap_value: Union[int, None] = Field(default=110, title="理智推送阈值") + ap_is_push: Union[bool, None] = Field(default=False, title="理智是否已经推送") + training_push: Union[bool, None] = Field(default=False, title="训练室推送") + training_value: Union[int, None] = Field(default=30, title="训练室推送阈值") + training_is_push: Union[bool, None] = Field( + default=False, title="训练室是否已经推送" + ) + version_push: Union[bool, None] = Field(default=False, title="版本更新推送") + version_is_push: Union[bool, None] = Field( + default=False, title="版本更新是否已经推送" + ) @classmethod async def insert_push_data(cls, bot_id: str, uid: str, skd_uid: str): @@ -131,14 +137,16 @@ class ArknightsPush(Push, table=True): @classmethod async def change_push_status( cls, - mode: Literal['ap', 'training'], + mode: Literal["ap", "training"], uid: str, status: str, ): - await cls.update_push_data(uid, {f'{mode}_is_push': status}) + await cls.update_push_data(uid, {f"{mode}_is_push": status}) @classmethod - async def select_push_data(cls: Type[T_BaseIDModel], uid: str) -> Union[T_BaseIDModel, None]: + async def select_push_data( + cls: Type[T_BaseIDModel], uid: str + ) -> Union[T_BaseIDModel, None]: return await cls.base_select_data(uid=uid) @classmethod @@ -148,8 +156,8 @@ class ArknightsPush(Push, table=True): @site.register_admin class ArknightsBindadmin(GsAdminModel): - pk_name = 'id' - page_schema = PageSchema(label='方舟绑定管理', icon='fa fa-users') # type: ignore + pk_name = "id" + page_schema = PageSchema(label="方舟绑定管理", icon="fa fa-users") # type: ignore # 配置管理模型 model = ArknightsBind @@ -157,8 +165,8 @@ class ArknightsBindadmin(GsAdminModel): @site.register_admin class ArknightsUseradmin(GsAdminModel): - pk_name = 'id' - page_schema = PageSchema(label='方舟SKD CRED管理', icon='fa fa-database') # type: ignore + pk_name = "id" + page_schema = PageSchema(label="方舟SKD CRED管理", icon="fa fa-database") # type: ignore # 配置管理模型 model = ArknightsUser @@ -166,8 +174,8 @@ class ArknightsUseradmin(GsAdminModel): @site.register_admin class ArknightsPushadmin(GsAdminModel): - pk_name = 'id' - page_schema = PageSchema(label='明日方舟推送管理', icon='fa fa-database') # type: ignore + pk_name = "id" + page_schema = PageSchema(label="明日方舟推送管理", icon="fa fa-database") # type: ignore # 配置管理模型 model = ArknightsPush diff --git a/ArknightsUID/utils/database/startup.py b/ArknightsUID/utils/database/startup.py index f59f285..4119f07 100644 --- a/ArknightsUID/utils/database/startup.py +++ b/ArknightsUID/utils/database/startup.py @@ -3,9 +3,9 @@ from gsuid_core.utils.database.base_models import async_maker from sqlalchemy.sql import text exec_list = [ - 'ALTER TABLE arknightspush ADD COLUMN version_push BOOLEAN DEFAULT FALSE;', - 'ALTER TABLE arknightspush ADD COLUMN version_is_push BOOLEAN DEFAULT FALSE;', - 'ALTER TABLE arknightsuser ADD COLUMN token TEXT;', + "ALTER TABLE arknightspush ADD COLUMN version_push BOOLEAN DEFAULT FALSE;", + "ALTER TABLE arknightspush ADD COLUMN version_is_push BOOLEAN DEFAULT FALSE;", + "ALTER TABLE arknightsuser ADD COLUMN token TEXT;", ] diff --git a/ArknightsUID/utils/download.py b/ArknightsUID/utils/download.py index 353df25..5a9d846 100644 --- a/ArknightsUID/utils/download.py +++ b/ArknightsUID/utils/download.py @@ -16,7 +16,7 @@ async def download_file( async with sess.get(url) as res: content = await res.read() except ClientConnectorError: - logger.warning(f'[Arknights]{name}下载失败') + logger.warning(f"[Arknights]{name}下载失败") return url, path, name - async with aiofiles.open(path / name, 'wb') as f: + async with aiofiles.open(path / name, "wb") as f: await f.write(content) diff --git a/ArknightsUID/utils/error_reply.py b/ArknightsUID/utils/error_reply.py index b1c1afb..78ff6ef 100644 --- a/ArknightsUID/utils/error_reply.py +++ b/ArknightsUID/utils/error_reply.py @@ -1,14 +1,14 @@ from typing import Union -UID_HINT = '添加失败, 请先绑定明日方舟UID' +UID_HINT = "添加失败, 请先绑定明日方舟UID" def get_error(retcode: Union[int, str]) -> str: if retcode == 10000: - return '请求异常, 请检查具体实现代码...' + return "请求异常, 请检查具体实现代码..." if retcode == 10001: - return '请勿重复签到!' + return "请勿重复签到!" if retcode == 10003: - return '请勿修改设备时间' - return f'API报错, 错误码为{retcode}!' + return "请勿修改设备时间" + return f"API报错, 错误码为{retcode}!" diff --git a/ArknightsUID/utils/file.py b/ArknightsUID/utils/file.py index 94be422..3f962d3 100644 --- a/ArknightsUID/utils/file.py +++ b/ArknightsUID/utils/file.py @@ -10,10 +10,10 @@ def read_json(file_path: Path, **kwargs) -> Dict: Read a JSON file and return its contents as a dictionary. """ try: - with Path.open(file_path, encoding='UTF-8', **kwargs) as file: + with Path.open(file_path, encoding="UTF-8", **kwargs) as file: return json.load(file) except (FileNotFoundError, json.JSONDecodeError) as e: - logger.error(f'Error reading JSON file: {e}') + logger.error(f"Error reading JSON file: {e}") return {} @@ -22,7 +22,7 @@ def write_json(data: Dict, file_path: Path) -> None: Write a dictionary to a JSON file. """ try: - with Path.open(file_path, mode='w', encoding='UTF-8') as file: + with Path.open(file_path, mode="w", encoding="UTF-8") as file: json.dump(data, file, sort_keys=False, indent=4, ensure_ascii=False) except FileNotFoundError as e: - logger.error(f'Error writing JSON file: {e}') + logger.error(f"Error writing JSON file: {e}") diff --git a/ArknightsUID/utils/fonts/source_han_sans.py b/ArknightsUID/utils/fonts/source_han_sans.py index 4374004..192eaec 100644 --- a/ArknightsUID/utils/fonts/source_han_sans.py +++ b/ArknightsUID/utils/fonts/source_han_sans.py @@ -2,7 +2,7 @@ from pathlib import Path from PIL import ImageFont -FONT_ORIGIN_PATH = Path(__file__).parent / 'SourceHanSansCN-Medium.ttf' +FONT_ORIGIN_PATH = Path(__file__).parent / "SourceHanSansCN-Medium.ttf" def source_han_sans_cn_origin(size: int) -> ImageFont.FreeTypeFont: diff --git a/ArknightsUID/utils/fonts/source_han_serif.py b/ArknightsUID/utils/fonts/source_han_serif.py index 90222dc..479f049 100644 --- a/ArknightsUID/utils/fonts/source_han_serif.py +++ b/ArknightsUID/utils/fonts/source_han_serif.py @@ -2,7 +2,7 @@ from pathlib import Path from PIL import ImageFont -FONT_ORIGIN_PATH = Path(__file__).parent / 'SourceHanSerifCN-Medium.ttf' +FONT_ORIGIN_PATH = Path(__file__).parent / "SourceHanSerifCN-Medium.ttf" def source_han_serif_origin(size: int) -> ImageFont.FreeTypeFont: diff --git a/ArknightsUID/utils/image/image_tools.py b/ArknightsUID/utils/image/image_tools.py index 206a629..d40ed2d 100644 --- a/ArknightsUID/utils/image/image_tools.py +++ b/ArknightsUID/utils/image/image_tools.py @@ -4,9 +4,9 @@ from typing import Union from gsuid_core.utils.image.image_tools import CustomizeImage from PIL import Image -BG_PATH = Path(__file__).parent / 'bg' -NM_BG_PATH = BG_PATH / 'nm_bg' -SP_BG_PATH = BG_PATH / 'sp_bg' +BG_PATH = Path(__file__).parent / "bg" +NM_BG_PATH = BG_PATH / "nm_bg" +SP_BG_PATH = BG_PATH / "sp_bg" async def get_simple_bg( diff --git a/ArknightsUID/utils/message.py b/ArknightsUID/utils/message.py index 70130bd..1bac5c0 100644 --- a/ArknightsUID/utils/message.py +++ b/ArknightsUID/utils/message.py @@ -6,10 +6,10 @@ from gsuid_core.bot import Bot async def send_diff_msg(bot: Bot, code: Any, data: Union[Dict, None] = None): if data is None: data = { - 0: '绑定UID成功!', - -1: 'UID的位数不正确!', - -2: 'UID已经绑定过了!', - -3: '你输入了错误的格式!', + 0: "绑定UID成功!", + -1: "UID的位数不正确!", + -2: "UID已经绑定过了!", + -3: "你输入了错误的格式!", } for retcode in data: if code == retcode: diff --git a/ArknightsUID/utils/models/common.py b/ArknightsUID/utils/models/common.py index a401acc..84f4829 100644 --- a/ArknightsUID/utils/models/common.py +++ b/ArknightsUID/utils/models/common.py @@ -6,8 +6,8 @@ from msgspec import Struct, UnsetType, convert, field from msgspec import json as mscjson from typing_extensions import dataclass_transform -Model = TypeVar('Model', bound='BaseStruct') -T = TypeVar('T') +Model = TypeVar("Model", bound="BaseStruct") +T = TypeVar("T") def transUnset(v: Union[T, UnsetType], d: Any = None) -> Union[T, Any]: diff --git a/ArknightsUID/utils/models/gamedata/ActivityTable.py b/ArknightsUID/utils/models/gamedata/ActivityTable.py index 5964083..f88f3db 100644 --- a/ArknightsUID/utils/models/gamedata/ActivityTable.py +++ b/ArknightsUID/utils/models/gamedata/ActivityTable.py @@ -7,8 +7,8 @@ from msgspec import field class ActivityTableBasicData(BaseStruct): - id_: str = field(name='id') - type_: str = field(name='type') + id_: str = field(name="id") + type_: str = field(name="type") name: str startTime: int endTime: int @@ -32,16 +32,16 @@ class ActivityTableHomeActivityConfig(BaseStruct): class MissionDisplayRewards(BaseStruct): - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") count: int class MissionData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") sortId: int description: str - type_: str = field(name='type') + type_: str = field(name="type") itemBgType: str preMissionIds: Union[List[str], None] template: str @@ -59,9 +59,9 @@ class MissionData(BaseStruct): class MissionGroup(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") title: Union[str, None] - type_: str = field(name='type') + type_: str = field(name="type") preMissionGroup: Union[str, None] period: Union[List[int], None] rewards: Union[List[MissionDisplayRewards], None] @@ -79,9 +79,9 @@ class DefaultZoneData(BaseStruct): class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class DefaultShopData(BaseStruct): @@ -244,7 +244,7 @@ class Act3D0DataLimitedPoolDetailInfoPoolItemInfo(BaseStruct): perCount: int totalCount: int weight: int - type_: str = field(name='type') + type_: str = field(name="type") orderId: int @@ -259,7 +259,7 @@ class Act3D0DataInfinitePoolDetailInfoPoolItemInfo(BaseStruct): goodType: str perCount: int weight: int - type_: str = field(name='type') + type_: str = field(name="type") orderId: int @@ -495,7 +495,7 @@ class RuneData(BaseStruct): class RuneTablePackedRuneData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") points: float mutexGroupKey: Union[str, None] description: Union[str, None] @@ -523,7 +523,7 @@ class Act5D1Data(BaseStruct): class ActivityCollectionDataCollectionInfo(BaseStruct): - id_: int = field(name='id') + id_: int = field(name="id") itemType: str itemId: str itemCnt: int @@ -736,7 +736,7 @@ class Act13SideDataLongTermMissionData(BaseStruct): class Act13SideDataDailyMissionData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") sortId: int description: str missionName: str @@ -932,7 +932,7 @@ class Act17sideDataMainlineChapterData(BaseStruct): chapterDes: str chapterIcon: str unlockDes: str - id_: str = field(name='id') + id_: str = field(name="id") class Act17sideDataMainlineData(BaseStruct): @@ -1175,9 +1175,9 @@ class SharedCharData(BaseStruct): evolvePhase: int level: int favorPoint: int - currentEquip: Union[str, None] = field(name='currentEquip', default=None) + currentEquip: Union[str, None] = field(name="currentEquip", default=None) equips: Union[Dict[str, SharedCharDataCharEquipInfo], None] = field( - name='equip', + name="equip", default={}, ) skillIndex: Union[int, None] = None @@ -1244,8 +1244,8 @@ class ActivityBossRushDataBossRushStageAdditionData(BaseStruct): class ActivityBossRushDataDisplayDetailRewards(BaseStruct): occPercent: int dropCount: int - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") dropType: int @@ -1351,15 +1351,15 @@ class ActivityFloatParadeDataDailyData(BaseStruct): class ActivityFloatParadeDataRewardPool(BaseStruct): grpId: str - id_: str = field(name='id') - type_: str = field(name='type') + id_: str = field(name="id") + type_: str = field(name="type") name: str desc: Union[str, None] reward: ItemBundle class ActivityFloatParadeDataTactic(BaseStruct): - id_: int = field(name='id') + id_: int = field(name="id") name: str packName: str briefName: str @@ -1398,7 +1398,7 @@ class ActSandboxData(BaseStruct): class ActivityMainlineBuffDataMissionGroupData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") bindBanner: str sortId: int zoneId: str @@ -1414,7 +1414,7 @@ class ActivityMainlineBuffDataPeriodDataStepData(BaseStruct): class ActivityMainlineBuffDataPeriodData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") startTime: int endTime: int favorUpCharDesc: str @@ -1514,23 +1514,23 @@ class Act24SideDataMissionExtraData(BaseStruct): class WeightItemBundle(BaseStruct): - id_: str = field(name='id') - type_: str = field(name='type') + id_: str = field(name="id") + type_: str = field(name="type") dropType: str count: int weight: int class StageDataDisplayRewards(BaseStruct): - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") dropType: int class StageDataDisplayDetailRewards(BaseStruct): occPercent: int - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") dropType: int @@ -1602,7 +1602,7 @@ class Act25SideDataArchiveItemData(BaseStruct): class Act25SideDataArchiveMapInfoData(BaseStruct): objectId: str - type_: int = field(name='type') + type_: int = field(name="type") numberId: str areaId: str sortId: int @@ -1625,7 +1625,7 @@ class Act25SideDataAreaInfoData(BaseStruct): class Act25SideDataAreaMissionData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") areaId: str preposedMissionId: Union[str, None] sortId: int @@ -1714,7 +1714,7 @@ class Act38D1DataAct38D1DimensionItemData(BaseStruct): class Act38D1DataAct38D1CommentData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") sortId: int desc: str @@ -1749,7 +1749,7 @@ class Act38D1Data(BaseStruct): class Act27SideDataAct27SideGoodData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") name: str typeDesc: str iconId: str @@ -1868,7 +1868,7 @@ class Act42D0DataEffectGroupInfoData(BaseStruct): class Act42D0DataEffectInfoRuneData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") points: int mutexGroupKey: Union[str, None] description: str @@ -1961,14 +1961,14 @@ class Act29SideFragData(BaseStruct): class Act29SideOrcheType(Enum): - ORCHE_1 = 'ORCHE_1' - ORCHE_2 = 'ORCHE_2' - ORCHE_3 = 'ORCHE_3' - ENUM = 'ENUM' + ORCHE_1 = "ORCHE_1" + ORCHE_2 = "ORCHE_2" + ORCHE_3 = "ORCHE_3" + ENUM = "ENUM" class Act29SideOrcheData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") name: str desc: str icon: str @@ -1977,12 +1977,12 @@ class Act29SideOrcheData(BaseStruct): class Act29SideProductType(Enum): - PRODUCT_TYPE_1 = 'PRODUCT_TYPE_1' - PRODUCT_TYPE_2 = 'PRODUCT_TYPE_2' - PRODUCT_TYPE_3 = 'PRODUCT_TYPE_3' - PRODUCT_TYPE_4 = 'PRODUCT_TYPE_4' - PRODUCT_TYPE_5 = 'PRODUCT_TYPE_5' - ENUM = 'ENUM' + PRODUCT_TYPE_1 = "PRODUCT_TYPE_1" + PRODUCT_TYPE_2 = "PRODUCT_TYPE_2" + PRODUCT_TYPE_3 = "PRODUCT_TYPE_3" + PRODUCT_TYPE_4 = "PRODUCT_TYPE_4" + PRODUCT_TYPE_5 = "PRODUCT_TYPE_5" + ENUM = "ENUM" class Act29SideProductGroupData(BaseStruct): @@ -2012,7 +2012,7 @@ class Act29SideProductGroupData(BaseStruct): class Act29SideProductData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") orcheId: Union[str, None] groupId: str formId: Union[str, None] @@ -2037,9 +2037,9 @@ class Act29SideInvestResultData(BaseStruct): class Act29SideInvestType(Enum): - MAJOR = 'MAJOR' - RARE = 'RARE' - NORMAL = 'NORMAL' + MAJOR = "MAJOR" + RARE = "RARE" + NORMAL = "NORMAL" class Act29SideInvestData(BaseStruct): @@ -2145,8 +2145,8 @@ class ActivityThemeDataTimeNode(BaseStruct): class ActivityThemeData(BaseStruct): - id_: str = field(name='id') - type_: str = field(name='type') + id_: str = field(name="id") + type_: str = field(name="type") funcId: str endTs: int sortId: int @@ -2368,7 +2368,7 @@ class AprilFoolTable(BaseStruct): class CartComponents(BaseStruct): compId: str sortId: int - type_: str = field(name='type') + type_: str = field(name="type") posList: List[str] posIdDict: Dict[str, List[str]] name: str @@ -2608,7 +2608,7 @@ class ActivityTableExtraData(BaseStruct): class ActivityTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" basicInfo: Dict[str, ActivityTableBasicData] homeActConfig: Dict[str, ActivityTableHomeActivityConfig] diff --git a/ArknightsUID/utils/models/gamedata/AudioData.py b/ArknightsUID/utils/models/gamedata/AudioData.py index 33d3bd5..01f4643 100644 --- a/ArknightsUID/utils/models/gamedata/AudioData.py +++ b/ArknightsUID/utils/models/gamedata/AudioData.py @@ -62,7 +62,7 @@ class BattleVoiceOption(BaseStruct): class MusicData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") name: str bank: str @@ -91,7 +91,7 @@ class AudioDataFadeStyle(BaseStruct): class AudioData(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" bgmBanks: List[BGMBank] soundFXBanks: List[SoundFXBank] diff --git a/ArknightsUID/utils/models/gamedata/BattleEquipTable.py b/ArknightsUID/utils/models/gamedata/BattleEquipTable.py index b85c4d0..1efbabc 100644 --- a/ArknightsUID/utils/models/gamedata/BattleEquipTable.py +++ b/ArknightsUID/utils/models/gamedata/BattleEquipTable.py @@ -78,6 +78,6 @@ class BattleEquipData(BaseStruct): class BattleEquipTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" equips: Dict[str, BattleEquipData] diff --git a/ArknightsUID/utils/models/gamedata/BuildingData.py b/ArknightsUID/utils/models/gamedata/BuildingData.py index decc345..d7237a9 100644 --- a/ArknightsUID/utils/models/gamedata/BuildingData.py +++ b/ArknightsUID/utils/models/gamedata/BuildingData.py @@ -6,13 +6,13 @@ from msgspec import field class BuildingDataRoomUnlockCondCondItem(BaseStruct): - type_: str = field(name='type') + type_: str = field(name="type") level: int count: int class BuildingDataRoomUnlockCond(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") number: Dict[str, BuildingDataRoomUnlockCondCondItem] @@ -22,9 +22,9 @@ class GridPosition(BaseStruct): class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class BuildingDataRoomDataBuildCost(BaseStruct): @@ -44,7 +44,7 @@ class BuildingDataRoomDataPhaseData(BaseStruct): class BuildingDataRoomData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") name: str description: Union[str, None] defaultPrefabId: str @@ -56,7 +56,7 @@ class BuildingDataRoomData(BaseStruct): class BuildingDataLayoutDataRoomSlot(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") cleanCostId: str costLabor: int provideLabor: int @@ -71,26 +71,26 @@ class BuildingDataLayoutDataSlotCleanCostCountCost(BaseStruct): class BuildingDataLayoutDataSlotCleanCost(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") number: Dict[str, BuildingDataLayoutDataSlotCleanCostCountCost] class BuildingDataLayoutDataStoreyData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") yOffset: int unlockControlLevel: int - type_: str = field(name='type') + type_: str = field(name="type") class BuildingDataLayoutData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") slots: Dict[str, BuildingDataLayoutDataRoomSlot] cleanCosts: Dict[str, BuildingDataLayoutDataSlotCleanCost] storeys: Dict[str, BuildingDataLayoutDataStoreyData] class BuildingDataPrefabInfo(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") blueprintRoomOverrideId: Union[str, None] size: GridPosition floorGridSize: GridPosition @@ -98,45 +98,45 @@ class BuildingDataPrefabInfo(BaseStruct): obstacleId: Union[str, None] -class BuildingDataManufactPhase(BaseStruct, tag='BuildingDataManufactPhase'): +class BuildingDataManufactPhase(BaseStruct, tag="BuildingDataManufactPhase"): speed: Union[float, int] outputCapacity: int -class BuildingDataShopPhase(BaseStruct, tag='BuildingDataShopPhase'): +class BuildingDataShopPhase(BaseStruct, tag="BuildingDataShopPhase"): counterNum: int speed: Union[float, int] moneyCapacity: int -class BuildingDataHirePhase(BaseStruct, tag='BuildingDataHirePhase'): +class BuildingDataHirePhase(BaseStruct, tag="BuildingDataHirePhase"): economizeRate: float resSpeed: int refreshTimes: int -class BuildingDataDormPhase(BaseStruct, tag='BuildingDataDormPhase'): +class BuildingDataDormPhase(BaseStruct, tag="BuildingDataDormPhase"): manpowerRecover: int decorationLimit: int -class BuildingDataMeetingPhase(BaseStruct, tag='BuildingDataMeetingPhase'): +class BuildingDataMeetingPhase(BaseStruct, tag="BuildingDataMeetingPhase"): friendSlotInc: int maxVisitorNum: int gatheringSpeed: int -class BuildingDataTradingPhase(BaseStruct, tag='BuildingDataTradingPhase'): +class BuildingDataTradingPhase(BaseStruct, tag="BuildingDataTradingPhase"): orderSpeed: Union[float, int] orderLimit: int orderRarity: int -class BuildingDataWorkshopPhase(BaseStruct, tag='BuildingDataWorkshopPhase'): +class BuildingDataWorkshopPhase(BaseStruct, tag="BuildingDataWorkshopPhase"): manpowerFactor: Union[float, int] -class BuildingDataTrainingPhase(BaseStruct, tag='BuildingDataTrainingPhase'): +class BuildingDataTrainingPhase(BaseStruct, tag="BuildingDataTrainingPhase"): specSkillLvlLimit: int @@ -222,11 +222,11 @@ class BuildingDataBuildingBuff(BaseStruct): class BuildingDataCustomDataFurnitureData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") sortId: int name: str iconId: str - type_: str = field(name='type') + type_: str = field(name="type") subType: str location: str category: str @@ -257,11 +257,11 @@ class BuildingDataCustomDataThemeQuickSetupItem(BaseStruct): furnitureId: str pos0: int pos1: int - dir_: int = field(name='dir') + dir_: int = field(name="dir") class BuildingDataCustomDataThemeData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") sortId: int name: str themeType: str @@ -272,7 +272,7 @@ class BuildingDataCustomDataThemeData(BaseStruct): class BuildingDataCustomDataGroupData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") sortId: int name: str themeId: str @@ -282,14 +282,14 @@ class BuildingDataCustomDataGroupData(BaseStruct): class BuildingDataCustomDataFurnitureTypeData(BaseStruct): - type_: str = field(name='type') + type_: str = field(name="type") name: str class BuildingDataCustomDataFurnitureSubTypeData(BaseStruct): subType: str name: str - type_: str = field(name='type') + type_: str = field(name="type") sortId: int @@ -318,7 +318,9 @@ class BuildingDataCustomDataDiyUISortTemplateListData(BaseStruct): expandState: str defaultTemplateIndex: int defaultTemplateOrder: str - templates: List[BuildingDataCustomDataDiyUISortTemplateListDataDiyUISortTemplateData] + templates: List[ + BuildingDataCustomDataDiyUISortTemplateListDataDiyUISortTemplateData + ] class BuildingDataCustomData(BaseStruct): @@ -421,7 +423,7 @@ class BuildingDataCreditFormula(BaseStruct): class BuildingData(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" controlSlotId: str meetingSlotId: str diff --git a/ArknightsUID/utils/models/gamedata/CampaignTable.py b/ArknightsUID/utils/models/gamedata/CampaignTable.py index 3beec1f..b8452dc 100644 --- a/ArknightsUID/utils/models/gamedata/CampaignTable.py +++ b/ArknightsUID/utils/models/gamedata/CampaignTable.py @@ -6,9 +6,9 @@ from msgspec import field class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class CampaignDataBreakRewardLadder(BaseStruct): @@ -18,16 +18,16 @@ class CampaignDataBreakRewardLadder(BaseStruct): class WeightItemBundle(BaseStruct): - id_: str = field(name='id') - type_: str = field(name='type') + id_: str = field(name="id") + type_: str = field(name="type") dropType: str count: int weight: int class StageDataDisplayRewards_(BaseStruct): - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") dropType: int @@ -58,15 +58,15 @@ class CampaignDataGainLadder(BaseStruct): class StageDataDisplayRewards(BaseStruct): - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") dropType: int class StageDataDisplayDetailRewards(BaseStruct): occPercent: int - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") dropType: int @@ -93,19 +93,19 @@ class CampaignGroupData(BaseStruct): class CampaignRegionData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") isUnknwon: int class CampaignZoneData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") name: str regionId: str templateId: str class CampaignMissionData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") sortId: int param: List[str] description: str @@ -145,7 +145,7 @@ class CampaignTrainingAllOpenTimeData(BaseStruct): class CampaignTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" campaigns: Dict[str, CampaignData] campaignGroups: Dict[str, CampaignGroupData] diff --git a/ArknightsUID/utils/models/gamedata/ChapterTable.py b/ArknightsUID/utils/models/gamedata/ChapterTable.py index de60540..0c30d4c 100644 --- a/ArknightsUID/utils/models/gamedata/ChapterTable.py +++ b/ArknightsUID/utils/models/gamedata/ChapterTable.py @@ -15,6 +15,6 @@ class ChapterData(BaseStruct): class ChapterTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" chapters: Dict[str, ChapterData] diff --git a/ArknightsUID/utils/models/gamedata/CharMetaTable.py b/ArknightsUID/utils/models/gamedata/CharMetaTable.py index ee369bf..6e4a317 100644 --- a/ArknightsUID/utils/models/gamedata/CharMetaTable.py +++ b/ArknightsUID/utils/models/gamedata/CharMetaTable.py @@ -6,9 +6,9 @@ from msgspec import field class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class SpCharMissionData(BaseStruct): @@ -21,7 +21,7 @@ class SpCharMissionData(BaseStruct): class CharMetaTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" spCharGroups: Dict[str, List[str]] spCharMissions: Dict[str, Dict[str, SpCharMissionData]] diff --git a/ArknightsUID/utils/models/gamedata/CharPatchTable.py b/ArknightsUID/utils/models/gamedata/CharPatchTable.py index ca805f7..cd206d9 100644 --- a/ArknightsUID/utils/models/gamedata/CharPatchTable.py +++ b/ArknightsUID/utils/models/gamedata/CharPatchTable.py @@ -37,7 +37,7 @@ class CharacterDataTraitDataBundle(BaseStruct): class AttributesData(BaseStruct): maxHp: int atk: int - def_: int = field(name='def') + def_: int = field(name="def") magicResistance: float cost: int blockCnt: int @@ -66,9 +66,9 @@ class CharacterDataAttributesKeyFrame(BaseStruct): class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class CharacterDataPhaseData(BaseStruct): @@ -130,7 +130,7 @@ class ExternalBuff(BaseStruct): class CharacterDataPotentialRank(BaseStruct): - type_: int = field(name='type') + type_: int = field(name="type") description: str buff: Union[ExternalBuff, None] equivalentCost: Union[ItemBundle, None] @@ -192,7 +192,7 @@ class CharPatchDataPatchDetailInfo(BaseStruct): class CharPatchTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" infos: Dict[str, CharPatchDataPatchInfo] patchChars: Dict[str, CharacterData] diff --git a/ArknightsUID/utils/models/gamedata/CharacterTable.py b/ArknightsUID/utils/models/gamedata/CharacterTable.py index 658511e..b3b5ed1 100644 --- a/ArknightsUID/utils/models/gamedata/CharacterTable.py +++ b/ArknightsUID/utils/models/gamedata/CharacterTable.py @@ -33,7 +33,7 @@ class CharacterDataTraitDataBundle(BaseStruct): class AttributesData(BaseStruct): maxHp: int atk: int - def_: int = field(name='def') + def_: int = field(name="def") magicResistance: float cost: int blockCnt: int @@ -62,9 +62,9 @@ class CharacterDataAttributesKeyFrame(BaseStruct): class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class CharacterDataPhaseData(BaseStruct): @@ -127,7 +127,7 @@ class ExternalBuff(BaseStruct): class CharacterDataPotentialRank(BaseStruct): - type_: int = field(name='type') + type_: int = field(name="type") description: str buff: Union[ExternalBuff, None] equivalentCost: Union[ItemBundle, None] @@ -176,7 +176,7 @@ class CharacterData(BaseStruct): class CharacterTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" chars: Dict[str, CharacterData] diff --git a/ArknightsUID/utils/models/gamedata/CharmTable.py b/ArknightsUID/utils/models/gamedata/CharmTable.py index 73d9073..3545355 100644 --- a/ArknightsUID/utils/models/gamedata/CharmTable.py +++ b/ArknightsUID/utils/models/gamedata/CharmTable.py @@ -34,7 +34,7 @@ class RuneData(BaseStruct): class RuneTablePackedRuneData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") points: float mutexGroupKey: Union[str, None] description: str @@ -42,7 +42,7 @@ class RuneTablePackedRuneData(BaseStruct): class CharmItemData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") sort: int name: str icon: str @@ -61,6 +61,6 @@ class CharmItemData(BaseStruct): class CharmTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" charmList: List[CharmItemData] diff --git a/ArknightsUID/utils/models/gamedata/CharwordTable.py b/ArknightsUID/utils/models/gamedata/CharwordTable.py index 2e57f13..7a83363 100644 --- a/ArknightsUID/utils/models/gamedata/CharwordTable.py +++ b/ArknightsUID/utils/models/gamedata/CharwordTable.py @@ -36,7 +36,7 @@ class VoiceLangInfoData(BaseStruct): class VoiceLangData(BaseStruct): wordkeys: List[str] charId: str - dict_: Dict[str, VoiceLangInfoData] = field(name='dict') + dict_: Dict[str, VoiceLangInfoData] = field(name="dict") class VoiceLangTypeData(BaseStruct): @@ -55,7 +55,7 @@ class NewVoiceTimeData(BaseStruct): class CharwordTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" charWords: Dict[str, CharWordData] voiceLangDict: Dict[str, VoiceLangData] diff --git a/ArknightsUID/utils/models/gamedata/CheckinTable.py b/ArknightsUID/utils/models/gamedata/CheckinTable.py index 8e49e4b..aa42293 100644 --- a/ArknightsUID/utils/models/gamedata/CheckinTable.py +++ b/ArknightsUID/utils/models/gamedata/CheckinTable.py @@ -6,9 +6,9 @@ from msgspec import field class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class MonthlySignInData(BaseStruct): @@ -36,7 +36,7 @@ class MonthlyDailyBonusGroup(BaseStruct): class CheckinTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" groups: Dict[str, MonthlySignInGroupData] monthlySubItem: Dict[str, List[MonthlyDailyBonusGroup]] diff --git a/ArknightsUID/utils/models/gamedata/ClimbTowerTable.py b/ArknightsUID/utils/models/gamedata/ClimbTowerTable.py index adf02f2..ab0c3bb 100644 --- a/ArknightsUID/utils/models/gamedata/ClimbTowerTable.py +++ b/ArknightsUID/utils/models/gamedata/ClimbTowerTable.py @@ -6,9 +6,9 @@ from msgspec import field class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class ClimbTowerSingleTowerDataClimbTowerTaskRewardData(BaseStruct): @@ -17,7 +17,7 @@ class ClimbTowerSingleTowerDataClimbTowerTaskRewardData(BaseStruct): class ClimbTowerSingleTowerData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") sortId: int stageNum: int name: str @@ -42,29 +42,29 @@ class ClimbTowerSingleTowerData(BaseStruct): class WeightItemBundle(BaseStruct): - id_: str = field(name='id') - type_: str = field(name='type') + id_: str = field(name="id") + type_: str = field(name="type") dropType: str count: int weight: int class StageDataDisplayRewards(BaseStruct): - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") dropType: int class StageDataDisplayDetailRewards(BaseStruct): occPercent: int - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") dropType: int class ClimbTowerDropDisplayInfo(BaseStruct): itemId: str - type_: int = field(name='type') + type_: int = field(name="type") maxCount: int minCount: int @@ -77,7 +77,7 @@ class ClimbTowerLevelDropInfo(BaseStruct): class ClimbTowerSingleLevelData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") levelId: str towerId: str layerNum: int @@ -90,7 +90,7 @@ class ClimbTowerSingleLevelData(BaseStruct): class ClimbTowerTacticalBuffData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") desc: str profession: str isDefaultActive: bool @@ -127,7 +127,7 @@ class RuneData(BaseStruct): class RuneTablePackedRuneData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") points: float mutexGroupKey: Union[str, None] description: str @@ -135,8 +135,8 @@ class RuneTablePackedRuneData(BaseStruct): class ClimbTowerMainCardData(BaseStruct): - id_: str = field(name='id') - type_: str = field(name='type') + id_: str = field(name="id") + type_: str = field(name="type") linkedTowerId: Union[str, None] sortId: int name: str @@ -147,7 +147,7 @@ class ClimbTowerMainCardData(BaseStruct): class ClimbTowerSubCardData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") mainCardId: str sortId: int name: str @@ -157,7 +157,7 @@ class ClimbTowerSubCardData(BaseStruct): class ClimbTowerCurseCardData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") towerIdList: List[str] name: str desc: str @@ -165,7 +165,7 @@ class ClimbTowerCurseCardData(BaseStruct): class ClimbTowerSeasonInfoData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") name: str startTs: int endTs: int @@ -199,16 +199,16 @@ class ClimbTowerRewardInfo(BaseStruct): class MissionDisplayRewards(BaseStruct): - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") count: int class MissionData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") sortId: int description: str - type_: str = field(name='type') + type_: str = field(name="type") itemBgType: str preMissionIds: Union[List[str], None] template: str @@ -231,9 +231,9 @@ class ClimbTowerMissionData(MissionData): class MissionGroup(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") title: Union[str, None] - type_: str = field(name='type') + type_: str = field(name="type") preMissionGroup: Union[str, None] period: Union[List[int], None] rewards: List[MissionDisplayRewards] @@ -243,7 +243,7 @@ class MissionGroup(BaseStruct): class ClimbTowerTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" towers: Dict[str, ClimbTowerSingleTowerData] levels: Dict[str, ClimbTowerSingleLevelData] diff --git a/ArknightsUID/utils/models/gamedata/ClueData.py b/ArknightsUID/utils/models/gamedata/ClueData.py index dded46d..f78fad6 100644 --- a/ArknightsUID/utils/models/gamedata/ClueData.py +++ b/ArknightsUID/utils/models/gamedata/ClueData.py @@ -21,7 +21,7 @@ class MeetingClueDataReceiveTimeBonus(BaseStruct): class ClueData(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" clues: List[MeetingClueDataClueData] clueTypes: List[MeetingClueDataClueTypeData] diff --git a/ArknightsUID/utils/models/gamedata/CrisisTable.py b/ArknightsUID/utils/models/gamedata/CrisisTable.py index f2ea509..c26692e 100644 --- a/ArknightsUID/utils/models/gamedata/CrisisTable.py +++ b/ArknightsUID/utils/models/gamedata/CrisisTable.py @@ -6,9 +6,9 @@ from msgspec import field class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class StringKeyFrames(BaseStruct): @@ -34,7 +34,7 @@ class CrisisMapRankInfo(BaseStruct): class CrisisTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" seasonInfo: List[CrisisClientDataSeasonInfo] meta: str diff --git a/ArknightsUID/utils/models/gamedata/CrisisV2Table.py b/ArknightsUID/utils/models/gamedata/CrisisV2Table.py index 31012a2..4d069d5 100644 --- a/ArknightsUID/utils/models/gamedata/CrisisV2Table.py +++ b/ArknightsUID/utils/models/gamedata/CrisisV2Table.py @@ -7,9 +7,9 @@ from msgspec import field class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class StringKeyFrames(BaseStruct): @@ -31,13 +31,13 @@ class CrisisV2ConstData(BaseStruct): class appraiseType(Enum): - RANK_D = 'RANK_D' - RANK_C = 'RANK_C' - RANK_B = 'RANK_B' - RANK_A = 'RANK_A' - RANK_S = 'RANK_S' - RANK_SS = 'RANK_SS' - RANK_SSS = 'RANK_SSS' + RANK_D = "RANK_D" + RANK_C = "RANK_C" + RANK_B = "RANK_B" + RANK_A = "RANK_A" + RANK_S = "RANK_S" + RANK_SS = "RANK_SS" + RANK_SSS = "RANK_SSS" class CrisisV2ScoreLevelToAppraiseData(BaseStruct): @@ -45,7 +45,7 @@ class CrisisV2ScoreLevelToAppraiseData(BaseStruct): class CrisisV2Table(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" seasonInfoDataMap: Dict scoreLevelToAppraiseDataMap: Dict[str, CrisisV2ScoreLevelToAppraiseData] diff --git a/ArknightsUID/utils/models/gamedata/DisplayMetaTable.py b/ArknightsUID/utils/models/gamedata/DisplayMetaTable.py index bca94ac..4a66e07 100644 --- a/ArknightsUID/utils/models/gamedata/DisplayMetaTable.py +++ b/ArknightsUID/utils/models/gamedata/DisplayMetaTable.py @@ -42,8 +42,8 @@ class HomeBackgroundSingleData(BaseStruct): class HomeBackgroundThemeData(BaseStruct): - id_: str = field(name='id') - type_: str = field(name='type') + id_: str = field(name="id") + type_: str = field(name="type") sortId: int startTime: int tmName: str @@ -62,7 +62,7 @@ class ThemeLimitInfo(BaseStruct): class HomeBackgroundThemeLimitData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") limitInfos: List[ThemeLimitInfo] @@ -75,6 +75,7 @@ class HomeBackgroundData(BaseStruct): defaultBgMusicId: str themeStartTime: int + # class # class NameCardV2Data(BaseStruct): @@ -85,7 +86,7 @@ class HomeBackgroundData(BaseStruct): class DisplayMetaTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" playerAvatarData: PlayerAvatarData homeBackgroundData: HomeBackgroundData diff --git a/ArknightsUID/utils/models/gamedata/EnemyHandbookTable.py b/ArknightsUID/utils/models/gamedata/EnemyHandbookTable.py index aec41b6..b8547f5 100644 --- a/ArknightsUID/utils/models/gamedata/EnemyHandbookTable.py +++ b/ArknightsUID/utils/models/gamedata/EnemyHandbookTable.py @@ -31,14 +31,14 @@ class EnemyHandBookData(BaseStruct): class EnemyHandbookLevelInfoDataRangePair(BaseStruct): - min_: float = field(name='min') - max_: float = field(name='max') + min_: float = field(name="min") + max_: float = field(name="max") class EnemyHandbookLevelInfoData(BaseStruct): classLevel: str attack: EnemyHandbookLevelInfoDataRangePair - def_: EnemyHandbookLevelInfoDataRangePair = field(name='def') + def_: EnemyHandbookLevelInfoDataRangePair = field(name="def") magicRes: EnemyHandbookLevelInfoDataRangePair maxHP: EnemyHandbookLevelInfoDataRangePair moveSpeed: EnemyHandbookLevelInfoDataRangePair @@ -48,13 +48,13 @@ class EnemyHandbookLevelInfoData(BaseStruct): class EnemyHandbookRaceData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") raceName: str sortId: int class EnemyHandbookTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" levelInfoList: List[EnemyHandbookLevelInfoData] enemyData: Dict[str, EnemyHandBookData] diff --git a/ArknightsUID/utils/models/gamedata/FavorTable.py b/ArknightsUID/utils/models/gamedata/FavorTable.py index 8237e0b..37478ed 100644 --- a/ArknightsUID/utils/models/gamedata/FavorTable.py +++ b/ArknightsUID/utils/models/gamedata/FavorTable.py @@ -15,7 +15,7 @@ class FavorDataFrames(BaseStruct): class FavorTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" maxFavor: int favorFrames: List[FavorDataFrames] diff --git a/ArknightsUID/utils/models/gamedata/GachaTable.py b/ArknightsUID/utils/models/gamedata/GachaTable.py index 5a3c733..1906a0f 100644 --- a/ArknightsUID/utils/models/gamedata/GachaTable.py +++ b/ArknightsUID/utils/models/gamedata/GachaTable.py @@ -32,9 +32,9 @@ class GachaDataCarouselData(BaseStruct): class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class GachaDataRecruitRange(BaseStruct): @@ -131,7 +131,7 @@ class GachaDataFesGachaPoolRelateItem(BaseStruct): class GachaTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" gachaTags: List[GachaTag] carousel: List[GachaDataCarouselData] diff --git a/ArknightsUID/utils/models/gamedata/GamedataConst.py b/ArknightsUID/utils/models/gamedata/GamedataConst.py index 12a6a05..3cdcd68 100644 --- a/ArknightsUID/utils/models/gamedata/GamedataConst.py +++ b/ArknightsUID/utils/models/gamedata/GamedataConst.py @@ -6,9 +6,9 @@ from msgspec import field class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class GameDataConstsCharAssistRefreshTimeState(BaseStruct): @@ -23,7 +23,7 @@ class TermDescriptionData(BaseStruct): class GamedataConst(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" addedRewardDisplayZone: str advancedGachaCrystalCost: int diff --git a/ArknightsUID/utils/models/gamedata/HandbookInfoTable.py b/ArknightsUID/utils/models/gamedata/HandbookInfoTable.py index 5727598..c6ce545 100644 --- a/ArknightsUID/utils/models/gamedata/HandbookInfoTable.py +++ b/ArknightsUID/utils/models/gamedata/HandbookInfoTable.py @@ -13,9 +13,9 @@ class HandbookUnlockParam(BaseStruct): class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class HandbookStageTimeData(BaseStruct): @@ -43,11 +43,11 @@ class HandbookStoryStageData(BaseStruct): class HandbookDisplayCondition(BaseStruct): charId: str conditionCharId: str - type_: str = field(name='type') + type_: str = field(name="type") class HandbookTeamMission(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") sort: int powerId: str powerName: str @@ -122,7 +122,7 @@ class HandbookInfoData(BaseStruct): class HandbookInfoTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" handbookDict: Dict[str, HandbookInfoData] npcDict: Dict[str, NPCData] diff --git a/ArknightsUID/utils/models/gamedata/HandbookTable.py b/ArknightsUID/utils/models/gamedata/HandbookTable.py index df23826..381ae15 100644 --- a/ArknightsUID/utils/models/gamedata/HandbookTable.py +++ b/ArknightsUID/utils/models/gamedata/HandbookTable.py @@ -40,6 +40,6 @@ class CharHandbook(BaseStruct): class HandbookTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" char_102_texas: CharHandbook diff --git a/ArknightsUID/utils/models/gamedata/HandbookTeamTable.py b/ArknightsUID/utils/models/gamedata/HandbookTeamTable.py index bcdfd2b..96c7fd6 100644 --- a/ArknightsUID/utils/models/gamedata/HandbookTeamTable.py +++ b/ArknightsUID/utils/models/gamedata/HandbookTeamTable.py @@ -15,6 +15,6 @@ class HandbookTeam(BaseStruct): class HandbookTeamTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" team: Dict[str, HandbookTeam] diff --git a/ArknightsUID/utils/models/gamedata/ItemTable.py b/ArknightsUID/utils/models/gamedata/ItemTable.py index 44afe18..8f68ddd 100644 --- a/ArknightsUID/utils/models/gamedata/ItemTable.py +++ b/ArknightsUID/utils/models/gamedata/ItemTable.py @@ -1,4 +1,4 @@ -from typing import Dict, List, Union +from typing import ClassVar, Dict, List, Union from ..common import BaseStruct @@ -16,9 +16,9 @@ class ItemDataBuildingProductInfo(BaseStruct): class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class FavorCharacterInfo(BaseStruct): @@ -47,13 +47,13 @@ class UniCollectionInfo(BaseStruct): class ApSupplyFeature(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") ap: int hasTs: bool class ExpItemFeature(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") gainExp: int @@ -70,9 +70,9 @@ class ItemData(BaseStruct): sortId: int classifyType: str itemType: str - stageDropList: List[Union[ItemDataStageDropInfo, None]] = [] - buildingProductList: List[Union[ItemDataBuildingProductInfo, None]] = [] - voucherRelateList: List[Union[ItemDataVoucherRelateInfo, None]] = [] + stageDropList: ClassVar[List[Union[ItemDataStageDropInfo, None]]] = [] + buildingProductList: ClassVar[List[Union[ItemDataBuildingProductInfo, None]]] = [] + voucherRelateList: ClassVar[List[Union[ItemDataVoucherRelateInfo, None]]] = [] overrideBkg: Union[str, None] = None usage: Union[str, None] = None description: Union[str, None] = None @@ -83,7 +83,7 @@ class ItemData(BaseStruct): class CharVoucherItemFeature(BaseStruct): displayType: int - id_: str = field(name='id') + id_: str = field(name="id") class ServerItemReminderMailData(BaseStruct): @@ -98,7 +98,7 @@ class ServerItemReminderInfo(BaseStruct): class ItemTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" activityPotentialCharacters: Dict[str, ActivityPotentialCharacterInfo] apSupplies: Dict[str, ApSupplyFeature] diff --git a/ArknightsUID/utils/models/gamedata/MedalTable.py b/ArknightsUID/utils/models/gamedata/MedalTable.py index c1bfafe..70c28d2 100644 --- a/ArknightsUID/utils/models/gamedata/MedalTable.py +++ b/ArknightsUID/utils/models/gamedata/MedalTable.py @@ -8,13 +8,13 @@ from msgspec import field class MedalExpireTime(BaseStruct): start: int end: int - type_: str = field(name='type') + type_: str = field(name="type") class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class MedalGroupData(BaseStruct): @@ -61,7 +61,7 @@ class MedalPerData(BaseStruct): class MedalTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" medalList: List[MedalPerData] medalTypeData: Dict[str, MedalTypeData] diff --git a/ArknightsUID/utils/models/gamedata/MissionTable.py b/ArknightsUID/utils/models/gamedata/MissionTable.py index b0c4469..1255b2c 100644 --- a/ArknightsUID/utils/models/gamedata/MissionTable.py +++ b/ArknightsUID/utils/models/gamedata/MissionTable.py @@ -6,8 +6,8 @@ from msgspec import field class MissionDisplayRewards(BaseStruct): - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") count: int @@ -28,26 +28,26 @@ class MissionWeeklyRewardConf(BaseStruct): beginTime: int endTime: int groupId: str - id_: str = field(name='id') + id_: str = field(name="id") periodicalPointCost: int - type_: str = field(name='type') + type_: str = field(name="type") sortIndex: int rewards: List[MissionDisplayRewards] class MissionDailyRewardConf(BaseStruct): groupId: str - id_: str = field(name='id') + id_: str = field(name="id") periodicalPointCost: int - type_: str = field(name='type') + type_: str = field(name="type") sortIndex: int rewards: List[MissionDisplayRewards] class MissionGroup(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") title: Union[str, None] - type_: str = field(name='type') + type_: str = field(name="type") preMissionGroup: Union[str, None] period: Union[List[int], None] rewards: Union[List[MissionDisplayRewards], None] @@ -57,10 +57,10 @@ class MissionGroup(BaseStruct): class MissionData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") sortId: int description: str - type_: str = field(name='type') + type_: str = field(name="type") itemBgType: str preMissionIds: Union[List[str], None] template: str @@ -90,7 +90,7 @@ class CrossAppShareMissions(BaseStruct): class MissionTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" missions: Dict[str, MissionData] missionGroups: Dict[str, MissionGroup] diff --git a/ArknightsUID/utils/models/gamedata/OpenServerTable.py b/ArknightsUID/utils/models/gamedata/OpenServerTable.py index 24f950e..22445fb 100644 --- a/ArknightsUID/utils/models/gamedata/OpenServerTable.py +++ b/ArknightsUID/utils/models/gamedata/OpenServerTable.py @@ -6,21 +6,21 @@ from msgspec import field class RewardItem(BaseStruct): - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") count: int sortId: int class ItemBundle(BaseStruct): - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") count: int class MissionDisplayRewards(BaseStruct): - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") count: int @@ -42,7 +42,7 @@ class ReturnCheckinData(BaseStruct): class ReturnLongTermTaskData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") sortId: int template: str param: List[str] @@ -53,7 +53,7 @@ class ReturnLongTermTaskData(BaseStruct): class ReturnDailyTaskData(BaseStruct): groupId: str - id_: str = field(name='id') + id_: str = field(name="id") groupSortId: int taskSortId: int template: str @@ -105,10 +105,10 @@ class ChainLoginData(BaseStruct): class MissionData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") sortId: int description: str - type_: str = field(name='type') + type_: str = field(name="type") itemBgType: str preMissionIds: None template: str @@ -126,9 +126,9 @@ class MissionData(BaseStruct): class MissionGroup(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") title: None - type_: str = field(name='type') + type_: str = field(name="type") preMissionGroup: None period: None rewards: None @@ -145,7 +145,7 @@ class OpenServerData(BaseStruct): class OpenServerScheduleItem(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") startTs: int endTs: int totalCheckinDescption: str @@ -269,7 +269,7 @@ class OpenServerNewbieCheckInPackage(BaseStruct): class OpenServerTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" schedule: List[OpenServerScheduleItem] dataMap: Dict[str, OpenServerData] diff --git a/ArknightsUID/utils/models/gamedata/PlayerAvatarTable.py b/ArknightsUID/utils/models/gamedata/PlayerAvatarTable.py index c182437..ecd2fa5 100644 --- a/ArknightsUID/utils/models/gamedata/PlayerAvatarTable.py +++ b/ArknightsUID/utils/models/gamedata/PlayerAvatarTable.py @@ -21,7 +21,7 @@ class PlayerAvatarPerData(BaseStruct): class PlayerAvatarTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" avatarList: List[PlayerAvatarPerData] avatarTypeData: Dict[str, PlayerAvatarGroupData] diff --git a/ArknightsUID/utils/models/gamedata/RangeTable.py b/ArknightsUID/utils/models/gamedata/RangeTable.py index cec106e..10116f1 100644 --- a/ArknightsUID/utils/models/gamedata/RangeTable.py +++ b/ArknightsUID/utils/models/gamedata/RangeTable.py @@ -18,13 +18,13 @@ class ObscuredRect(BaseStruct): class Stage(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") direction: int grids: List[GridPosition] boundingBoxes: Union[List[ObscuredRect], None] = None class RangeTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" range_: Dict[str, Stage] diff --git a/ArknightsUID/utils/models/gamedata/ReplicateTable.py b/ArknightsUID/utils/models/gamedata/ReplicateTable.py index cacf79f..e233a35 100644 --- a/ArknightsUID/utils/models/gamedata/ReplicateTable.py +++ b/ArknightsUID/utils/models/gamedata/ReplicateTable.py @@ -6,9 +6,9 @@ from msgspec import field class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class ReplicateData(BaseStruct): @@ -21,6 +21,6 @@ class ReplicateList(BaseStruct): class ReplicateTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" replicate: Dict[str, ReplicateList] diff --git a/ArknightsUID/utils/models/gamedata/RetroTable.py b/ArknightsUID/utils/models/gamedata/RetroTable.py index 6be1441..21ca5b8 100644 --- a/ArknightsUID/utils/models/gamedata/RetroTable.py +++ b/ArknightsUID/utils/models/gamedata/RetroTable.py @@ -6,14 +6,14 @@ from msgspec import field class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class StageDataDisplayRewards(BaseStruct): - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") dropType: int @@ -32,8 +32,8 @@ class Act17sideDataChoiceNodeOptionData(BaseStruct): class StageDataDisplayDetailRewards(BaseStruct): occPercent: int - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") dropType: int CannotGetPercent: Union[float, None] = None GetPercent: Union[float, None] = None @@ -69,7 +69,7 @@ class Act17sideDataMainlineChapterData(BaseStruct): chapterDes: str chapterIcon: str unlockDes: str - id_: str = field(name='id') + id_: str = field(name="id") class RunesSelector(BaseStruct): @@ -95,7 +95,7 @@ class TechTreeBranchRunes(BaseStruct): class BranchRuneData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") points: float mutexGroupKey: None description: str @@ -266,7 +266,7 @@ class RuneData(BaseStruct): class RuneTablePackedRuneData(BaseStruct): description: str - id_: str = field(name='id') + id_: str = field(name="id") points: float runes: List[RuneData] mutexGroupKey: Union[str, None] = None @@ -322,8 +322,8 @@ class RetroTrailRuleData(BaseStruct): class WeightItemBundle(BaseStruct): count: int dropType: str - id_: str = field(name='id') - type_: str = field(name='type') + id_: str = field(name="id") + type_: str = field(name="type") weight: int @@ -407,7 +407,7 @@ class RetroTrailData(BaseStruct): class RetroActData(BaseStruct): retroId: str - type_: int = field(name='type') + type_: int = field(name="type") linkedActId: List[str] startTime: int trailStartTime: int @@ -436,7 +436,7 @@ class RetroStageOverrideInfo(BaseStruct): class RetroTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" customData: ActivityCustomData initRetroCoin: int diff --git a/ArknightsUID/utils/models/gamedata/RoguelikeTable.py b/ArknightsUID/utils/models/gamedata/RoguelikeTable.py index 99f1dec..a127e8b 100644 --- a/ArknightsUID/utils/models/gamedata/RoguelikeTable.py +++ b/ArknightsUID/utils/models/gamedata/RoguelikeTable.py @@ -28,12 +28,12 @@ class RoguelikeOuterBuff(BaseStruct): class RoguelikeOutBuffData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") buffs: Dict[str, RoguelikeOuterBuff] class RoguelikeEndingData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") backgroundId: str name: str description: str @@ -43,7 +43,7 @@ class RoguelikeEndingData(BaseStruct): class RoguelikeModeData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") name: str canUnlockItem: int scoreFactor: float @@ -56,24 +56,24 @@ class RoguelikeModeData(BaseStruct): class RoguelikeChoiceSceneData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") title: str description: str background: str class RoguelikeChoiceData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") title: str description: Union[str, None] - type_: str = field(name='type') + type_: str = field(name="type") nextSceneId: Union[str, None] icon: Union[str, None] param: Dict[str, object] class RoguelikeZoneData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") name: str description: str endingDescription: str @@ -82,7 +82,7 @@ class RoguelikeZoneData(BaseStruct): class RoguelikeStageData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") linkedStageId: str levelId: str code: str @@ -96,12 +96,12 @@ class RoguelikeStageData(BaseStruct): class RoguelikeRelicFeature(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") buffs: List[RoguelikeBuff] class RoguelikeUpgradeTicketFeature(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") profession: int rarity: int professionList: List[str] @@ -109,7 +109,7 @@ class RoguelikeUpgradeTicketFeature(BaseStruct): class RoguelikeRecruitTicketFeature(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") profession: int rarity: int professionList: List[str] @@ -125,13 +125,13 @@ class RelicStableUnlockParam(BaseStruct): class RoguelikeItemData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") name: str description: Union[str, None] usage: str obtainApproach: str iconId: str - type_: str = field(name='type') + type_: str = field(name="type") rarity: str value: int sortId: int @@ -193,7 +193,7 @@ class RoguelikeConstTable(BaseStruct): class RoguelikeTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" constTable: RoguelikeConstTable itemTable: RoguelikeItemTable diff --git a/ArknightsUID/utils/models/gamedata/RoguelikeTopicTable.py b/ArknightsUID/utils/models/gamedata/RoguelikeTopicTable.py index eccb1b8..cd93416 100644 --- a/ArknightsUID/utils/models/gamedata/RoguelikeTopicTable.py +++ b/ArknightsUID/utils/models/gamedata/RoguelikeTopicTable.py @@ -21,7 +21,7 @@ class RoguelikeTopicConfig(BaseStruct): class RoguelikeTopicBasicData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") name: str startTime: int disappearTimeOnMainScreen: int @@ -68,7 +68,7 @@ class RoguelikeTopicEnroll(BaseStruct): class RoguelikeTopicBP(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") level: int tokenNum: int nextTokenNum: int @@ -88,9 +88,9 @@ class RoguelikeTopicMilestoneUpdateData(BaseStruct): class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class RoguelikeTopicBPGrandPrize(BaseStruct): @@ -111,7 +111,7 @@ class RoguelikeTopicBPGrandPrize(BaseStruct): class RoguelikeTopicMonthMission(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") taskName: str taskClass: str innerClassWeight: int @@ -122,7 +122,7 @@ class RoguelikeTopicMonthMission(BaseStruct): class RoguelikeTopicMonthSquad(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") teamName: str teamSubName: Union[str, None] teamFlavorDesc: Union[str, None] @@ -298,8 +298,8 @@ class ActArchiveBuffData(BaseStruct): class ActArchiveTotemItemData(BaseStruct): - id_: str = field(name='id') - type_: int = field(name='type') + id_: str = field(name="id") + type_: int = field(name="type") enrollConditionId: Union[str, None] sortId: int @@ -309,7 +309,7 @@ class ActArchiveTotemData(BaseStruct): class ActArchiveChaosItemData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") isHidden: bool enrollId: Union[str, None] sortId: int @@ -420,7 +420,7 @@ class RoguelikeGameInitData(BaseStruct): class RoguelikeGameStageData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") linkedStageId: str levelId: str code: str @@ -439,7 +439,7 @@ class RoguelikeGameStageData(BaseStruct): class RoguelikeGameZoneData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") name: str clockPerformance: Union[str, None] displayTime: Union[str, None] @@ -462,7 +462,7 @@ class RoguelikeGameTrapData(BaseStruct): class RoguelikeGameRecruitTicketData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") profession: int rarity: int professionList: List[str] @@ -473,7 +473,7 @@ class RoguelikeGameRecruitTicketData(BaseStruct): class RoguelikeGameUpgradeTicketData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") profession: int rarity: int professionList: List[str] @@ -481,7 +481,7 @@ class RoguelikeGameUpgradeTicketData(BaseStruct): class RoguelikeGameCustomTicketData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") subType: str discardText: str @@ -498,7 +498,7 @@ class RoguelikeBuff(BaseStruct): class RoguelikeGameRelicData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") buffs: List[RoguelikeBuff] @@ -509,13 +509,13 @@ class RoguelikeGameRelicCheckParam(BaseStruct): class RoguelikeGameRelicParamData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") checkCharBoxTypes: List[str] checkCharBoxParams: List[RoguelikeGameRelicCheckParam] class RoguelikeGameRecruitGrpData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") iconId: str name: str desc: str @@ -523,7 +523,7 @@ class RoguelikeGameRecruitGrpData(BaseStruct): class RoguelikeChoiceDisplayData(BaseStruct): - type_: str = field(name='type') + type_: str = field(name="type") funcIconId: Union[str, None] itemId: Union[str, None] taskId: Union[str, None] @@ -533,11 +533,11 @@ class RoguelikeChoiceDisplayData(BaseStruct): class RoguelikeGameChoiceData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") title: str description: Union[str, None] lockedCoverDesc: Union[str, None] - type_: str = field(name='type') + type_: str = field(name="type") leftDecoType: str nextSceneId: Union[str, None] icon: Union[str, None] @@ -546,7 +546,7 @@ class RoguelikeGameChoiceData(BaseStruct): class RoguelikeGameChoiceSceneData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") title: str description: str background: Union[str, None] @@ -569,8 +569,8 @@ class RoguelikeGameNodeSubTypeData(BaseStruct): class RoguelikeGameVariationData(BaseStruct): - id_: str = field(name='id') - type_: str = field(name='type') + id_: str = field(name="id") + type_: str = field(name="type") outerName: str innerName: str functionDesc: str @@ -580,7 +580,7 @@ class RoguelikeGameVariationData(BaseStruct): class RoguelikeGameCharBuffData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") iconId: str outerName: str innerName: str @@ -590,7 +590,7 @@ class RoguelikeGameCharBuffData(BaseStruct): class RoguelikeGameSquadBuffData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") iconId: str outerName: str innerName: str @@ -672,7 +672,7 @@ class RoguelikeGameEndingDataLevelIcon(BaseStruct): class RoguelikeGameEndingData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") familyId: int name: str desc: str @@ -694,13 +694,13 @@ class TipData(BaseStruct): class RoguelikeGameItemData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") name: str description: Union[str, None] usage: str obtainApproach: str iconId: str - type_: str = field(name='type') + type_: str = field(name="type") subType: str rarity: str value: int @@ -804,7 +804,7 @@ class RoguelikeTopicDetail(BaseStruct): ] styleConfig: Dict[str, RoguelikePredefinedStyleData] exploreTools: Union[Dict[str, RoguelikeGameExploreToolData], None] = None - styles: Union[Dict[str, RoguelikePredefinedStyleData], None] = {} + styles: Union[Dict[str, RoguelikePredefinedStyleData], None] = None class RoguelikeModuleBaseData(BaseStruct): @@ -970,7 +970,7 @@ class RoguelikeVisionData(BaseStruct): class RoguelikeVisionModuleDataVisionChoiceConfig(BaseStruct): value: int - type_: int = field(name='type') + type_: int = field(name="type") class RoguelikeVisionModuleConsts(BaseStruct): @@ -1236,7 +1236,7 @@ class RoguelikeTopicCustomizeData(BaseStruct): class RoguelikeTopicTable(BaseStruct): - __version__ = '23-12-02-09-28-50-918524' + __version__ = "23-12-02-09-28-50-918524" topics: Dict[str, RoguelikeTopicBasicData] constant: RoguelikeTopicConst diff --git a/ArknightsUID/utils/models/gamedata/SandboxPermTable.py b/ArknightsUID/utils/models/gamedata/SandboxPermTable.py index 96c0674..42a41f6 100644 --- a/ArknightsUID/utils/models/gamedata/SandboxPermTable.py +++ b/ArknightsUID/utils/models/gamedata/SandboxPermTable.py @@ -873,7 +873,7 @@ class SandboxPermItemData(BaseStruct): class SandboxPermTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" basicInfo: Dict[str, SandboxPermBasicData] detail: SandboxPermDetailData diff --git a/ArknightsUID/utils/models/gamedata/SandboxTable.py b/ArknightsUID/utils/models/gamedata/SandboxTable.py index fea7c21..8f5256c 100644 --- a/ArknightsUID/utils/models/gamedata/SandboxTable.py +++ b/ArknightsUID/utils/models/gamedata/SandboxTable.py @@ -240,7 +240,7 @@ class SandboxEventData(BaseStruct): class SandboxEventSceneData(BaseStruct): choiceSceneId: str - type_: str = field(name='type') + type_: str = field(name="type") title: str description: str choices: List[str] @@ -248,7 +248,7 @@ class SandboxEventSceneData(BaseStruct): class SandboxEventChoiceData(BaseStruct): choiceId: str - type_: str = field(name='type') + type_: str = field(name="type") costAction: int finishScene: bool title: str @@ -272,12 +272,12 @@ class SandboxMissionData(BaseStruct): class SandboxUnitData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") name: str class SandboxDailyDescTemplateData(BaseStruct): - type_: str = field(name='type') + type_: str = field(name="type") templateDesc: List[str] @@ -296,7 +296,7 @@ class RushEnemyGroupConfig(BaseStruct): class RushEnemyGroupRushEnemyDBRef(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") level: int @@ -331,7 +331,7 @@ class RuneData(BaseStruct): class RuneTablePackedRuneData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") points: Union[int, float] mutexGroupKey: Union[str, None] description: str @@ -398,7 +398,7 @@ class SandboxItemData(BaseStruct): class SandboxTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" sandboxActTables: Dict[str, SandboxActTable] itemDatas: Dict[str, SandboxItemData] diff --git a/ArknightsUID/utils/models/gamedata/ShopClientTable.py b/ArknightsUID/utils/models/gamedata/ShopClientTable.py index 51475b5..607cb8e 100644 --- a/ArknightsUID/utils/models/gamedata/ShopClientTable.py +++ b/ArknightsUID/utils/models/gamedata/ShopClientTable.py @@ -20,7 +20,7 @@ class ShopRecommendGroup(BaseStruct): class ShopKeeperWord(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") text: str @@ -92,7 +92,7 @@ class ShopCreditUnlockItem(BaseStruct): class ShopCreditUnlockGroup(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") index: str startDateTime: int charDict: List[ShopCreditUnlockItem] @@ -145,7 +145,7 @@ class LMTGSShopOverlaySchedule(BaseStruct): class ShopClientTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" recommendList: List[ShopRecommendItem] creditUnlockGroup: Dict[str, ShopCreditUnlockGroup] diff --git a/ArknightsUID/utils/models/gamedata/SkillTable.py b/ArknightsUID/utils/models/gamedata/SkillTable.py index 473cda5..1ae33d0 100644 --- a/ArknightsUID/utils/models/gamedata/SkillTable.py +++ b/ArknightsUID/utils/models/gamedata/SkillTable.py @@ -6,9 +6,9 @@ from msgspec import field class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class SpData(BaseStruct): @@ -46,6 +46,6 @@ class SkillDataBundle(BaseStruct): class SkillTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" skills: Dict[str, SkillDataBundle] diff --git a/ArknightsUID/utils/models/gamedata/SkinTable.py b/ArknightsUID/utils/models/gamedata/SkinTable.py index 9f85725..4ec10c3 100644 --- a/ArknightsUID/utils/models/gamedata/SkinTable.py +++ b/ArknightsUID/utils/models/gamedata/SkinTable.py @@ -82,7 +82,7 @@ class SpecialSkinInfo(BaseStruct): class SkinTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" charSkins: Dict[str, CharSkinData] buildinEvolveMap: Dict[str, Dict[str, str]] diff --git a/ArknightsUID/utils/models/gamedata/StageTable.py b/ArknightsUID/utils/models/gamedata/StageTable.py index 79404bb..fac1d5e 100644 --- a/ArknightsUID/utils/models/gamedata/StageTable.py +++ b/ArknightsUID/utils/models/gamedata/StageTable.py @@ -11,15 +11,15 @@ class StageDataConditionDesc(BaseStruct): class StageDataDisplayRewards(BaseStruct): - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") dropType: int class StageDataDisplayDetailRewards(BaseStruct): occPercent: int - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") dropType: int @@ -44,9 +44,9 @@ class ProgressInfo(BaseStruct): class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class ExtraInfo(BaseStruct): @@ -139,7 +139,7 @@ class TileAppendInfo(BaseStruct): class WeeklyForceOpenTable(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") startTime: int endTime: int forceOpenList: List[str] @@ -241,7 +241,7 @@ class ApProtectZoneInfo(BaseStruct): class StageTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" stages: Dict[str, StageData] runeStageGroups: Dict[str, RuneStageGroupData] diff --git a/ArknightsUID/utils/models/gamedata/StoryReviewMetaTable.py b/ArknightsUID/utils/models/gamedata/StoryReviewMetaTable.py index ff1800a..2269d79 100644 --- a/ArknightsUID/utils/models/gamedata/StoryReviewMetaTable.py +++ b/ArknightsUID/utils/models/gamedata/StoryReviewMetaTable.py @@ -11,9 +11,9 @@ class MiniActTrialDataRuleData(BaseStruct): class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class MiniActTrialDataMiniActTrialRewardData(BaseStruct): @@ -38,23 +38,23 @@ class MiniActTrialData(BaseStruct): class ActArchiveResDataPicArchiveResItemData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") desc: str assetPath: str - type_: str = field(name='type') + type_: str = field(name="type") subType: Union[str, None] picDescription: str kvId: Union[str, None] class ActArchiveResDataAudioArchiveResItemData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") desc: str name: str class ActArchiveResDataAvgArchiveResItemData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") desc: str breifPath: Union[str, None] contentPath: str @@ -64,7 +64,7 @@ class ActArchiveResDataAvgArchiveResItemData(BaseStruct): class ActArchiveResDataStoryArchiveResItemData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") desc: str date: Union[str, None] pic: str @@ -86,7 +86,7 @@ class ActArchiveResDataActivityNewsLine(BaseStruct): class ActArchiveResDataNewsArchiveResItemData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") desc: str newsType: str newsFormat: ActArchiveResDataNewsFormatData @@ -229,7 +229,7 @@ class ActArchiveComponentTable(BaseStruct): class StoryReviewMetaTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" miniActTrialData: MiniActTrialData actArchiveResData: ActArchiveResData diff --git a/ArknightsUID/utils/models/gamedata/StoryReviewTable.py b/ArknightsUID/utils/models/gamedata/StoryReviewTable.py index ce20b2b..16ec634 100644 --- a/ArknightsUID/utils/models/gamedata/StoryReviewTable.py +++ b/ArknightsUID/utils/models/gamedata/StoryReviewTable.py @@ -6,9 +6,9 @@ from msgspec import field class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class StoryDataConditionStageCondition(BaseStruct): @@ -40,7 +40,7 @@ class StoryReviewInfoClientData(BaseStruct): class StoryReviewGroupClientData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") name: str entryType: str actType: str @@ -60,6 +60,6 @@ class StoryReviewGroupClientData(BaseStruct): class StoryReviewTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" storyreviewtable: Dict[str, StoryReviewGroupClientData] diff --git a/ArknightsUID/utils/models/gamedata/StoryTable.py b/ArknightsUID/utils/models/gamedata/StoryTable.py index 2036a08..0ff339d 100644 --- a/ArknightsUID/utils/models/gamedata/StoryTable.py +++ b/ArknightsUID/utils/models/gamedata/StoryTable.py @@ -6,7 +6,7 @@ from msgspec import field class StoryDataTrigger(BaseStruct): - type_: str = field(name='type') + type_: str = field(name="type") key: Union[str, None] useRegex: bool @@ -27,13 +27,13 @@ class StoryDataCondition(BaseStruct): class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class StoryData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") needCommit: bool repeatable: bool disabled: bool @@ -46,6 +46,6 @@ class StoryData(BaseStruct): class StoryTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" stories: Dict[str, StoryData] diff --git a/ArknightsUID/utils/models/gamedata/TechBuffTable.py b/ArknightsUID/utils/models/gamedata/TechBuffTable.py index 0b6e7bb..120a968 100644 --- a/ArknightsUID/utils/models/gamedata/TechBuffTable.py +++ b/ArknightsUID/utils/models/gamedata/TechBuffTable.py @@ -27,7 +27,7 @@ class RuneData(BaseStruct): class PackedRuneData(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") points: float mutexGroupKey: Union[str, None] description: str @@ -35,6 +35,6 @@ class PackedRuneData(BaseStruct): class TechBuffTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" runes: List[PackedRuneData] diff --git a/ArknightsUID/utils/models/gamedata/TipTable.py b/ArknightsUID/utils/models/gamedata/TipTable.py index c83c3a4..112b540 100644 --- a/ArknightsUID/utils/models/gamedata/TipTable.py +++ b/ArknightsUID/utils/models/gamedata/TipTable.py @@ -17,7 +17,7 @@ class WorldViewTip(BaseStruct): class TipTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" tips: List[TipData] worldViewTips: List[WorldViewTip] diff --git a/ArknightsUID/utils/models/gamedata/TokenTable.py b/ArknightsUID/utils/models/gamedata/TokenTable.py index deed925..dcb9b7e 100644 --- a/ArknightsUID/utils/models/gamedata/TokenTable.py +++ b/ArknightsUID/utils/models/gamedata/TokenTable.py @@ -32,7 +32,7 @@ class CharacterDataTraitDataBundle(BaseStruct): class AttributesData(BaseStruct): maxHp: int atk: int - def_: int = field(name='def') + def_: int = field(name="def") magicResistance: float cost: int blockCnt: int @@ -61,9 +61,9 @@ class CharacterDataAttributesKeyFrame(BaseStruct): class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class CharacterDataPhaseData(BaseStruct): @@ -124,7 +124,7 @@ class ExternalBuff(BaseStruct): class CharacterDataPotentialRank(BaseStruct): - type_: int = field(name='type') + type_: int = field(name="type") description: str buff: Union[ExternalBuff, None] equivalentCost: Union[ItemBundle, None] @@ -171,6 +171,6 @@ class TokenCharacterData(BaseStruct): class TokenTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" tokens: Dict[str, TokenCharacterData] diff --git a/ArknightsUID/utils/models/gamedata/UniequipData.py b/ArknightsUID/utils/models/gamedata/UniequipData.py index 1bd731c..1b6b5b5 100644 --- a/ArknightsUID/utils/models/gamedata/UniequipData.py +++ b/ArknightsUID/utils/models/gamedata/UniequipData.py @@ -6,9 +6,9 @@ from msgspec import field class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class UnlockCondition(BaseStruct): @@ -39,7 +39,7 @@ class UniEquipData(BaseStruct): unlockFavorPercent: int missionList: List[str] itemCost: Union[List[ItemBundle], None] - type_: str = field(name='type') + type_: str = field(name="type") traitDescBundle: List[TraitDescBundle] @@ -59,7 +59,7 @@ class SubProfessionData(BaseStruct): class UniequipData(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" equipDict: Dict[str, UniEquipData] missionList: Dict[str, UniEquipMissionData] diff --git a/ArknightsUID/utils/models/gamedata/UniequipTable.py b/ArknightsUID/utils/models/gamedata/UniequipTable.py index a4bcc4a..404a68f 100644 --- a/ArknightsUID/utils/models/gamedata/UniequipTable.py +++ b/ArknightsUID/utils/models/gamedata/UniequipTable.py @@ -6,9 +6,9 @@ from msgspec import field class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class UniEquipData(BaseStruct): @@ -29,7 +29,7 @@ class UniEquipData(BaseStruct): unlockFavorPoint: int missionList: List[str] itemCost: Union[Dict[str, List[ItemBundle]], None] - type_: str = field(name='type') + type_: str = field(name="type") uniEquipGetTime: int charEquipOrder: int @@ -61,7 +61,7 @@ class UniEquipTimeInfo(BaseStruct): class UniEquipTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" equipDict: Dict[str, UniEquipData] missionList: Dict[str, UniEquipMissionData] diff --git a/ArknightsUID/utils/models/gamedata/ZoneTable.py b/ArknightsUID/utils/models/gamedata/ZoneTable.py index 8671f2c..36af17c 100644 --- a/ArknightsUID/utils/models/gamedata/ZoneTable.py +++ b/ArknightsUID/utils/models/gamedata/ZoneTable.py @@ -8,7 +8,7 @@ from msgspec import field class ZoneData(BaseStruct): zoneID: str zoneIndex: int - type_: str = field(name='type') + type_: str = field(name="type") zoneNameFirst: Union[str, None] zoneNameSecond: Union[str, None] zoneNameTitleCurrent: Union[str, None] @@ -21,7 +21,7 @@ class ZoneData(BaseStruct): class WeeklyZoneData(BaseStruct): daysOfWeek: List[int] - type_: str = field(name='type') + type_: str = field(name="type") class ZoneValidInfo(BaseStruct): @@ -47,9 +47,9 @@ class MainlineZoneData(BaseStruct): class ItemBundle(BaseStruct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class RecordRewardInfo(BaseStruct): @@ -101,7 +101,7 @@ class ZoneMetaData(BaseStruct): class ZoneTable(BaseStruct): - __version__ = '24-02-02-10-18-07-831ad8' + __version__ = "24-02-02-10-18-07-831ad8" zones: Dict[str, ZoneData] weeklyAdditionInfo: Dict[str, WeeklyZoneData] diff --git a/ArknightsUID/utils/models/skland/models.py b/ArknightsUID/utils/models/skland/models.py index 16309fc..bbcb908 100644 --- a/ArknightsUID/utils/models/skland/models.py +++ b/ArknightsUID/utils/models/skland/models.py @@ -6,8 +6,8 @@ from msgspec import Struct, field # ArknightsAttendanceCalendar Start ################ class ArknightsAttendanceAwardResource(Struct): - id_: str = field(name='id') - type_: str = field(name='type') + id_: str = field(name="id") + type_: str = field(name="type") name: str rarity: int @@ -15,13 +15,13 @@ class ArknightsAttendanceAwardResource(Struct): class ArknightsAttendanceRecord(Struct): ts: str resourceId: str - type_: str = field(name='type') + type_: str = field(name="type") count: int class ArknightsAttendanceCalendar(Struct): resourceId: str - type_: str = field(name='type') + type_: str = field(name="type") count: int available: bool done: bool @@ -40,7 +40,7 @@ class ArknightsAttendanceCalendarModel(Struct): class ArknightsAttendanceAward(Struct): resource: ArknightsAttendanceAwardResource count: int - type_: str = field(name='type') + type_: str = field(name="type") class ArknightsAttendanceModel(Struct): @@ -69,7 +69,7 @@ class UserMeModerator(Struct): class UserGameStatusAp(Struct): current: int - max_: int = field(name='max') + max_: int = field(name="max") lastApAddTime: int completeRecoveryTime: int @@ -80,8 +80,8 @@ class UserGameStatusSecretary(Struct): class UserGameStatusAvatar(Struct): - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") class UserGameStatus(Struct): @@ -113,7 +113,7 @@ class UserMeInfoRts(Struct): class UserMeInfo(Struct): - id_: str = field(name='id') + id_: str = field(name="id") nickname: str profile: str avatarCode: int @@ -152,7 +152,7 @@ class ArknightsUserMeModel(Struct, omit_defaults=True): class PlayerManufactureFormulaInfo(Struct): - id_: str = field(name='id') + id_: str = field(name="id") itemId: str count: int weight: int @@ -161,7 +161,7 @@ class PlayerManufactureFormulaInfo(Struct): class PlayerEquipmentInfo(Struct): - id_: str = field(name='id') + id_: str = field(name="id") name: str typeIcon: str shiningColor: str @@ -170,7 +170,7 @@ class PlayerEquipmentInfo(Struct): class PlayerCampaignZoneInfo(Struct): - id_: str = field(name='id') + id_: str = field(name="id") name: str @@ -179,19 +179,19 @@ class PlayerMedalInfo(Struct): class PlayerCampaignInfo(Struct): - id_: str = field(name='id') + id_: str = field(name="id") name: str campaignZoneId: str class PlayerRogueInfo(Struct): - id_: str = field(name='id') + id_: str = field(name="id") name: str sort: int class PlayerTowerInfo(Struct): - id_: str = field(name='id') + id_: str = field(name="id") name: str subName: str hasHard: Union[bool, None] = None @@ -199,28 +199,28 @@ class PlayerTowerInfo(Struct): class PlayerZoneInfo(Struct): - id_: str = field(name='id') + id_: str = field(name="id") name: str class PlayerActivityInfo(Struct): - id_: str = field(name='id') + id_: str = field(name="id") name: str startTime: int endTime: int rewardEndTime: int isReplicate: bool - type_: str = field(name='type') + type_: str = field(name="type") class PlayerStageInfo(Struct): - id_: str = field(name='id') + id_: str = field(name="id") code: str name: str class PlayerSkinInfo(Struct): - id_: str = field(name='id') + id_: str = field(name="id") brandId: str sortId: int displayTagId: str @@ -235,7 +235,7 @@ class PlayerSkinInfo(Struct): class PlayerCharInfo(Struct): - id_: str = field(name='id') + id_: str = field(name="id") name: str nationId: str groupId: str @@ -262,7 +262,7 @@ class PlayerActivity(Struct): actId: str actReplicaId: str zones: List[ActivityZone] - type_: Union[str, None] = field(name='type', default=None) + type_: Union[str, None] = field(name="type", default=None) class RewoardItem(Struct): @@ -451,14 +451,14 @@ class BuildingDormitories(Struct): class BuildingStockDelivery(Struct): - id_: str = field(name='id') + id_: str = field(name="id") count: int - type_: str = field(name='type') + type_: str = field(name="type") class BuildingStock(Struct): instId: int - type_: str = field(name='type') + type_: str = field(name="type") delivery: List[BuildingStockDelivery] gain: BuildingStockDelivery isViolated: bool @@ -522,17 +522,17 @@ class PlayerBuilding(Struct): class PlayerInfoSkin(Struct): - id_: str = field(name='id') + id_: str = field(name="id") ts: int class PlayerInfoCharSkill(Struct): - id_: str = field(name='id') + id_: str = field(name="id") specializeLevel: int class PlayerInfoCharEquip(Struct): - id_: str = field(name='id') + id_: str = field(name="id") level: int @@ -552,7 +552,7 @@ class PlayerInfoChar(Struct): class PlayerAssistCharEquip(Struct): - id_: str = field(name='id') + id_: str = field(name="id") level: int @@ -569,7 +569,7 @@ class PlayerAssistChar(Struct): class PlayerMedal(Struct): - type_: str = field(name='type') + type_: str = field(name="type") template: str templateMedalList: List[str] customMedalLayout: List[Union[str, None]] @@ -589,8 +589,8 @@ class PlayerStatusSecretary(Struct): class PlayerStatusAvatar(Struct): - type_: str = field(name='type') - id_: str = field(name='id') + type_: str = field(name="type") + id_: str = field(name="id") class PlayerStatus(Struct): diff --git a/ArknightsUID/utils/resource/RESOURCE_PATH.py b/ArknightsUID/utils/resource/RESOURCE_PATH.py index 2efadc6..30f67bf 100644 --- a/ArknightsUID/utils/resource/RESOURCE_PATH.py +++ b/ArknightsUID/utils/resource/RESOURCE_PATH.py @@ -2,26 +2,26 @@ import sys from gsuid_core.data_store import get_res_path -MAIN_PATH = get_res_path() / 'ArknightsUID' +MAIN_PATH = get_res_path() / "ArknightsUID" sys.path.append(str(MAIN_PATH)) -CU_BG_PATH = MAIN_PATH / 'bg' -CONFIG_PATH = MAIN_PATH / 'config.json' -PLAYER_PATH = MAIN_PATH / 'players' -RESOURCE_PATH = MAIN_PATH / 'resource' +CU_BG_PATH = MAIN_PATH / "bg" +CONFIG_PATH = MAIN_PATH / "config.json" +PLAYER_PATH = MAIN_PATH / "players" +RESOURCE_PATH = MAIN_PATH / "resource" -GAMEDATA_PATH = RESOURCE_PATH / 'gamedata' +GAMEDATA_PATH = RESOURCE_PATH / "gamedata" -CHAR_AVATAR_PATH = RESOURCE_PATH / 'char_avatar' -CHARARTS_PATH = RESOURCE_PATH / 'chararts' -MEDAL_DIY_FRAME_BKG_PATH = RESOURCE_PATH / 'medal_diy_frame_bkg' -MEDAL_ICONS_PATH = RESOURCE_PATH / 'medal_icons' -PLAYER_AVATAR_LIST = RESOURCE_PATH / 'player_avatar_list' -SKILL_ICONS_PATH = RESOURCE_PATH / 'skill_icons' -SKINPACK_PATH = RESOURCE_PATH / 'skinpack' -SUB_PROFESSION_ICON_PATH = RESOURCE_PATH / 'sub_profession_icon' -TEAM_ICON_PATH = RESOURCE_PATH / 'team_icon' +CHAR_AVATAR_PATH = RESOURCE_PATH / "char_avatar" +CHARARTS_PATH = RESOURCE_PATH / "chararts" +MEDAL_DIY_FRAME_BKG_PATH = RESOURCE_PATH / "medal_diy_frame_bkg" +MEDAL_ICONS_PATH = RESOURCE_PATH / "medal_icons" +PLAYER_AVATAR_LIST = RESOURCE_PATH / "player_avatar_list" +SKILL_ICONS_PATH = RESOURCE_PATH / "skill_icons" +SKINPACK_PATH = RESOURCE_PATH / "skinpack" +SUB_PROFESSION_ICON_PATH = RESOURCE_PATH / "sub_profession_icon" +TEAM_ICON_PATH = RESOURCE_PATH / "team_icon" def init_dir(): diff --git a/ArknightsUID/utils/resource/download_all_resource.py b/ArknightsUID/utils/resource/download_all_resource.py index c7f549b..34b1bc1 100644 --- a/ArknightsUID/utils/resource/download_all_resource.py +++ b/ArknightsUID/utils/resource/download_all_resource.py @@ -7,5 +7,5 @@ async def download_all_resource(): ret = await asyncio.gather(download_all_file_from_cos()) ret = [str(x) for x in ret if x] if ret: - return '\n'.join(ret) - return 'arknights全部资源下载完成!' + return "\n".join(ret) + return "arknights全部资源下载完成!" diff --git a/ArknightsUID/utils/resource/download_from_cos.py b/ArknightsUID/utils/resource/download_from_cos.py index 953d5b2..3186ab9 100644 --- a/ArknightsUID/utils/resource/download_from_cos.py +++ b/ArknightsUID/utils/resource/download_from_cos.py @@ -16,17 +16,17 @@ from .RESOURCE_PATH import ( async def download_all_file_from_cos(): await download_all_file( - 'ArknightsUID', + "ArknightsUID", { - 'resource/gamedata': GAMEDATA_PATH, - 'resource/char_avatar': CHAR_AVATAR_PATH, - 'resource/chararts': CHARARTS_PATH, - 'resource/medal_diy_frame_bkg': MEDAL_DIY_FRAME_BKG_PATH, - 'resource/medal_icons': MEDAL_ICONS_PATH, - 'resource/player_avatar_list': PLAYER_AVATAR_LIST, - 'resource/skill_icons': SKILL_ICONS_PATH, - 'resource/skinpack': SKINPACK_PATH, - 'resource/sub_profession_icon': SUB_PROFESSION_ICON_PATH, - 'resource/team_icon': TEAM_ICON_PATH, + "resource/gamedata": GAMEDATA_PATH, + "resource/char_avatar": CHAR_AVATAR_PATH, + "resource/chararts": CHARARTS_PATH, + "resource/medal_diy_frame_bkg": MEDAL_DIY_FRAME_BKG_PATH, + "resource/medal_icons": MEDAL_ICONS_PATH, + "resource/player_avatar_list": PLAYER_AVATAR_LIST, + "resource/skill_icons": SKILL_ICONS_PATH, + "resource/skinpack": SKINPACK_PATH, + "resource/sub_profession_icon": SUB_PROFESSION_ICON_PATH, + "resource/team_icon": TEAM_ICON_PATH, }, ) diff --git a/ArknightsUID/version.py b/ArknightsUID/version.py index d7b75fd..c74c966 100644 --- a/ArknightsUID/version.py +++ b/ArknightsUID/version.py @@ -1,3 +1,3 @@ -ArknightsUID_version = '0.1.0' -Arknights_Client_version = '2.2.01' -Arknights_Res_version = '24-02-02-10-18-07-831ad8' +ArknightsUID_version = "0.1.0" +Arknights_Client_version = "2.2.21" +Arknights_Res_version = "24-03-06-07-46-40-d13e0f" diff --git a/pyproject.toml b/pyproject.toml index ef47c21..81c7d39 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -56,10 +56,32 @@ pythonVersion = "3.8" pythonPlatform = "All" [tool.ruff] -select = ["E", "W", "F", "UP", "C", "T", "PYI", "PT", "Q"] -ignore = ["C901", "Q000", "Q003"] -line-length = 108 +line-length = 88 target-version = "py38" -[tool.ruff.format] -quote-style = "single" +[tool.ruff.lint] +select = [ + "F", # Pyflakes + "W", # pycodestyle warnings + "E", # pycodestyle errors + "UP", # pyupgrade + "ASYNC", # flake8-async + "C4", # flake8-comprehensions + "T10", # flake8-debugger + "T20", # flake8-print + "PYI", # flake8-pyi + "PT", # flake8-pytest-style + "Q", # flake8-quotes + "RUF", # Ruff-specific rules +] +ignore = [ + "E402", # module-import-not-at-top-of-file + "UP037", # quoted-annotation + "RUF001", # ambiguous-unicode-character-string + "RUF002", # ambiguous-unicode-character-docstring + "RUF003", # ambiguous-unicode-character-comment +] + +[tool.ruff.lint.flake8-pytest-style] +fixture-parentheses = false +mark-parentheses = false