ruff format

This commit is contained in:
qwerdvd 2023-12-04 12:49:55 +08:00
parent 16cb44591c
commit 7653a3b705
No known key found for this signature in database
GPG Key ID: A3AF89C783404769
75 changed files with 741 additions and 717 deletions

View File

@ -53,9 +53,7 @@ async def get_ap_img(bot_id: str, user_id: str):
return '请先绑定一个可用CRED & UID再来查询哦~' return '请先绑定一个可用CRED & UID再来查询哦~'
# 开始绘图任务 # 开始绘图任务
task = [] task = []
img = Image.new( img = Image.new('RGBA', (based_w * len(useable_uid_list), based_h), (0, 0, 0, 0))
'RGBA', (based_w * len(useable_uid_list), based_h), (0, 0, 0, 0)
)
for uid_index, uid in enumerate(useable_uid_list): for uid_index, uid in enumerate(useable_uid_list):
task.append(_draw_all_ap_img(img, uid, uid_index)) task.append(_draw_all_ap_img(img, uid, uid_index))
await asyncio.gather(*task) await asyncio.gather(*task)
@ -514,7 +512,6 @@ async def draw_ap_img(uid: str) -> Image.Image:
) )
img.paste(blue_bar_bg1_img, (-20, 1570), blue_bar_bg1_img) img.paste(blue_bar_bg1_img, (-20, 1570), blue_bar_bg1_img)
img_draw = ImageDraw.Draw(img) img_draw = ImageDraw.Draw(img)
img_draw.text( img_draw.text(
(425, 1710), (425, 1710),

View File

@ -1,4 +1,5 @@
from typing import Dict from typing import Dict
from gsuid_core.gss import gss from gsuid_core.gss import gss
from gsuid_core.logger import logger from gsuid_core.logger import logger
@ -52,7 +53,8 @@ async def all_check(
if arkconfig.get_config('CrazyNotice').data: if arkconfig.get_config('CrazyNotice').data:
if not await check(mode, raw_data, push_data[f'{mode}_value']): if not await check(mode, raw_data, push_data[f'{mode}_value']):
await ArknightsPush.update_push_data( await ArknightsPush.update_push_data(
uid, {f'{mode}_is_push': False} uid,
{f'{mode}_is_push': False},
) )
continue continue
# 准备推送 # 准备推送

View File

@ -11,5 +11,5 @@ def seconds2hours_zhcn(seconds: int) -> str:
def now_ap(ap: PlayerStatusAp) -> int: def now_ap(ap: PlayerStatusAp) -> int:
_ap = ap.current + math.floor((datetime.now().timestamp() - ap.lastApAddTime) / 360) _ap = ap.current + math.floor((datetime.now().timestamp() - ap.lastApAddTime) / 360)
return _ap if _ap <= ap.max else ap.max return _ap if _ap <= ap.max else ap.max

View File

@ -9,7 +9,7 @@ from gsuid_core.utils.error_reply import UID_HINT
from ..utils.database.models import ArknightsBind from ..utils.database.models import ArknightsBind
from .set_config import set_config_func, set_push_value 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配置", "方舟配置")) # @sv_self_config.on_fullmatch(("ark配置", "方舟配置"))
@ -19,46 +19,46 @@ sv_self_config = SV("ark配置")
# await bot.send(im) # 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): 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) uid = await ArknightsBind.get_uid_by_game(ev.user_id, bot.bot_id)
if uid is None: if uid is None:
return await bot.send(UID_HINT) return await bot.send(UID_HINT)
func = "".join(re.findall("[\u4e00-\u9fa5]", ev.text.replace("阈值", ""))) func = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text.replace('阈值', '')))
value = re.findall(r"\d+", ev.text) value = re.findall(r'\d+', ev.text)
value = value[0] if value else None value = value[0] if value else None
if value is 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)) im = await set_push_value(ev.bot_id, func, uid, int(value))
await bot.send(im) 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): async def open_switch_func(bot: Bot, ev: Event):
user_id = ev.user_id user_id = ev.user_id
config_name = ev.text 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 query = True
gid = ev.group_id if ev.group_id else "on" gid = ev.group_id if ev.group_id else 'on'
else: else:
query = False query = False
gid = "off" gid = 'off'
is_admin = ev.user_pm <= 2 is_admin = ev.user_pm <= 2
if ev.at and is_admin: if ev.at and is_admin:
user_id = ev.at user_id = ev.at
elif 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) uid = await ArknightsBind.get_uid_by_game(ev.user_id, bot.bot_id)
if uid is None: if uid is None:

View File

@ -7,12 +7,13 @@ from .ark_config import arkconfig
from .config_default import CONIFG_DEFAULT from .config_default import CONIFG_DEFAULT
PUSH_MAP = { PUSH_MAP = {
"理智": "ap", '理智': 'ap',
"训练室": "train", '训练室': 'train',
'版本更新': 'version',
} }
PRIV_MAP = { PRIV_MAP = {
"自动签到": "sign", '自动签到': 'sign',
"推送": "push", '推送': 'push',
} }
@ -20,20 +21,20 @@ async def set_push_value(bot_id: str, func: str, uid: str, value: int):
if func in PUSH_MAP: if func in PUSH_MAP:
status = PUSH_MAP[func] status = PUSH_MAP[func]
else: else:
return "该配置项不存在!" return '该配置项不存在!'
logger.info(f"[设置推送阈值]func: {status}, value: {value}") logger.info(f'[设置推送阈值]func: {status}, value: {value}')
if await ArknightsPush.update_push_data(uid, {f"{status}_value": value}): if await ArknightsPush.update_push_data(uid, {f'{status}_value': value}):
return f"设置成功!\n当前{func}推送阈值:{value}" return f'设置成功!\n当前{func}推送阈值:{value}'
else: else:
return "设置失败!\n请检查参数是否正确!" return '设置失败!\n请检查参数是否正确!'
async def set_config_func( async def set_config_func(
bot_id: str, bot_id: str,
config_name: str = "", config_name: str = '',
uid: str = "0", uid: str = '0',
user_id: str = "", user_id: str = '',
option: str = "0", option: str = '0',
query: Optional[bool] = None, query: Optional[bool] = None,
is_admin: bool = False, is_admin: bool = False,
): ):
@ -45,17 +46,17 @@ async def set_config_func(
break break
else: else:
logger.info( 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: if config_name in PRIV_MAP:
# 执行设置 # 执行设置
await ArknightsUser.update_user_data( await ArknightsUser.update_user_data(
uid, 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( await ArknightsPush.update_push_data(
uid, uid,
{ {
@ -63,24 +64,24 @@ async def set_config_func(
}, },
) )
else: else:
return "该配置项不存在!" return '该配置项不存在!'
if option == "on": if option == 'on':
succeed_msg = "开启至私聊消息!" succeed_msg = '开启至私聊消息!'
elif option == "off": elif option == 'off':
succeed_msg = "关闭!" succeed_msg = '关闭!'
else: else:
succeed_msg = f"开启至群{option}" succeed_msg = f'开启至群{option}'
return f"{config_name}{succeed_msg}" return f'{config_name}{succeed_msg}'
if is_admin: 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: if query is not None:
arkconfig.set_config(name, query) arkconfig.set_config(name, query)
im = "成功设置{}{}".format(config_name, "" if query else "") im = '成功设置{}{}'.format(config_name, '' if query else '')
else: else:
im = "未传入参数query!" im = '未传入参数query!'
else: else:
im = "只有管理员才能设置群服务。" im = '只有管理员才能设置群服务。'
return im return im

View File

@ -18,7 +18,8 @@ async def get_help_data() -> Union[Dict[str, PluginHelp], None]:
if HELP_DATA.exists(): 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( return msgjson.decode(
await file.read(), type=Dict[str, PluginHelp], await file.read(),
type=Dict[str, PluginHelp],
) )
@ -37,7 +38,8 @@ async def get_core_help() -> Union[bytes, str]:
Image.open(TEXT_PATH / 'banner.png'), Image.open(TEXT_PATH / 'banner.png'),
Image.open(TEXT_PATH / 'button.png'), Image.open(TEXT_PATH / 'button.png'),
source_han_sans_cn_origin, source_han_sans_cn_origin,
extra_message = [f'Client Version:{Arknights_Client_version} ' extra_message=[
f' Res version: {Arknights_Res_version}'], f'Client Version:{Arknights_Client_version} ' f' Res version: {Arknights_Res_version}'
],
) )
return img return img

View File

@ -0,0 +1,137 @@
# import asyncio
# import json
# from typing import Dict
# import aiohttp
# from gsuid_core.aps import scheduler
# from gsuid_core.bot import Bot
# from gsuid_core.gss import gss
# from gsuid_core.logger import logger
# from gsuid_core.models import Event
# from gsuid_core.segment import MessageSegment
# from gsuid_core.sv import SV
# from msgspec import Struct, convert
# from ..utils.ark_prefix import PREFIX
# from ..utils.database.models import (
# ArknightsPush,
# ArknightsUser,
# )
# from ..version import Arknights_Client_version, Arknights_Res_version
# sv_get_version = SV('ark查询版本')
# sv_get_version_admin = SV('ark推送版本更新', pm=1)
# @sv_get_version_admin.on_fullmatch((f'{PREFIX}开启推送版本更新')) # noqa: UP034
# async def force_version_job(bot: Bot, ev: Event):
# await bot.logger.info('开始执行[ark推送版本更新]')
# await ark_version_job()
# class ArkVersion(Struct):
# clientVersion: str
# resVersion: str
# async def get_notice_list(im: list[str]) -> Dict[str, Dict[str, Dict]]:
# msg_dict: Dict[str, Dict[str, Dict]] = {}
# for _bot_id in gss.active_bot:
# user_list = await ArknightsUser.get_all_push_user_list()
# print(user_list)
# for user in user_list:
# if user.uid is not None:
# push_data = await ArknightsPush.select_push_data(user.uid)
# print(push_data)
# if push_data is None:
# continue
# if push_data.version_push is False:
# pass
# else:
# if user.bot_id not in msg_dict:
# msg_dict[user.bot_id] = {'direct': {}, 'group': {}}
# if push_data.version_push:
# # 添加私聊信息
# if user.user_id not in msg_dict[user.bot_id]['direct']:
# msg_dict[user.bot_id]['direct'][user.user_id] = im
# else:
# msg_dict[user.bot_id]['direct'][user.user_id] += im
# await ArknightsPush.update_push_data(
# user.uid, {'version_is_push': True}
# )
# # 群号推送到群聊
# else:
# # 初始化
# gid = push_data.version_push
# if gid not in msg_dict[user.bot_id]['group']:
# msg_dict[user.bot_id]['group'][gid] = {}
# if (
# user.user_id
# not in msg_dict[user.bot_id]['group'][gid]
# ):
# msg_dict[user.bot_id]['group'][gid][
# user.user_id
# ] = im
# else:
# msg_dict[user.bot_id]['group'][gid][
# user.user_id
# ] += im
# await ArknightsPush.update_push_data(
# user.uid, {'version_is_push': True}
# )
# return msg_dict
# async def get_resVersion():
# async with aiohttp.ClientSession() as session:
# async with session.get(
# "https://ak-conf.hypergryph.com/config/prod/official/Android/version"
# ) as response:
# version = convert(json.loads(await response.text()), ArkVersion)
# if (
# version.clientVersion != Arknights_Client_version
# and version.resVersion != Arknights_Res_version
# ):
# im = []
# im.append(MessageSegment.text("检测到明日方舟版本更新!"))
# im.append(
# MessageSegment.text(f"客户端版本号:{version.clientVersion}")
# )
# im.append(MessageSegment.text(f"资源版本号:{version.resVersion}"))
# return im
# logger.info("Version no update")
# @scheduler.scheduled_job('interval', seconds=3)
# async def ark_version_job():
# im = await get_resVersion()
# im = ['test']
# if im is not None:
# result = await get_notice_list(im)
# 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, '', ''
# )
# await asyncio.sleep(0.5)
# logger.info('[ark更新检查] 私聊推送完成')
# for gid in result[bot_id]['group']:
# msg_list = []
# 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_list.append(MessageSegment.text(msg))
# await bot.target_send(
# msg_list, 'group', gid, bot_id, '', ''
# )
# await asyncio.sleep(0.5)
# logger.info('[ark更新检查] 群聊推送完成')

View File

@ -13,27 +13,25 @@ from gsuid_core.sv import SV
from .constants import Excel from .constants import Excel
from .memoryStore import store from .memoryStore import store
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): async def send_download_resource_msg(bot: Bot, ev: Event):
await bot.send("正在开始下载~可能需要较久的时间!") await bot.send('正在开始下载~可能需要较久的时间!')
im = await download_all_resource() im = await download_all_resource()
await bot.send(im) await bot.send(im)
async def startup(): async def startup():
logger.info("[资源文件下载] 正在检查与下载缺失的资源文件, 可能需要较长时间, 请稍等") logger.info('[资源文件下载] 正在检查与下载缺失的资源文件, 可能需要较长时间, 请稍等')
await download_all_resource() await download_all_resource()
logger.info("[资源文件下载] 检查完毕, 正在加载 gamedata") logger.info('[资源文件下载] 检查完毕, 正在加载 gamedata')
TASK = [] TASK = []
for file_path in Path( for file_path in Path(get_res_path(['ArknightsUID', 'resource', 'gamedata'])).glob('*.json'):
get_res_path(["ArknightsUID", "resource", "gamedata"])
).glob("*.json"):
TASK.append(store.get_file(file_path)) TASK.append(store.get_file(file_path))
asyncio.gather(*TASK) asyncio.gather(*TASK)
await Excel.preload_table() await Excel.preload_table()
logger.info("[资源文件下载] gamedata 加载完毕") logger.info('[资源文件下载] gamedata 加载完毕')

View File

@ -103,18 +103,14 @@ class ExcelTableManager:
zone_table_: ZoneTable zone_table_: ZoneTable
async def activity_table(self) -> None: async def activity_table(self) -> None:
self.activity_table_ = ActivityTable.convert( self.activity_table_ = ActivityTable.convert(await store.get_excel('activity_table'))
await store.get_excel("activity_table")
)
@property @property
def ACTIVITY_TABLE(self) -> ActivityTable: def ACTIVITY_TABLE(self) -> ActivityTable:
return self.activity_table_ return self.activity_table_
async def audio_data(self) -> None: async def audio_data(self) -> None:
self.audio_data_ = AudioData.convert( self.audio_data_ = AudioData.convert(await store.get_excel('audio_data'))
await store.get_excel("audio_data")
)
@property @property
def AUDIO_DATA(self) -> AudioData: def AUDIO_DATA(self) -> AudioData:
@ -122,7 +118,7 @@ class ExcelTableManager:
async def battle_equip_table(self) -> None: async def battle_equip_table(self) -> None:
self.battle_equip_table_ = BattleEquipTable.convert( self.battle_equip_table_ = BattleEquipTable.convert(
{"equips": await store.get_excel("battle_equip_table")} {'equips': await store.get_excel('battle_equip_table')}
) )
@property @property
@ -130,124 +126,98 @@ class ExcelTableManager:
return self.battle_equip_table_ return self.battle_equip_table_
async def building_data(self) -> None: async def building_data(self) -> None:
self.building_data_ = BuildingData.convert( self.building_data_ = BuildingData.convert(await store.get_excel('building_data'))
await store.get_excel("building_data")
)
@property @property
def BUILDING_DATA(self) -> BuildingData: def BUILDING_DATA(self) -> BuildingData:
return self.building_data_ return self.building_data_
async def campaign_table(self) -> None: async def campaign_table(self) -> None:
self.campaign_table_ = CampaignTable.convert( self.campaign_table_ = CampaignTable.convert(await store.get_excel('campaign_table'))
await store.get_excel("campaign_table")
)
@property @property
def CAMPAIGN_TABLE(self) -> CampaignTable: def CAMPAIGN_TABLE(self) -> CampaignTable:
return self.campaign_table_ return self.campaign_table_
async def chapter_table(self) -> None: async def chapter_table(self) -> None:
self.chapter_table_ = ChapterTable.convert( self.chapter_table_ = ChapterTable.convert({'chapters': await store.get_excel('chapter_table')})
{"chapters": await store.get_excel("chapter_table")}
)
@property @property
def CHAPTER_TABLE(self) -> ChapterTable: def CHAPTER_TABLE(self) -> ChapterTable:
return self.chapter_table_ return self.chapter_table_
async def character_table(self) -> None: async def character_table(self) -> None:
self.character_table_ = CharacterTable.convert( self.character_table_ = CharacterTable.convert({'chars': await store.get_excel('character_table')})
{"chars": await store.get_excel("character_table")}
)
@property @property
def CHARATER_TABLE(self) -> CharacterTable: def CHARATER_TABLE(self) -> CharacterTable:
return self.character_table_ return self.character_table_
async def char_meta_table(self) -> None: async def char_meta_table(self) -> None:
self.char_meta_table_ = CharMetaTable.convert( self.char_meta_table_ = CharMetaTable.convert(await store.get_excel('char_meta_table'))
await store.get_excel("char_meta_table")
)
@property @property
def CHAR_META_TABLE(self) -> CharMetaTable: def CHAR_META_TABLE(self) -> CharMetaTable:
return self.char_meta_table_ return self.char_meta_table_
async def charm_table(self) -> None: async def charm_table(self) -> None:
self.charm_table_ = CharmTable.convert( self.charm_table_ = CharmTable.convert(await store.get_excel('charm_table'))
await store.get_excel("charm_table")
)
@property @property
def CHARM_TABLE(self) -> CharmTable: def CHARM_TABLE(self) -> CharmTable:
return self.charm_table_ return self.charm_table_
async def char_patch_table(self) -> None: async def char_patch_table(self) -> None:
self.char_patch_table_ = CharPatchTable.convert( self.char_patch_table_ = CharPatchTable.convert(await store.get_excel('char_patch_table'))
await store.get_excel("char_patch_table")
)
@property @property
def CHAR_PATH_TABLE(self) -> CharPatchTable: def CHAR_PATH_TABLE(self) -> CharPatchTable:
return self.char_patch_table_ return self.char_patch_table_
async def charword_table(self) -> None: async def charword_table(self) -> None:
self.charword_table_ = CharwordTable.convert( self.charword_table_ = CharwordTable.convert(await store.get_excel('charword_table'))
await store.get_excel("charword_table")
)
@property @property
def CHARWORD_TABLE(self) -> CharwordTable: def CHARWORD_TABLE(self) -> CharwordTable:
return self.charword_table_ return self.charword_table_
async def checkin_table(self) -> None: async def checkin_table(self) -> None:
self.checkin_table_ = CheckinTable.convert( self.checkin_table_ = CheckinTable.convert(await store.get_excel('checkin_table'))
await store.get_excel("checkin_table")
)
@property @property
def CHECKIN_TABLE(self) -> CheckinTable: def CHECKIN_TABLE(self) -> CheckinTable:
return self.checkin_table_ return self.checkin_table_
async def climb_tower_table(self) -> None: async def climb_tower_table(self) -> None:
self.climb_tower_table_ = ClimbTowerTable.convert( self.climb_tower_table_ = ClimbTowerTable.convert(await store.get_excel('climb_tower_table'))
await store.get_excel("climb_tower_table")
)
@property @property
def CLIMB_TOWER_TABLE(self) -> ClimbTowerTable: def CLIMB_TOWER_TABLE(self) -> ClimbTowerTable:
return self.climb_tower_table_ return self.climb_tower_table_
async def clue_data(self) -> None: async def clue_data(self) -> None:
self.clue_data_ = ClueData.convert(await store.get_excel("clue_data")) self.clue_data_ = ClueData.convert(await store.get_excel('clue_data'))
@property @property
def CLUE_DATA(self) -> ClueData: def CLUE_DATA(self) -> ClueData:
return self.clue_data_ return self.clue_data_
async def crisis_table(self) -> None: async def crisis_table(self) -> None:
self.crisis_table_ = CrisisTable.convert( self.crisis_table_ = CrisisTable.convert(await store.get_excel('crisis_table'))
await store.get_excel("crisis_table")
)
@property @property
def CRISIS_TABLE(self) -> CrisisTable: def CRISIS_TABLE(self) -> CrisisTable:
return self.crisis_table_ return self.crisis_table_
async def crisis_v2_table(self) -> None: async def crisis_v2_table(self) -> None:
self.crisis_v2_table_ = CrisisV2Table.convert( self.crisis_v2_table_ = CrisisV2Table.convert(await store.get_excel('crisis_v2_table'))
await store.get_excel("crisis_v2_table")
)
@property @property
def CRISIS_V2_TABLE(self) -> CrisisV2Table: def CRISIS_V2_TABLE(self) -> CrisisV2Table:
return self.crisis_v2_table_ return self.crisis_v2_table_
async def display_meta_table(self) -> None: async def display_meta_table(self) -> None:
self.display_meta_table_ = DisplayMetaTable.convert( self.display_meta_table_ = DisplayMetaTable.convert(await store.get_excel('display_meta_table'))
await store.get_excel("display_meta_table")
)
@property @property
def DISPLAY_META_TABLE(self) -> DisplayMetaTable: def DISPLAY_META_TABLE(self) -> DisplayMetaTable:
@ -255,7 +225,7 @@ class ExcelTableManager:
async def enemy_handbook_table(self) -> None: async def enemy_handbook_table(self) -> None:
self.enemy_handbook_table_ = EnemyHandbookTable.convert( self.enemy_handbook_table_ = EnemyHandbookTable.convert(
await store.get_excel("enemy_handbook_table") await store.get_excel('enemy_handbook_table')
) )
@property @property
@ -263,45 +233,35 @@ class ExcelTableManager:
return self.enemy_handbook_table_ return self.enemy_handbook_table_
async def favor_table(self) -> None: async def favor_table(self) -> None:
self.favor_table_ = FavorTable.convert( self.favor_table_ = FavorTable.convert(await store.get_excel('favor_table'))
await store.get_excel("favor_table")
)
@property @property
def FAVOR_TABLE(self) -> FavorTable: def FAVOR_TABLE(self) -> FavorTable:
return self.favor_table_ return self.favor_table_
async def gacha_table(self) -> None: async def gacha_table(self) -> None:
self.gacha_table_ = GachaTable.convert( self.gacha_table_ = GachaTable.convert(await store.get_excel('gacha_table'))
await store.get_excel("gacha_table")
)
@property @property
def GACHA_TABLE(self) -> GachaTable: def GACHA_TABLE(self) -> GachaTable:
return self.gacha_table_ return self.gacha_table_
async def gamedata_const(self) -> None: async def gamedata_const(self) -> None:
self.gamedata_const_ = GamedataConst.convert( self.gamedata_const_ = GamedataConst.convert(await store.get_excel('gamedata_const'))
await store.get_excel("gamedata_const")
)
@property @property
def GAMEDATA_CONST(self) -> GamedataConst: def GAMEDATA_CONST(self) -> GamedataConst:
return self.gamedata_const_ return self.gamedata_const_
async def handbook_info_table(self) -> None: async def handbook_info_table(self) -> None:
self.handbook_info_table_ = HandbookInfoTable.convert( self.handbook_info_table_ = HandbookInfoTable.convert(await store.get_excel('handbook_info_table'))
await store.get_excel("handbook_info_table")
)
@property @property
def HANDBOOK_INFO_TABLE(self) -> HandbookInfoTable: def HANDBOOK_INFO_TABLE(self) -> HandbookInfoTable:
return self.handbook_info_table_ return self.handbook_info_table_
async def handbook_table(self) -> None: async def handbook_table(self) -> None:
self.handbook_table_ = HandbookTable.convert( self.handbook_table_ = HandbookTable.convert(await store.get_excel('handbook_table'))
await store.get_excel("handbook_table")
)
@property @property
def HANDBOOK_TABLE(self) -> HandbookTable: def HANDBOOK_TABLE(self) -> HandbookTable:
@ -309,7 +269,7 @@ class ExcelTableManager:
async def handbook_team_table(self) -> None: async def handbook_team_table(self) -> None:
self.handbook_team_table_ = HandbookTeamTable.convert( self.handbook_team_table_ = HandbookTeamTable.convert(
{"team": await store.get_excel("handbook_team_table")} {'team': await store.get_excel('handbook_team_table')}
) )
@property @property
@ -317,54 +277,42 @@ class ExcelTableManager:
return self.handbook_team_table_ return self.handbook_team_table_
async def item_table(self) -> None: async def item_table(self) -> None:
self.item_table_ = ItemTable.convert( self.item_table_ = ItemTable.convert(await store.get_excel('item_table'))
await store.get_excel("item_table")
)
@property @property
def ITEM_TABLE(self) -> ItemTable: def ITEM_TABLE(self) -> ItemTable:
return self.item_table_ return self.item_table_
async def medal_table(self) -> None: async def medal_table(self) -> None:
self.medal_table_ = MedalTable.convert( self.medal_table_ = MedalTable.convert(await store.get_excel('medal_table'))
await store.get_excel("medal_table")
)
@property @property
def MEDAL_TABLE(self) -> MedalTable: def MEDAL_TABLE(self) -> MedalTable:
return self.medal_table_ return self.medal_table_
async def mission_table(self) -> None: async def mission_table(self) -> None:
self.mission_table_ = MissionTable.convert( self.mission_table_ = MissionTable.convert(await store.get_excel('mission_table'))
await store.get_excel("mission_table")
)
@property @property
def MISSION_TABLE(self) -> MissionTable: def MISSION_TABLE(self) -> MissionTable:
return self.mission_table_ return self.mission_table_
async def open_server_table(self) -> None: async def open_server_table(self) -> None:
self.open_server_table_ = OpenServerTable.convert( self.open_server_table_ = OpenServerTable.convert(await store.get_excel('open_server_table'))
await store.get_excel("open_server_table")
)
@property @property
def OPEN_SERVER_TABLE(self) -> OpenServerTable: def OPEN_SERVER_TABLE(self) -> OpenServerTable:
return self.open_server_table_ return self.open_server_table_
async def player_avatar_table(self) -> None: async def player_avatar_table(self) -> None:
self.player_avatar_table_ = PlayerAvatarTable.convert( self.player_avatar_table_ = PlayerAvatarTable.convert(await store.get_excel('player_avatar_table'))
await store.get_excel("player_avatar_table")
)
@property @property
def PLAYER_AVATAR_TABLE(self) -> PlayerAvatarTable: def PLAYER_AVATAR_TABLE(self) -> PlayerAvatarTable:
return self.player_avatar_table_ return self.player_avatar_table_
async def range_table(self) -> None: async def range_table(self) -> None:
self.range_table_ = RangeTable.convert( self.range_table_ = RangeTable.convert({'range_': await store.get_excel('range_table')})
{"range_": await store.get_excel("range_table")}
)
@property @property
def RANGE_TABLE(self) -> RangeTable: def RANGE_TABLE(self) -> RangeTable:
@ -372,7 +320,7 @@ class ExcelTableManager:
async def replicate_table(self) -> None: async def replicate_table(self) -> None:
self.replicate_table_ = ReplicateTable.convert( self.replicate_table_ = ReplicateTable.convert(
{"replicate": await store.get_excel("replicate_table")} {'replicate': await store.get_excel('replicate_table')}
) )
@property @property
@ -380,18 +328,14 @@ class ExcelTableManager:
return self.replicate_table_ return self.replicate_table_
async def retro_table(self) -> None: async def retro_table(self) -> None:
self.retro_table_ = RetroTable.convert( self.retro_table_ = RetroTable.convert(await store.get_excel('retro_table'))
await store.get_excel("retro_table")
)
@property @property
def RETRO_TABLE(self) -> RetroTable: def RETRO_TABLE(self) -> RetroTable:
return self.retro_table_ return self.retro_table_
async def roguelike_table(self) -> None: async def roguelike_table(self) -> None:
self.roguelike_table_ = RoguelikeTable.convert( self.roguelike_table_ = RoguelikeTable.convert(await store.get_excel('roguelike_table'))
await store.get_excel("roguelike_table")
)
@property @property
def ROGUELIKE_TABLE(self) -> RoguelikeTable: def ROGUELIKE_TABLE(self) -> RoguelikeTable:
@ -399,7 +343,7 @@ class ExcelTableManager:
async def roguelike_topic_table(self) -> None: async def roguelike_topic_table(self) -> None:
self.roguelike_topic_table_ = RoguelikeTopicTable.convert( self.roguelike_topic_table_ = RoguelikeTopicTable.convert(
await store.get_excel("roguelike_topic_table") await store.get_excel('roguelike_topic_table')
) )
@property @property
@ -407,45 +351,35 @@ class ExcelTableManager:
return self.roguelike_topic_table_ return self.roguelike_topic_table_
async def sandbox_table(self) -> None: async def sandbox_table(self) -> None:
self.sandbox_table_ = SandboxTable.convert( self.sandbox_table_ = SandboxTable.convert(await store.get_excel('sandbox_table'))
await store.get_excel("sandbox_table")
)
@property @property
def SANDBOX_TABLE(self) -> SandboxTable: def SANDBOX_TABLE(self) -> SandboxTable:
return self.sandbox_table_ return self.sandbox_table_
async def shop_client_table(self) -> None: async def shop_client_table(self) -> None:
self.shop_client_table_ = ShopClientTable.convert( self.shop_client_table_ = ShopClientTable.convert(await store.get_excel('shop_client_table'))
await store.get_excel("shop_client_table")
)
@property @property
def SHOP_CLIENT_TABLE(self) -> ShopClientTable: def SHOP_CLIENT_TABLE(self) -> ShopClientTable:
return self.shop_client_table_ return self.shop_client_table_
async def skill_table(self) -> None: async def skill_table(self) -> None:
self.skill_table_ = SkillTable.convert( self.skill_table_ = SkillTable.convert({'skills': await store.get_excel('skill_table')})
{"skills": await store.get_excel("skill_table")}
)
@property @property
def SKILL_TABLE(self) -> SkillTable: def SKILL_TABLE(self) -> SkillTable:
return self.skill_table_ return self.skill_table_
async def skin_table(self) -> None: async def skin_table(self) -> None:
self.skin_table_ = SkinTable.convert( self.skin_table_ = SkinTable.convert(await store.get_excel('skin_table'))
await store.get_excel("skin_table")
)
@property @property
def SKIN_TABLE(self) -> SkinTable: def SKIN_TABLE(self) -> SkinTable:
return self.skin_table_ return self.skin_table_
async def stage_table(self) -> None: async def stage_table(self) -> None:
self.stage_table_ = StageTable.convert( self.stage_table_ = StageTable.convert(await store.get_excel('stage_table'))
await store.get_excel("stage_table")
)
@property @property
def STAGE_TABLE(self) -> StageTable: def STAGE_TABLE(self) -> StageTable:
@ -453,7 +387,7 @@ class ExcelTableManager:
async def story_review_meta_table(self) -> None: async def story_review_meta_table(self) -> None:
self.story_review_meta_table_ = StoryReviewMetaTable.convert( self.story_review_meta_table_ = StoryReviewMetaTable.convert(
await store.get_excel("story_review_meta_table") await store.get_excel('story_review_meta_table')
) )
@property @property
@ -462,7 +396,7 @@ class ExcelTableManager:
async def story_review_table(self) -> None: async def story_review_table(self) -> None:
self.story_review_table_ = StoryReviewTable.convert( self.story_review_table_ = StoryReviewTable.convert(
{"storyreviewtable": await store.get_excel("story_review_table")} {'storyreviewtable': await store.get_excel('story_review_table')}
) )
@property @property
@ -470,61 +404,49 @@ class ExcelTableManager:
return self.story_review_table_ return self.story_review_table_
async def story_table(self) -> None: async def story_table(self) -> None:
self.story_table_ = StoryTable.convert( self.story_table_ = StoryTable.convert({'stories': await store.get_excel('story_table')})
{"stories": await store.get_excel("story_table")}
)
@property @property
def STORY_TABLE(self) -> StoryTable: def STORY_TABLE(self) -> StoryTable:
return self.story_table_ return self.story_table_
async def tech_buff_table(self) -> None: async def tech_buff_table(self) -> None:
self.tech_buff_table_ = TechBuffTable.convert( self.tech_buff_table_ = TechBuffTable.convert(await store.get_excel('tech_buff_table'))
await store.get_excel("tech_buff_table")
)
@property @property
def TECH_BUFF_TABLE(self) -> TechBuffTable: def TECH_BUFF_TABLE(self) -> TechBuffTable:
return self.tech_buff_table_ return self.tech_buff_table_
async def tip_table(self) -> None: async def tip_table(self) -> None:
self.tip_table_ = TipTable.convert(await store.get_excel("tip_table")) self.tip_table_ = TipTable.convert(await store.get_excel('tip_table'))
@property @property
def TIP_TABLE(self) -> TipTable: def TIP_TABLE(self) -> TipTable:
return self.tip_table_ return self.tip_table_
async def token_table(self) -> None: async def token_table(self) -> None:
self.token_table_ = TokenTable.convert( self.token_table_ = TokenTable.convert({'tokens': await store.get_excel('token_table')})
{"tokens": await store.get_excel("token_table")}
)
@property @property
def TOKEN_TABLE(self) -> TokenTable: def TOKEN_TABLE(self) -> TokenTable:
return self.token_table_ return self.token_table_
async def uniequip_data(self) -> None: async def uniequip_data(self) -> None:
self.uniequip_data_ = UniequipData.convert( self.uniequip_data_ = UniequipData.convert(await store.get_excel('uniequip_data'))
await store.get_excel("uniequip_data")
)
@property @property
def UNIEQUIP_DATA(self) -> UniequipData: def UNIEQUIP_DATA(self) -> UniequipData:
return self.uniequip_data_ return self.uniequip_data_
async def uniequip_table(self) -> None: async def uniequip_table(self) -> None:
self.uniequip_table_ = UniEquipTable.convert( self.uniequip_table_ = UniEquipTable.convert(await store.get_excel('uniequip_table'))
await store.get_excel("uniequip_table")
)
@property @property
def UNIEQUIP_TABLE(self) -> UniEquipTable: def UNIEQUIP_TABLE(self) -> UniEquipTable:
return self.uniequip_table_ return self.uniequip_table_
async def zone_table(self) -> None: async def zone_table(self) -> None:
self.zone_table_ = ZoneTable.convert( self.zone_table_ = ZoneTable.convert(await store.get_excel('zone_table'))
await store.get_excel("zone_table")
)
@property @property
def ZONE_TABLE(self) -> ZoneTable: def ZONE_TABLE(self) -> ZoneTable:
@ -535,9 +457,9 @@ class ExcelTableManager:
for name, method in inspect.getmembers(self): for name, method in inspect.getmembers(self):
if not inspect.iscoroutinefunction(method): if not inspect.iscoroutinefunction(method):
continue continue
if name.startswith("__"): if name.startswith('__'):
continue continue
if name != "preload_table" and name != 'CHARATER_TABLE': if name != 'preload_table' and name != 'CHARATER_TABLE':
task.append(method()) task.append(method())
await asyncio.gather(*task) await asyncio.gather(*task)

View File

@ -24,10 +24,10 @@ def read_json(file_path: Path, **kwargs) -> dict:
Read a JSON file and return its contents as a dictionary. Read a JSON file and return its contents as a dictionary.
""" """
try: 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) return json.load(file)
except (FileNotFoundError, json.JSONDecodeError) as e: except (FileNotFoundError, json.JSONDecodeError) as e:
logger.error(f"Error reading JSON file: {e}") logger.error(f'Error reading JSON file: {e}')
return {} return {}
@ -84,7 +84,7 @@ class StorageObject(Struct):
class StoreService(Store): class StoreService(Store):
__slots__ = ("store", "lock", "path") __slots__ = ('store', 'lock', 'path')
def __init__(self) -> None: def __init__(self) -> None:
self.path: anyioPath = anyioPath('data') self.path: anyioPath = anyioPath('data')
@ -102,7 +102,7 @@ class StoreService(Store):
def _write_sync(self, target_file: anyioPath) -> None: def _write_sync(self, target_file: anyioPath) -> None:
try: try:
tmp_file_fd, tmp_file_name = mkstemp(dir=self.path, prefix=f"{target_file.name}.cache") tmp_file_fd, tmp_file_name = mkstemp(dir=self.path, prefix=f'{target_file.name}.cache')
renamed = False renamed = False
try: try:
try: try:
@ -122,7 +122,7 @@ class StoreService(Store):
async def set(self, key: str, value: Any, expires_in: int | timedelta | None = None) -> None: async def set(self, key: str, value: Any, expires_in: int | timedelta | None = None) -> None:
if isinstance(value, str): if isinstance(value, str):
value = value.encode("UTF-8") value = value.encode('UTF-8')
async with self.lock: async with self.lock:
self.store_[key] = StorageObject.new(data=value, expires_in=expires_in) self.store_[key] = StorageObject.new(data=value, expires_in=expires_in)

View File

@ -34,9 +34,7 @@ async def get_role_img(uid: str):
secretary_skinId = secretary.skinId.replace('@', '_') secretary_skinId = secretary.skinId.replace('@', '_')
secretary_char_img = ( secretary_char_img = (
Image.open(SKIN_PATH / f'{secretary_skinId}b.png') Image.open(SKIN_PATH / f'{secretary_skinId}b.png').resize((768, 768)).convert('RGBA')
.resize((768, 768))
.convert('RGBA')
) )
char_info.paste(secretary_char_img, (0, -20), secretary_char_img) char_info.paste(secretary_char_img, (0, -20), secretary_char_img)
@ -48,12 +46,11 @@ async def get_role_img(uid: str):
player_info.status.name, player_info.status.name,
(255, 255, 255), (255, 255, 255),
sans_font_28, 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.paste(base_info, (200, 0), base_info)

View File

@ -82,9 +82,7 @@ async def single_daily_sign(bot_id: str, ark_uid: str, gid: str, qid: str):
if gid == 'on': if gid == 'on':
if qid not in private_msg_list: if qid not in private_msg_list:
private_msg_list[qid] = [] private_msg_list[qid] = []
private_msg_list[qid].append( private_msg_list[qid].append({'bot_id': bot_id, 'uid': ark_uid, 'msg': im})
{'bot_id': bot_id, 'uid': ark_uid, 'msg': im}
)
else: else:
# 向群消息推送列表添加这个群 # 向群消息推送列表添加这个群
if gid not in group_msg_list: if gid not in group_msg_list:

View File

@ -8,4 +8,5 @@ async def all_start():
await startup() await startup()
await ark_adapter() await ark_adapter()
asyncio.run(all_start()) asyncio.run(all_start())

View File

@ -25,9 +25,7 @@ ark_skd_cred_add = SV('森空岛cred绑定')
# await bot.send(uid_list) # await bot.send(uid_list)
@sv_user_info.on_command( @sv_user_info.on_command((f'{PREFIX}绑定uid', f'{PREFIX}切换uid', f'{PREFIX}删除uid', f'{PREFIX}解绑uid'))
(f'{PREFIX}绑定uid', f'{PREFIX}切换uid', f'{PREFIX}删除uid', f'{PREFIX}解绑uid')
)
async def send_link_uid_msg(bot: Bot, ev: Event): async def send_link_uid_msg(bot: Bot, ev: Event):
await bot.logger.info('开始执行[绑定/解绑用户信息]') await bot.logger.info('开始执行[绑定/解绑用户信息]')
qid = ev.user_id qid = ev.user_id

View File

@ -3,9 +3,7 @@ import re
from ..utils.ark_api import ark_skd_api from ..utils.ark_api import ark_skd_api
from ..utils.database.models import ArknightsBind, ArknightsPush, ArknightsUser from ..utils.database.models import ArknightsBind, ArknightsPush, ArknightsUser
ERROR_HINT = ( ERROR_HINT = '添加失败, 格式为: skd添加cred Cred 例如: skd添加cred VropL583Sb1hClS5buQ4nSASkDlL8tMT'
'添加失败, 格式为: skd添加cred Cred 例如: skd添加cred VropL583Sb1hClS5buQ4nSASkDlL8tMT'
)
UID_HINT = '添加失败, 请先绑定明日方舟UID' UID_HINT = '添加失败, 请先绑定明日方舟UID'
@ -22,7 +20,8 @@ async def deal_skd_cred(bot_id: str, cred: str, user_id: str) -> str:
token = await ark_skd_api.refresh_token(match.group()) token = await ark_skd_api.refresh_token(match.group())
check_cred = await ark_skd_api.check_cred_valid( check_cred = await ark_skd_api.check_cred_valid(
cred=match.group(), token=token cred=match.group(),
token=token,
) )
if isinstance(check_cred, bool): if isinstance(check_cred, bool):

View File

@ -21,13 +21,9 @@ async def text2pic(text: str, max_size: int = 800, font_size: int = 20):
if text.endswith('\n'): if text.endswith('\n'):
text = text[:-1] text = text[:-1]
img = Image.new( img = Image.new('RGB', (max_size, len(text) * font_size // 5), (228, 222, 210))
'RGB', (max_size, len(text) * font_size // 5), (228, 222, 210)
)
img_draw = ImageDraw.ImageDraw(img) img_draw = ImageDraw.ImageDraw(img)
y = draw_center_text_by_line( y = draw_center_text_by_line(img_draw, (25, 0), text, sans_font_20, 'black', 750, True)
img_draw, (25, 0), text, sans_font_20, 'black', 750, True
)
img = img.crop((0, 0, 800, int(y + 30))) img = img.crop((0, 0, 800, int(y + 30)))
return await convert_img(img) return await convert_img(img)
@ -50,6 +46,7 @@ async def send_role_wiki_pic(bot: Bot, ev: Event):
img = await get_wiki_info(char_id=char_id) img = await get_wiki_info(char_id=char_id)
await bot.send(await text2pic(img)) 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): 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))

View File

@ -3,24 +3,21 @@ import re
from pathlib import Path from pathlib import Path
from typing import Union from typing import Union
from gsuid_core.data_store import get_res_path
from gsuid_core.plugins.ArknightsUID.ArknightsUID.arknightsuid_resource.memoryStore import store
from jinja2 import Template from jinja2 import Template
from PIL import Image, ImageDraw from PIL import Image, ImageDraw
# from rich import print
from ..arknightsuid_resource.constants import Excel from ..arknightsuid_resource.constants import Excel
from ..utils.fonts.source_han_sans import ( from ..utils.fonts.source_han_sans import (
sans_font_18, # sans_font_18,
sans_font_26, # sans_font_26,
sans_font_34, # sans_font_34,
sans_font_50, # sans_font_50,
sans_font_120, sans_font_120,
) )
TEXTURE2D_PATH = Path(__file__).parent / 'texture2D' TEXTURE2D_PATH = Path(__file__).parent / 'texture2D'
bg_img =Image.open(TEXTURE2D_PATH / 'bg.jpg') bg_img = Image.open(TEXTURE2D_PATH / 'bg.jpg')
title_img = Image.open(TEXTURE2D_PATH / 'title.png') title_img = Image.open(TEXTURE2D_PATH / 'title.png')
vvan_img = Image.open(TEXTURE2D_PATH / 'char_4098_vvana_2b.png').resize((2000, 2000)) vvan_img = Image.open(TEXTURE2D_PATH / 'char_4098_vvana_2b.png').resize((2000, 2000))
@ -30,36 +27,36 @@ red_color = (235, 61, 75)
black_color = (0, 0, 0) black_color = (0, 0, 0)
profession_en_to_cn = { profession_en_to_cn = {
"WARRIOR": "近卫", 'WARRIOR': '近卫',
"SNIPER": "狙击", 'SNIPER': '狙击',
"TANK": "重装", 'TANK': '重装',
"MEDIC": "医疗", 'MEDIC': '医疗',
"SUPPORT": "辅助", 'SUPPORT': '辅助',
"CASTER": "术师", 'CASTER': '术师',
"SPECIAL": "特种", 'SPECIAL': '特种',
"PIONEER": "先锋", 'PIONEER': '先锋',
"TOKEN": "召唤物", 'TOKEN': '召唤物',
"TRAP": "陷阱", 'TRAP': '陷阱',
} }
char_position_en_to_cn = { char_position_en_to_cn = {
"MELEE": "近战", 'MELEE': '近战',
"RANGED": "远程", 'RANGED': '远程',
"ALL": "近战/远程", 'ALL': '近战/远程',
"NONE": "", 'NONE': '',
} }
attr_en_to_cn = { attr_en_to_cn = {
"maxHp": "生命", 'maxHp': '生命',
"atk": "攻击", 'atk': '攻击',
"def_": "防御", 'def_': '防御',
"magicResistance": "法抗", 'magicResistance': '法抗',
"cost": "部署费用", 'cost': '部署费用',
"blockCnt": "阻挡", 'blockCnt': '阻挡',
# "moveSpeed": "移动速度", # "moveSpeed": "移动速度",
"attackSpeed": "攻击速度", 'attackSpeed': '攻击速度',
"baseAttackTime": "攻击间隔", 'baseAttackTime': '攻击间隔',
"respawnTime": "再部署时间", 'respawnTime': '再部署时间',
# "hpRecoveryPerSec": "生命回复", # "hpRecoveryPerSec": "生命回复",
# "spRecoveryPerSec": "技力回复", # "spRecoveryPerSec": "技力回复",
# "maxDeployCount": "部署数量上限", # "maxDeployCount": "部署数量上限",
@ -75,19 +72,18 @@ attr_en_to_cn = {
} }
potential_id_to_cn = { potential_id_to_cn = {
0: "潜能2", 0: '潜能2',
1: "潜能3", 1: '潜能3',
2: "潜能4", 2: '潜能4',
3: "潜能5", 3: '潜能5',
4: "潜能6", 4: '潜能6',
} }
def render_template(template_str, data): def render_template(template_str, data):
# Extract placeholders and formatting options from the template using regular expression
matches = re.finditer(r'\{([^}:]+)\}', template_str) matches = re.finditer(r'\{([^}:]+)\}', template_str)
matches_1 = re.finditer(r'\{([^{}]+):([^{}]+)\}', template_str) matches_1 = re.finditer(r'\{([^{}]+):([^{}]+)\}', template_str)
# Create a dictionary with placeholder names, formatting options, and corresponding values
placeholder_data = {} placeholder_data = {}
for match in matches: for match in matches:
placeholder = match.groups() placeholder = match.groups()
@ -95,16 +91,17 @@ def render_template(template_str, data):
placeholder_data[placeholder[0]] = (formatting_option, data.get(placeholder[0], '')) placeholder_data[placeholder[0]] = (formatting_option, data.get(placeholder[0], ''))
for match in matches_1: for match in matches_1:
placeholder, formatting_option = match.groups() placeholder, formatting_option = match.groups()
# placeholder = placeholder.replace('-', '')
placeholder_data[placeholder] = (formatting_option, data.get(placeholder.replace('-', ''), '')) placeholder_data[placeholder] = (formatting_option, data.get(placeholder.replace('-', ''), ''))
# Replace the placeholders in the template with the formatted values
for placeholder, (formatting_option, value) in placeholder_data.items(): for placeholder, (formatting_option, value) in placeholder_data.items():
if formatting_option == '': if formatting_option == '':
template_str = template_str.replace(f'{{{placeholder}}}', f"{value}") template_str = template_str.replace(f'{{{placeholder}}}', f'{value}')
else: else:
template_str = template_str.replace(f'{{{placeholder}:{formatting_option}}}', f"{value:{formatting_option}}") template_str = template_str.replace(
f'{{{placeholder}:{formatting_option}}}', f'{value:{formatting_option}}'
)
# Render the template
template = Template(template_str) template = Template(template_str)
rendered_text = template.render() rendered_text = template.render()
@ -112,7 +109,6 @@ def render_template(template_str, data):
async def get_equip_info(char_id: str): async def get_equip_info(char_id: str):
UNIEQUIP_TABLE = Excel.UNIEQUIP_TABLE UNIEQUIP_TABLE = Excel.UNIEQUIP_TABLE
BATTLE_EQUIP_TABLE = Excel.BATTLE_EQUIP_TABLE BATTLE_EQUIP_TABLE = Excel.BATTLE_EQUIP_TABLE
@ -225,9 +221,7 @@ async def get_equip_info(char_id: str):
return im return im
async def get_wiki_info(char_id: str): async def get_wiki_info(char_id: str):
CHARACTER_TABLE = Excel.CHARATER_TABLE CHARACTER_TABLE = Excel.CHARATER_TABLE
SKILL_TABLE = Excel.SKILL_TABLE SKILL_TABLE = Excel.SKILL_TABLE
UNIEQUIP_TABLE = Excel.UNIEQUIP_TABLE UNIEQUIP_TABLE = Excel.UNIEQUIP_TABLE
@ -290,8 +284,10 @@ async def get_wiki_info(char_id: str):
if len(potential.buff.attributes.attributeModifiers) == 1: if len(potential.buff.attributes.attributeModifiers) == 1:
potential_add_attribute_type = potential_add_attribute[0].attributeType potential_add_attribute_type = potential_add_attribute[0].attributeType
potential_add_attribute_value = potential_add_attribute[0].value potential_add_attribute_value = potential_add_attribute[0].value
potential_add_dict[potential_id] = (potential_add_attribute_type, potential_add_attribute_value) potential_add_dict[potential_id] = (
# im += f"{potential_add_attribute_type}: {potential_add_attribute_value}" potential_add_attribute_type,
potential_add_attribute_value,
)
else: else:
raise NotImplementedError raise NotImplementedError
im += '-----------------\n' im += '-----------------\n'
@ -316,7 +312,7 @@ async def get_wiki_info(char_id: str):
skill_data = SKILL_TABLE.skills[skill] skill_data = SKILL_TABLE.skills[skill]
skill_level_data = skill_data.levels[-1] skill_level_data = skill_data.levels[-1]
skill_name = skill_level_data.name skill_name = skill_level_data.name
im += f"技能名: {skill_name}\n" im += f'技能名: {skill_name}\n'
skill_type = skill_level_data.skillType skill_type = skill_level_data.skillType
skill_description = skill_level_data.description skill_description = skill_level_data.description
skill_sp_data = skill_level_data.spData skill_sp_data = skill_level_data.spData
@ -331,7 +327,6 @@ async def get_wiki_info(char_id: str):
elif skill_sp_type == 8: elif skill_sp_type == 8:
pass pass
else: else:
print(skill_name, skill_sp_type)
raise NotImplementedError raise NotImplementedError
if skill_type == 1: if skill_type == 1:
@ -341,13 +336,11 @@ async def get_wiki_info(char_id: str):
elif skill_type == 0: elif skill_type == 0:
pass pass
else: else:
print(skill_name, skill_type)
raise NotImplementedError raise NotImplementedError
skill_duration = skill_level_data.duration skill_duration = skill_level_data.duration
im += f'消耗: {skill_sp_data.spCost} ' im += f'消耗: {skill_sp_data.spCost} '
im += f'初始: {skill_sp_data.initSp} ' im += f'初始: {skill_sp_data.initSp} '
# im += f'持续: {skill_sp_data.increment}\n'
im += f'持续: {str(skill_duration)}\n' im += f'持续: {str(skill_duration)}\n'
skill_blackboard_data = skill_level_data.blackboard skill_blackboard_data = skill_level_data.blackboard
black_board_dict: dict[str, Union[Union[int, float], None]] = {} black_board_dict: dict[str, Union[Union[int, float], None]] = {}
@ -356,45 +349,21 @@ async def get_wiki_info(char_id: str):
if skill_description: if skill_description:
skill_description = skill_description.replace(':0.0', '') skill_description = skill_description.replace(':0.0', '')
skill_description = re.sub(r'<[^>]+>', '', skill_description) skill_description = re.sub(r'<[^>]+>', '', skill_description)
# print(skill_description)
# [max_hp].max_hp [atk].atk [def].def
# skill_description = re.sub(r'\[max_hp].max_hp', '', skill_description)
# skill_description = re.sub(r'\[atk].atk', '', skill_description)
# skill_description = re.sub(r'\[def].def', '', skill_description)
# print(skill_description)
# print(black_board_dict)
# print(skill_description)
skill_description = render_template(skill_description, black_board_dict).replace('--', '-') skill_description = render_template(skill_description, black_board_dict).replace('--', '-')
# skill_description = template.render(**black_board_dict)
# skill_description = skill_description.format(**black_board_dict)
last_skill_description = re.sub(r'.000000', '', skill_description) last_skill_description = re.sub(r'.000000', '', skill_description)
print()
if '{' in last_skill_description: if '{' in last_skill_description:
print(last_skill_description)
raise NotImplementedError raise NotImplementedError
# re 匹配 '\n'
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: for skill_desc_line in skill_desc:
im += f'{skill_desc_line}\n' im += f'{skill_desc_line}\n'
im += '-----------------\n' im += '-----------------\n'
im = im[:-19] im = im[:-19]
print(im)
return im return im
async def draw_wiki(char_id: str): async def draw_wiki(char_id: str):
# TASK = []
# for file_path in Path(
# get_res_path(["ArknightsUID", "resource", "gamedata"])
# ).glob("*.json"):
# TASK.append(store.get_file(file_path))
# asyncio.gather(*TASK)
# await Excel.preload_table()
CHARACTER_TABLE = Excel.CHARATER_TABLE CHARACTER_TABLE = Excel.CHARATER_TABLE
SKILL_TABLE = Excel.SKILL_TABLE SKILL_TABLE = Excel.SKILL_TABLE
UNIEQUIP_TABLE = Excel.UNIEQUIP_TABLE UNIEQUIP_TABLE = Excel.UNIEQUIP_TABLE
@ -445,7 +414,10 @@ async def draw_wiki(char_id: str):
if len(potential.buff.attributes.attributeModifiers) == 1: if len(potential.buff.attributes.attributeModifiers) == 1:
potential_add_attribute_type = potential_add_attribute[0].attributeType potential_add_attribute_type = potential_add_attribute[0].attributeType
potential_add_attribute_value = potential_add_attribute[0].value potential_add_attribute_value = potential_add_attribute[0].value
potential_add_dict[potential_id] = (potential_add_attribute_type, potential_add_attribute_value) potential_add_dict[potential_id] = (
potential_add_attribute_type,
potential_add_attribute_value,
)
else: else:
raise NotImplementedError raise NotImplementedError
@ -487,8 +459,5 @@ async def draw_wiki(char_id: str):
return img return img
if __name__ == '__main__': if __name__ == '__main__':
import asyncio
asyncio.run(draw_wiki(char_id='char_4098_vvana')) asyncio.run(draw_wiki(char_id='char_4098_vvana'))

View File

@ -1,8 +1,8 @@
from copy import deepcopy
import hashlib import hashlib
import hmac
import json import json
import time import time
import hmac from copy import deepcopy
from typing import Any, Dict, Literal, Tuple, Union, cast from typing import Any, Dict, Literal, Tuple, Union, cast
from urllib.parse import urlparse from urllib.parse import urlparse
@ -25,19 +25,19 @@ ssl_verify = core_plugins_config.get_config('MhySSLVerify').data
_HEADER: Dict[str, str] = { _HEADER: Dict[str, str] = {
'Host': 'zonai.skland.com', 'Host': 'zonai.skland.com',
'platform': '1', 'platform': '1',
'Origin': 'https://www.skland.com', 'Origin': 'https://www.skland.com',
'Referer': 'https://www.skland.com/', 'Referer': 'https://www.skland.com/',
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'User-Agent': 'Skland/1.5.1 (com.hypergryph.skland; build:100501001; Android 33; ) Okhttp/4.11.0', 'User-Agent': 'Skland/1.5.1 (com.hypergryph.skland; build:100501001; Android 33; ) Okhttp/4.11.0',
'vName': '1.5.1', 'vName': '1.5.1',
'vCode': '100501001', 'vCode': '100501001',
'nId': '1', 'nId': '1',
'os': '33', 'os': '33',
'manufacturer': 'Xiaomi', 'manufacturer': 'Xiaomi',
'Connection': 'close' 'Connection': 'close',
} }
class TokenExpiredError(Exception): class TokenExpiredError(Exception):
@ -69,7 +69,7 @@ class BaseArkApi:
return validate, ch return validate, ch
async def get_game_player_info(self, uid: str) -> Union[int, ArknightsPlayerInfoModel]: 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') cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred')
if cred is None: if cred is None:
return -60 return -60
is_vaild = await self.check_cred_valid(cred) is_vaild = await self.check_cred_valid(cred)
@ -104,14 +104,11 @@ class BaseArkApi:
return -61 return -61
header = deepcopy(_HEADER) header = deepcopy(_HEADER)
header['cred'] = cred header['cred'] = cred
data = { data = {'uid': uid, 'gameId': 1}
'uid': uid,
'gameId': 1
}
header = await self.set_sign( header = await self.set_sign(
ARK_SKD_SIGN, ARK_SKD_SIGN,
header=header, header=header,
data=data data=data,
) )
header['Content-Type'] = 'application/json' header['Content-Type'] = 'application/json'
header['Content-Length'] = str(len(json.dumps(data))) header['Content-Length'] = str(len(json.dumps(data)))
@ -146,7 +143,7 @@ class BaseArkApi:
header=header, header=header,
params={ params={
'uid': uid, 'uid': uid,
'gameId': 1 'gameId': 1,
}, },
) )
raw_data = await self.ark_request( raw_data = await self.ark_request(
@ -154,7 +151,7 @@ class BaseArkApi:
method='GET', method='GET',
params={ params={
'uid': uid, 'uid': uid,
'gameId': 1 'gameId': 1,
}, },
header=header, header=header,
) )
@ -212,21 +209,22 @@ class BaseArkApi:
self, self,
url: str, url: str,
header: Dict[str, Any], header: Dict[str, Any],
data: Union[Dict[str, Any], None ]= None, data: Union[Dict[str, Any], None] = None,
params: Union[Dict[str, Any], None] = None, params: Union[Dict[str, Any], None] = None,
token: Union[str, None] = None, token: Union[str, None] = None,
) -> Dict: ) -> Dict:
parsed_url = urlparse(url) parsed_url = urlparse(url)
path = parsed_url.path path = parsed_url.path
timestamp = str(int(time.time()) - 2) 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( str1 = json.dumps(
{ {
'platform': header.get('platform', '1'), 'platform': header.get('platform', '1'),
'timestamp': timestamp, 'timestamp': timestamp,
'dId': dId, 'dId': dId,
'vName': header.get('vName', '') 'vName': header.get('vName', ''),
}, separators=(',', ':') },
separators=(',', ':'),
) )
s2 = '' s2 = ''
if params: if params:
@ -241,13 +239,13 @@ class BaseArkApi:
logger.debug(f'cred {header["cred"]} token {token} token_ {token_}') logger.debug(f'cred {header["cred"]} token {token} token_ {token_}')
token = token if token else token_ token = token if token else token_
if token is None: if token is None:
raise Exception("token is None") raise Exception('token is None')
encode_token = token.encode('utf-8') encode_token = token.encode('utf-8')
hex_s = hmac.new(encode_token, str2.encode('utf-8'), hashlib.sha256).hexdigest() 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') sign = hashlib.md5(hex_s.encode('utf-8')).hexdigest().encode('utf-8').decode('utf-8')
header["sign"] = sign header['sign'] = sign
header["timestamp"] = timestamp header['timestamp'] = timestamp
header["dId"] = dId header['dId'] = dId
logger.debug(header) logger.debug(header)
return header return header
@ -288,13 +286,11 @@ class BaseArkApi:
url: str, url: str,
method: Literal['GET', 'POST'] = 'GET', method: Literal['GET', 'POST'] = 'GET',
header: Dict[str, Any] = _HEADER, header: Dict[str, Any] = _HEADER,
params: Union[Dict[str, Any], None ]= None, params: Union[Dict[str, Any], None] = None,
data: Union[Dict[str, Any], None] = None, data: Union[Dict[str, Any], None] = None,
use_proxy: Union[bool, None] = False, use_proxy: Union[bool, None] = False,
) -> Union[Dict, Union[int, None]]: ) -> Union[Dict, Union[int, None]]:
async with ClientSession( async with ClientSession(connector=TCPConnector(verify_ssl=ssl_verify)) as client:
connector=TCPConnector(verify_ssl=ssl_verify)
) as client:
raw_data = {} raw_data = {}
if 'cred' not in header: if 'cred' not in header:
return 10001 return 10001

View File

@ -13,7 +13,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select from sqlalchemy.future import select
from sqlmodel import Field 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): class ArknightsBind(Bind, table=True):
@ -29,7 +29,9 @@ class ArknightsUser(User, table=True):
@classmethod @classmethod
@with_session @with_session
async def select_data_by_cred( async def select_data_by_cred(
cls, session: AsyncSession, cred: str cls,
session: AsyncSession,
cred: str,
) -> Union[BaseModel, None]: ) -> Union[BaseModel, None]:
sql = select(cls).where(cls.cred == cred) sql = select(cls).where(cls.cred == cred)
result = await session.execute(sql) result = await session.execute(sql)
@ -38,10 +40,8 @@ class ArknightsUser(User, table=True):
@classmethod @classmethod
@with_session @with_session
async def get_all_user( async def get_all_user(cls: Type[T_ARK_User], session: AsyncSession) -> List[T_ARK_User]:
cls: Type[T_ARK_User], session: AsyncSession sql = select(cls).where(cls.cred is not None, cls.cred != '')
) -> List[T_ARK_User]:
sql = select(cls).where(cls.cred is not None, cls.cred != "")
result = await session.execute(sql) result = await session.execute(sql)
data: List[T_ARK_User] = result.scalars().all() data: List[T_ARK_User] = result.scalars().all()
return data return data
@ -66,7 +66,10 @@ class ArknightsUser(User, table=True):
retcode = -1 retcode = -1
if await cls.data_exist(uid=uid): if await cls.data_exist(uid=uid):
retcode = await cls.update_data_by_uid( retcode = await cls.update_data_by_uid(
uid, cls.bot_id, None, **{attr: value} uid,
cls.bot_id,
None,
**{attr: value},
) )
return not bool(retcode) return not bool(retcode)
@ -83,13 +86,9 @@ class ArknightsPush(Push, table=True):
ap_is_push: Union[bool, None] = Field(default=False, title='理智是否已经推送') ap_is_push: Union[bool, None] = Field(default=False, title='理智是否已经推送')
training_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_value: Union[int, None] = Field(default=30, title='训练室推送阈值')
training_is_push: Union[bool, None] = Field( training_is_push: Union[bool, None] = Field(default=False, title='训练室是否已经推送')
default=False, title='训练室是否已经推送'
)
version_push: Union[bool, None] = Field(default=False, title='版本更新推送') version_push: Union[bool, None] = Field(default=False, title='版本更新推送')
version_is_push: Union[bool, None] = Field( version_is_push: Union[bool, None] = Field(default=False, title='版本更新是否已经推送')
default=False, title='版本更新是否已经推送'
)
@classmethod @classmethod
async def insert_push_data(cls, bot_id: str, uid: str, skd_uid: str): async def insert_push_data(cls, bot_id: str, uid: str, skd_uid: str):
@ -122,7 +121,10 @@ class ArknightsPush(Push, table=True):
retcode = -1 retcode = -1
if await cls.data_exist(uid=uid): if await cls.data_exist(uid=uid):
retcode = await cls.update_data_by_uid( retcode = await cls.update_data_by_uid(
uid, cls.bot_id, None, **data uid,
cls.bot_id,
None,
**data,
) )
return not bool(retcode) return not bool(retcode)
@ -136,9 +138,7 @@ class ArknightsPush(Push, table=True):
await cls.update_push_data(uid, {f'{mode}_is_push': status}) await cls.update_push_data(uid, {f'{mode}_is_push': status})
@classmethod @classmethod
async def select_push_data( async def select_push_data(cls: Type[T_BaseIDModel], uid: str) -> Union[T_BaseIDModel, None]:
cls: Type[T_BaseIDModel], uid: str
) -> Union[T_BaseIDModel, None]:
return await cls.base_select_data(uid=uid) return await cls.base_select_data(uid=uid)
@classmethod @classmethod

View File

@ -3,6 +3,7 @@ from typing import Union
UID_HINT = '添加失败, 请先绑定明日方舟UID' UID_HINT = '添加失败, 请先绑定明日方舟UID'
def get_error(retcode: Union[int, str]) -> str: def get_error(retcode: Union[int, str]) -> str:
if retcode == 10000: if retcode == 10000:
return '请求异常, 请检查具体实现代码...' return '请求异常, 请检查具体实现代码...'

View File

@ -7,7 +7,7 @@ from msgspec import json as mscjson
from typing_extensions import dataclass_transform from typing_extensions import dataclass_transform
Model = TypeVar('Model', bound='BaseStruct') Model = TypeVar('Model', bound='BaseStruct')
T = TypeVar("T") T = TypeVar('T')
def transUnset(v: Union[T, UnsetType], d: Any = None) -> Union[T, Any]: def transUnset(v: Union[T, UnsetType], d: Any = None) -> Union[T, Any]:
@ -16,7 +16,10 @@ def transUnset(v: Union[T, UnsetType], d: Any = None) -> Union[T, Any]:
@dataclass_transform(field_specifiers=(field,)) @dataclass_transform(field_specifiers=(field,))
class BaseStruct( class BaseStruct(
Struct, forbid_unknown_fields=True, omit_defaults=True, gc=False Struct,
forbid_unknown_fields=True,
omit_defaults=True,
gc=False,
): ):
class Config: class Config:
encoder = mscjson.Encoder() encoder = mscjson.Encoder()

View File

@ -7,8 +7,8 @@ from msgspec import field
class ActivityTableBasicData(BaseStruct): class ActivityTableBasicData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
type_: str = field(name="type") type_: str = field(name='type')
name: str name: str
startTime: int startTime: int
endTime: int endTime: int
@ -32,16 +32,16 @@ class ActivityTableHomeActivityConfig(BaseStruct):
class MissionDisplayRewards(BaseStruct): class MissionDisplayRewards(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
class MissionData(BaseStruct): class MissionData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
sortId: int sortId: int
description: str description: str
type_: str = field(name="type") type_: str = field(name='type')
itemBgType: str itemBgType: str
preMissionIds: Union[List[str], None] preMissionIds: Union[List[str], None]
template: str template: str
@ -59,9 +59,9 @@ class MissionData(BaseStruct):
class MissionGroup(BaseStruct): class MissionGroup(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
title: Union[str, None] title: Union[str, None]
type_: str = field(name="type") type_: str = field(name='type')
preMissionGroup: Union[str, None] preMissionGroup: Union[str, None]
period: Union[List[int], None] period: Union[List[int], None]
rewards: Union[List[MissionDisplayRewards], None] rewards: Union[List[MissionDisplayRewards], None]
@ -79,9 +79,9 @@ class DefaultZoneData(BaseStruct):
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class DefaultShopData(BaseStruct): class DefaultShopData(BaseStruct):
@ -244,7 +244,7 @@ class Act3D0DataLimitedPoolDetailInfoPoolItemInfo(BaseStruct):
perCount: int perCount: int
totalCount: int totalCount: int
weight: int weight: int
type_: str = field(name="type") type_: str = field(name='type')
orderId: int orderId: int
@ -259,7 +259,7 @@ class Act3D0DataInfinitePoolDetailInfoPoolItemInfo(BaseStruct):
goodType: str goodType: str
perCount: int perCount: int
weight: int weight: int
type_: str = field(name="type") type_: str = field(name='type')
orderId: int orderId: int
@ -492,7 +492,7 @@ class RuneData(BaseStruct):
class RuneTablePackedRuneData(BaseStruct): class RuneTablePackedRuneData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
points: float points: float
mutexGroupKey: Union[str, None] mutexGroupKey: Union[str, None]
description: str description: str
@ -520,7 +520,7 @@ class Act5D1Data(BaseStruct):
class ActivityCollectionDataCollectionInfo(BaseStruct): class ActivityCollectionDataCollectionInfo(BaseStruct):
id_: int = field(name="id") id_: int = field(name='id')
itemType: str itemType: str
itemId: str itemId: str
itemCnt: int itemCnt: int
@ -733,7 +733,7 @@ class Act13SideDataLongTermMissionData(BaseStruct):
class Act13SideDataDailyMissionData(BaseStruct): class Act13SideDataDailyMissionData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
sortId: int sortId: int
description: str description: str
missionName: str missionName: str
@ -929,7 +929,7 @@ class Act17sideDataMainlineChapterData(BaseStruct):
chapterDes: str chapterDes: str
chapterIcon: str chapterIcon: str
unlockDes: str unlockDes: str
id_: str = field(name="id") id_: str = field(name='id')
class Act17sideDataMainlineData(BaseStruct): class Act17sideDataMainlineData(BaseStruct):
@ -1172,9 +1172,9 @@ class SharedCharData(BaseStruct):
evolvePhase: int evolvePhase: int
level: int level: int
favorPoint: 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( equips: Union[Dict[str, SharedCharDataCharEquipInfo], None] = field(
name="equip", name='equip',
default={}, default={},
) )
skillIndex: Union[int, None] = None skillIndex: Union[int, None] = None
@ -1241,8 +1241,8 @@ class ActivityBossRushDataBossRushStageAdditionData(BaseStruct):
class ActivityBossRushDataDisplayDetailRewards(BaseStruct): class ActivityBossRushDataDisplayDetailRewards(BaseStruct):
occPercent: int occPercent: int
dropCount: int dropCount: int
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
dropType: int dropType: int
@ -1348,15 +1348,15 @@ class ActivityFloatParadeDataDailyData(BaseStruct):
class ActivityFloatParadeDataRewardPool(BaseStruct): class ActivityFloatParadeDataRewardPool(BaseStruct):
grpId: str grpId: str
id_: str = field(name="id") id_: str = field(name='id')
type_: str = field(name="type") type_: str = field(name='type')
name: str name: str
desc: Union[str, None] desc: Union[str, None]
reward: ItemBundle reward: ItemBundle
class ActivityFloatParadeDataTactic(BaseStruct): class ActivityFloatParadeDataTactic(BaseStruct):
id_: int = field(name="id") id_: int = field(name='id')
name: str name: str
packName: str packName: str
briefName: str briefName: str
@ -1395,7 +1395,7 @@ class ActSandboxData(BaseStruct):
class ActivityMainlineBuffDataMissionGroupData(BaseStruct): class ActivityMainlineBuffDataMissionGroupData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
bindBanner: str bindBanner: str
sortId: int sortId: int
zoneId: str zoneId: str
@ -1411,7 +1411,7 @@ class ActivityMainlineBuffDataPeriodDataStepData(BaseStruct):
class ActivityMainlineBuffDataPeriodData(BaseStruct): class ActivityMainlineBuffDataPeriodData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
startTime: int startTime: int
endTime: int endTime: int
favorUpCharDesc: str favorUpCharDesc: str
@ -1511,23 +1511,23 @@ class Act24SideDataMissionExtraData(BaseStruct):
class WeightItemBundle(BaseStruct): class WeightItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
type_: str = field(name="type") type_: str = field(name='type')
dropType: str dropType: str
count: int count: int
weight: int weight: int
class StageDataDisplayRewards(BaseStruct): class StageDataDisplayRewards(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
dropType: int dropType: int
class StageDataDisplayDetailRewards(BaseStruct): class StageDataDisplayDetailRewards(BaseStruct):
occPercent: int occPercent: int
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
dropType: int dropType: int
@ -1599,7 +1599,7 @@ class Act25SideDataArchiveItemData(BaseStruct):
class Act25SideDataArchiveMapInfoData(BaseStruct): class Act25SideDataArchiveMapInfoData(BaseStruct):
objectId: str objectId: str
type_: int = field(name="type") type_: int = field(name='type')
numberId: str numberId: str
areaId: str areaId: str
sortId: int sortId: int
@ -1622,7 +1622,7 @@ class Act25SideDataAreaInfoData(BaseStruct):
class Act25SideDataAreaMissionData(BaseStruct): class Act25SideDataAreaMissionData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
areaId: str areaId: str
preposedMissionId: Union[str, None] preposedMissionId: Union[str, None]
sortId: int sortId: int
@ -1711,7 +1711,7 @@ class Act38D1DataAct38D1DimensionItemData(BaseStruct):
class Act38D1DataAct38D1CommentData(BaseStruct): class Act38D1DataAct38D1CommentData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
sortId: int sortId: int
desc: str desc: str
@ -1746,7 +1746,7 @@ class Act38D1Data(BaseStruct):
class Act27SideDataAct27SideGoodData(BaseStruct): class Act27SideDataAct27SideGoodData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
name: str name: str
typeDesc: str typeDesc: str
iconId: str iconId: str
@ -1865,7 +1865,7 @@ class Act42D0DataEffectGroupInfoData(BaseStruct):
class Act42D0DataEffectInfoRuneData(BaseStruct): class Act42D0DataEffectInfoRuneData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
points: int points: int
mutexGroupKey: Union[str, None] mutexGroupKey: Union[str, None]
description: str description: str
@ -1958,14 +1958,14 @@ class Act29SideFragData(BaseStruct):
class Act29SideOrcheType(Enum): class Act29SideOrcheType(Enum):
ORCHE_1 = "ORCHE_1" ORCHE_1 = 'ORCHE_1'
ORCHE_2 = "ORCHE_2" ORCHE_2 = 'ORCHE_2'
ORCHE_3 = "ORCHE_3" ORCHE_3 = 'ORCHE_3'
ENUM = "ENUM" ENUM = 'ENUM'
class Act29SideOrcheData(BaseStruct): class Act29SideOrcheData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
name: str name: str
desc: str desc: str
icon: str icon: str
@ -1974,12 +1974,12 @@ class Act29SideOrcheData(BaseStruct):
class Act29SideProductType(Enum): class Act29SideProductType(Enum):
PRODUCT_TYPE_1 = "PRODUCT_TYPE_1" PRODUCT_TYPE_1 = 'PRODUCT_TYPE_1'
PRODUCT_TYPE_2 = "PRODUCT_TYPE_2" PRODUCT_TYPE_2 = 'PRODUCT_TYPE_2'
PRODUCT_TYPE_3 = "PRODUCT_TYPE_3" PRODUCT_TYPE_3 = 'PRODUCT_TYPE_3'
PRODUCT_TYPE_4 = "PRODUCT_TYPE_4" PRODUCT_TYPE_4 = 'PRODUCT_TYPE_4'
PRODUCT_TYPE_5 = "PRODUCT_TYPE_5" PRODUCT_TYPE_5 = 'PRODUCT_TYPE_5'
ENUM = "ENUM" ENUM = 'ENUM'
class Act29SideProductGroupData(BaseStruct): class Act29SideProductGroupData(BaseStruct):
@ -2009,7 +2009,7 @@ class Act29SideProductGroupData(BaseStruct):
class Act29SideProductData(BaseStruct): class Act29SideProductData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
orcheId: Union[str, None] orcheId: Union[str, None]
groupId: str groupId: str
formId: Union[str, None] formId: Union[str, None]
@ -2034,9 +2034,9 @@ class Act29SideInvestResultData(BaseStruct):
class Act29SideInvestType(Enum): class Act29SideInvestType(Enum):
MAJOR = "MAJOR" MAJOR = 'MAJOR'
RARE = "RARE" RARE = 'RARE'
NORMAL = "NORMAL" NORMAL = 'NORMAL'
class Act29SideInvestData(BaseStruct): class Act29SideInvestData(BaseStruct):
@ -2142,8 +2142,8 @@ class ActivityThemeDataTimeNode(BaseStruct):
class ActivityThemeData(BaseStruct): class ActivityThemeData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
type_: str = field(name="type") type_: str = field(name='type')
funcId: str funcId: str
endTs: int endTs: int
sortId: int sortId: int
@ -2365,7 +2365,7 @@ class AprilFoolTable(BaseStruct):
class CartComponents(BaseStruct): class CartComponents(BaseStruct):
compId: str compId: str
sortId: int sortId: int
type_: str = field(name="type") type_: str = field(name='type')
posList: List[str] posList: List[str]
posIdDict: Dict[str, List[str]] posIdDict: Dict[str, List[str]]
name: str name: str
@ -2605,7 +2605,7 @@ class ActivityTableExtraData(BaseStruct):
class ActivityTable(BaseStruct): class ActivityTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
basicInfo: Dict[str, ActivityTableBasicData] basicInfo: Dict[str, ActivityTableBasicData]
homeActConfig: Dict[str, ActivityTableHomeActivityConfig] homeActConfig: Dict[str, ActivityTableHomeActivityConfig]

View File

@ -62,7 +62,7 @@ class BattleVoiceOption(BaseStruct):
class MusicData(BaseStruct): class MusicData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
name: str name: str
bank: str bank: str
@ -91,7 +91,7 @@ class AudioDataFadeStyle(BaseStruct):
class AudioData(BaseStruct): class AudioData(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
bgmBanks: List[BGMBank] bgmBanks: List[BGMBank]
soundFXBanks: List[SoundFXBank] soundFXBanks: List[SoundFXBank]

View File

@ -78,6 +78,6 @@ class BattleEquipData(BaseStruct):
class BattleEquipTable(BaseStruct): class BattleEquipTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
equips: Dict[str, BattleEquipData] equips: Dict[str, BattleEquipData]

View File

@ -6,13 +6,13 @@ from msgspec import field
class BuildingDataRoomUnlockCondCondItem(BaseStruct): class BuildingDataRoomUnlockCondCondItem(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
level: int level: int
count: int count: int
class BuildingDataRoomUnlockCond(BaseStruct): class BuildingDataRoomUnlockCond(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
number: Dict[str, BuildingDataRoomUnlockCondCondItem] number: Dict[str, BuildingDataRoomUnlockCondCondItem]
@ -22,9 +22,9 @@ class GridPosition(BaseStruct):
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class BuildingDataRoomDataBuildCost(BaseStruct): class BuildingDataRoomDataBuildCost(BaseStruct):
@ -44,7 +44,7 @@ class BuildingDataRoomDataPhaseData(BaseStruct):
class BuildingDataRoomData(BaseStruct): class BuildingDataRoomData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
name: str name: str
description: Union[str, None] description: Union[str, None]
defaultPrefabId: str defaultPrefabId: str
@ -56,7 +56,7 @@ class BuildingDataRoomData(BaseStruct):
class BuildingDataLayoutDataRoomSlot(BaseStruct): class BuildingDataLayoutDataRoomSlot(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
cleanCostId: str cleanCostId: str
costLabor: int costLabor: int
provideLabor: int provideLabor: int
@ -71,26 +71,26 @@ class BuildingDataLayoutDataSlotCleanCostCountCost(BaseStruct):
class BuildingDataLayoutDataSlotCleanCost(BaseStruct): class BuildingDataLayoutDataSlotCleanCost(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
number: Dict[str, BuildingDataLayoutDataSlotCleanCostCountCost] number: Dict[str, BuildingDataLayoutDataSlotCleanCostCountCost]
class BuildingDataLayoutDataStoreyData(BaseStruct): class BuildingDataLayoutDataStoreyData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
yOffset: int yOffset: int
unlockControlLevel: int unlockControlLevel: int
type_: str = field(name="type") type_: str = field(name='type')
class BuildingDataLayoutData(BaseStruct): class BuildingDataLayoutData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
slots: Dict[str, BuildingDataLayoutDataRoomSlot] slots: Dict[str, BuildingDataLayoutDataRoomSlot]
cleanCosts: Dict[str, BuildingDataLayoutDataSlotCleanCost] cleanCosts: Dict[str, BuildingDataLayoutDataSlotCleanCost]
storeys: Dict[str, BuildingDataLayoutDataStoreyData] storeys: Dict[str, BuildingDataLayoutDataStoreyData]
class BuildingDataPrefabInfo(BaseStruct): class BuildingDataPrefabInfo(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
blueprintRoomOverrideId: Union[str, None] blueprintRoomOverrideId: Union[str, None]
size: GridPosition size: GridPosition
floorGridSize: GridPosition floorGridSize: GridPosition
@ -98,45 +98,45 @@ class BuildingDataPrefabInfo(BaseStruct):
obstacleId: Union[str, None] obstacleId: Union[str, None]
class BuildingDataManufactPhase(BaseStruct, tag="BuildingDataManufactPhase"): class BuildingDataManufactPhase(BaseStruct, tag='BuildingDataManufactPhase'):
speed: Union[float, int] speed: Union[float, int]
outputCapacity: int outputCapacity: int
class BuildingDataShopPhase(BaseStruct, tag="BuildingDataShopPhase"): class BuildingDataShopPhase(BaseStruct, tag='BuildingDataShopPhase'):
counterNum: int counterNum: int
speed: Union[float, int] speed: Union[float, int]
moneyCapacity: int moneyCapacity: int
class BuildingDataHirePhase(BaseStruct, tag="BuildingDataHirePhase"): class BuildingDataHirePhase(BaseStruct, tag='BuildingDataHirePhase'):
economizeRate: float economizeRate: float
resSpeed: int resSpeed: int
refreshTimes: int refreshTimes: int
class BuildingDataDormPhase(BaseStruct, tag="BuildingDataDormPhase"): class BuildingDataDormPhase(BaseStruct, tag='BuildingDataDormPhase'):
manpowerRecover: int manpowerRecover: int
decorationLimit: int decorationLimit: int
class BuildingDataMeetingPhase(BaseStruct, tag="BuildingDataMeetingPhase"): class BuildingDataMeetingPhase(BaseStruct, tag='BuildingDataMeetingPhase'):
friendSlotInc: int friendSlotInc: int
maxVisitorNum: int maxVisitorNum: int
gatheringSpeed: int gatheringSpeed: int
class BuildingDataTradingPhase(BaseStruct, tag="BuildingDataTradingPhase"): class BuildingDataTradingPhase(BaseStruct, tag='BuildingDataTradingPhase'):
orderSpeed: Union[float, int] orderSpeed: Union[float, int]
orderLimit: int orderLimit: int
orderRarity: int orderRarity: int
class BuildingDataWorkshopPhase(BaseStruct, tag="BuildingDataWorkshopPhase"): class BuildingDataWorkshopPhase(BaseStruct, tag='BuildingDataWorkshopPhase'):
manpowerFactor: Union[float, int] manpowerFactor: Union[float, int]
class BuildingDataTrainingPhase(BaseStruct, tag="BuildingDataTrainingPhase"): class BuildingDataTrainingPhase(BaseStruct, tag='BuildingDataTrainingPhase'):
specSkillLvlLimit: int specSkillLvlLimit: int
@ -222,11 +222,11 @@ class BuildingDataBuildingBuff(BaseStruct):
class BuildingDataCustomDataFurnitureData(BaseStruct): class BuildingDataCustomDataFurnitureData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
sortId: int sortId: int
name: str name: str
iconId: str iconId: str
type_: str = field(name="type") type_: str = field(name='type')
subType: str subType: str
location: str location: str
category: str category: str
@ -257,11 +257,11 @@ class BuildingDataCustomDataThemeQuickSetupItem(BaseStruct):
furnitureId: str furnitureId: str
pos0: int pos0: int
pos1: int pos1: int
dir_: int = field(name="dir") dir_: int = field(name='dir')
class BuildingDataCustomDataThemeData(BaseStruct): class BuildingDataCustomDataThemeData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
sortId: int sortId: int
name: str name: str
themeType: str themeType: str
@ -272,7 +272,7 @@ class BuildingDataCustomDataThemeData(BaseStruct):
class BuildingDataCustomDataGroupData(BaseStruct): class BuildingDataCustomDataGroupData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
sortId: int sortId: int
name: str name: str
themeId: str themeId: str
@ -282,14 +282,14 @@ class BuildingDataCustomDataGroupData(BaseStruct):
class BuildingDataCustomDataFurnitureTypeData(BaseStruct): class BuildingDataCustomDataFurnitureTypeData(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
name: str name: str
class BuildingDataCustomDataFurnitureSubTypeData(BaseStruct): class BuildingDataCustomDataFurnitureSubTypeData(BaseStruct):
subType: str subType: str
name: str name: str
type_: str = field(name="type") type_: str = field(name='type')
sortId: int sortId: int
@ -318,9 +318,7 @@ class BuildingDataCustomDataDiyUISortTemplateListData(BaseStruct):
expandState: str expandState: str
defaultTemplateIndex: int defaultTemplateIndex: int
defaultTemplateOrder: str defaultTemplateOrder: str
templates: List[ templates: List[BuildingDataCustomDataDiyUISortTemplateListDataDiyUISortTemplateData]
BuildingDataCustomDataDiyUISortTemplateListDataDiyUISortTemplateData
]
class BuildingDataCustomData(BaseStruct): class BuildingDataCustomData(BaseStruct):
@ -423,7 +421,7 @@ class BuildingDataCreditFormula(BaseStruct):
class BuildingData(BaseStruct): class BuildingData(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
controlSlotId: str controlSlotId: str
meetingSlotId: str meetingSlotId: str

View File

@ -6,9 +6,9 @@ from msgspec import field
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class CampaignDataBreakRewardLadder(BaseStruct): class CampaignDataBreakRewardLadder(BaseStruct):
@ -18,16 +18,16 @@ class CampaignDataBreakRewardLadder(BaseStruct):
class WeightItemBundle(BaseStruct): class WeightItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
type_: str = field(name="type") type_: str = field(name='type')
dropType: str dropType: str
count: int count: int
weight: int weight: int
class StageDataDisplayRewards_(BaseStruct): class StageDataDisplayRewards_(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
dropType: int dropType: int
@ -58,15 +58,15 @@ class CampaignDataGainLadder(BaseStruct):
class StageDataDisplayRewards(BaseStruct): class StageDataDisplayRewards(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
dropType: int dropType: int
class StageDataDisplayDetailRewards(BaseStruct): class StageDataDisplayDetailRewards(BaseStruct):
occPercent: int occPercent: int
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
dropType: int dropType: int
@ -93,19 +93,19 @@ class CampaignGroupData(BaseStruct):
class CampaignRegionData(BaseStruct): class CampaignRegionData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
isUnknwon: int isUnknwon: int
class CampaignZoneData(BaseStruct): class CampaignZoneData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
name: str name: str
regionId: str regionId: str
templateId: str templateId: str
class CampaignMissionData(BaseStruct): class CampaignMissionData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
sortId: int sortId: int
param: List[str] param: List[str]
description: str description: str
@ -145,7 +145,7 @@ class CampaignTrainingAllOpenTimeData(BaseStruct):
class CampaignTable(BaseStruct): class CampaignTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
campaigns: Dict[str, CampaignData] campaigns: Dict[str, CampaignData]
campaignGroups: Dict[str, CampaignGroupData] campaignGroups: Dict[str, CampaignGroupData]

View File

@ -15,6 +15,6 @@ class ChapterData(BaseStruct):
class ChapterTable(BaseStruct): class ChapterTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
chapters: Dict[str, ChapterData] chapters: Dict[str, ChapterData]

View File

@ -6,9 +6,9 @@ from msgspec import field
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class SpCharMissionData(BaseStruct): class SpCharMissionData(BaseStruct):
@ -21,7 +21,7 @@ class SpCharMissionData(BaseStruct):
class CharMetaTable(BaseStruct): class CharMetaTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
spCharGroups: Dict[str, List[str]] spCharGroups: Dict[str, List[str]]
spCharMissions: Dict[str, Dict[str, SpCharMissionData]] spCharMissions: Dict[str, Dict[str, SpCharMissionData]]

View File

@ -37,7 +37,7 @@ class CharacterDataTraitDataBundle(BaseStruct):
class AttributesData(BaseStruct): class AttributesData(BaseStruct):
maxHp: int maxHp: int
atk: int atk: int
def_: int = field(name="def") def_: int = field(name='def')
magicResistance: float magicResistance: float
cost: int cost: int
blockCnt: int blockCnt: int
@ -65,9 +65,9 @@ class CharacterDataAttributesKeyFrame(BaseStruct):
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class CharacterDataPhaseData(BaseStruct): class CharacterDataPhaseData(BaseStruct):
@ -129,7 +129,7 @@ class ExternalBuff(BaseStruct):
class CharacterDataPotentialRank(BaseStruct): class CharacterDataPotentialRank(BaseStruct):
type_: int = field(name="type") type_: int = field(name='type')
description: str description: str
buff: Union[ExternalBuff, None] buff: Union[ExternalBuff, None]
equivalentCost: Union[ItemBundle, None] equivalentCost: Union[ItemBundle, None]
@ -191,7 +191,7 @@ class CharPatchDataPatchDetailInfo(BaseStruct):
class CharPatchTable(BaseStruct): class CharPatchTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
infos: Dict[str, CharPatchDataPatchInfo] infos: Dict[str, CharPatchDataPatchInfo]
patchChars: Dict[str, CharacterData] patchChars: Dict[str, CharacterData]

View File

@ -33,7 +33,7 @@ class CharacterDataTraitDataBundle(BaseStruct):
class AttributesData(BaseStruct): class AttributesData(BaseStruct):
maxHp: int maxHp: int
atk: int atk: int
def_: int = field(name="def") def_: int = field(name='def')
magicResistance: float magicResistance: float
cost: int cost: int
blockCnt: int blockCnt: int
@ -61,9 +61,9 @@ class CharacterDataAttributesKeyFrame(BaseStruct):
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class CharacterDataPhaseData(BaseStruct): class CharacterDataPhaseData(BaseStruct):
@ -126,7 +126,7 @@ class ExternalBuff(BaseStruct):
class CharacterDataPotentialRank(BaseStruct): class CharacterDataPotentialRank(BaseStruct):
type_: int = field(name="type") type_: int = field(name='type')
description: str description: str
buff: Union[ExternalBuff, None] buff: Union[ExternalBuff, None]
equivalentCost: Union[ItemBundle, None] equivalentCost: Union[ItemBundle, None]
@ -175,7 +175,7 @@ class CharacterData(BaseStruct):
class CharacterTable(BaseStruct): class CharacterTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
chars: Dict[str, CharacterData] chars: Dict[str, CharacterData]

View File

@ -31,7 +31,7 @@ class RuneData(BaseStruct):
class RuneTablePackedRuneData(BaseStruct): class RuneTablePackedRuneData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
points: float points: float
mutexGroupKey: Union[str, None] mutexGroupKey: Union[str, None]
description: str description: str
@ -39,7 +39,7 @@ class RuneTablePackedRuneData(BaseStruct):
class CharmItemData(BaseStruct): class CharmItemData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
sort: int sort: int
name: str name: str
icon: str icon: str
@ -58,6 +58,6 @@ class CharmItemData(BaseStruct):
class CharmTable(BaseStruct): class CharmTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
charmList: List[CharmItemData] charmList: List[CharmItemData]

View File

@ -36,7 +36,7 @@ class VoiceLangInfoData(BaseStruct):
class VoiceLangData(BaseStruct): class VoiceLangData(BaseStruct):
wordkeys: List[str] wordkeys: List[str]
charId: str charId: str
dict_: Dict[str, VoiceLangInfoData] = field(name="dict") dict_: Dict[str, VoiceLangInfoData] = field(name='dict')
class VoiceLangTypeData(BaseStruct): class VoiceLangTypeData(BaseStruct):
@ -55,7 +55,7 @@ class NewVoiceTimeData(BaseStruct):
class CharwordTable(BaseStruct): class CharwordTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
charWords: Dict[str, CharWordData] charWords: Dict[str, CharWordData]
voiceLangDict: Dict[str, VoiceLangData] voiceLangDict: Dict[str, VoiceLangData]

View File

@ -6,9 +6,9 @@ from msgspec import field
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class MonthlySignInData(BaseStruct): class MonthlySignInData(BaseStruct):
@ -36,7 +36,7 @@ class MonthlyDailyBonusGroup(BaseStruct):
class CheckinTable(BaseStruct): class CheckinTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
groups: Dict[str, MonthlySignInGroupData] groups: Dict[str, MonthlySignInGroupData]
monthlySubItem: Dict[str, List[MonthlyDailyBonusGroup]] monthlySubItem: Dict[str, List[MonthlyDailyBonusGroup]]

View File

@ -6,9 +6,9 @@ from msgspec import field
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class ClimbTowerSingleTowerDataClimbTowerTaskRewardData(BaseStruct): class ClimbTowerSingleTowerDataClimbTowerTaskRewardData(BaseStruct):
@ -17,7 +17,7 @@ class ClimbTowerSingleTowerDataClimbTowerTaskRewardData(BaseStruct):
class ClimbTowerSingleTowerData(BaseStruct): class ClimbTowerSingleTowerData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
sortId: int sortId: int
stageNum: int stageNum: int
name: str name: str
@ -42,29 +42,29 @@ class ClimbTowerSingleTowerData(BaseStruct):
class WeightItemBundle(BaseStruct): class WeightItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
type_: str = field(name="type") type_: str = field(name='type')
dropType: str dropType: str
count: int count: int
weight: int weight: int
class StageDataDisplayRewards(BaseStruct): class StageDataDisplayRewards(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
dropType: int dropType: int
class StageDataDisplayDetailRewards(BaseStruct): class StageDataDisplayDetailRewards(BaseStruct):
occPercent: int occPercent: int
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
dropType: int dropType: int
class ClimbTowerDropDisplayInfo(BaseStruct): class ClimbTowerDropDisplayInfo(BaseStruct):
itemId: str itemId: str
type_: int = field(name="type") type_: int = field(name='type')
maxCount: int maxCount: int
minCount: int minCount: int
@ -77,7 +77,7 @@ class ClimbTowerLevelDropInfo(BaseStruct):
class ClimbTowerSingleLevelData(BaseStruct): class ClimbTowerSingleLevelData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
levelId: str levelId: str
towerId: str towerId: str
layerNum: int layerNum: int
@ -90,7 +90,7 @@ class ClimbTowerSingleLevelData(BaseStruct):
class ClimbTowerTacticalBuffData(BaseStruct): class ClimbTowerTacticalBuffData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
desc: str desc: str
profession: str profession: str
isDefaultActive: bool isDefaultActive: bool
@ -124,7 +124,7 @@ class RuneData(BaseStruct):
class RuneTablePackedRuneData(BaseStruct): class RuneTablePackedRuneData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
points: float points: float
mutexGroupKey: Union[str, None] mutexGroupKey: Union[str, None]
description: str description: str
@ -132,8 +132,8 @@ class RuneTablePackedRuneData(BaseStruct):
class ClimbTowerMainCardData(BaseStruct): class ClimbTowerMainCardData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
type_: str = field(name="type") type_: str = field(name='type')
linkedTowerId: Union[str, None] linkedTowerId: Union[str, None]
sortId: int sortId: int
name: str name: str
@ -144,7 +144,7 @@ class ClimbTowerMainCardData(BaseStruct):
class ClimbTowerSubCardData(BaseStruct): class ClimbTowerSubCardData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
mainCardId: str mainCardId: str
sortId: int sortId: int
name: str name: str
@ -154,7 +154,7 @@ class ClimbTowerSubCardData(BaseStruct):
class ClimbTowerCurseCardData(BaseStruct): class ClimbTowerCurseCardData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
towerIdList: List[str] towerIdList: List[str]
name: str name: str
desc: str desc: str
@ -162,7 +162,7 @@ class ClimbTowerCurseCardData(BaseStruct):
class ClimbTowerSeasonInfoData(BaseStruct): class ClimbTowerSeasonInfoData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
name: str name: str
startTs: int startTs: int
endTs: int endTs: int
@ -196,16 +196,16 @@ class ClimbTowerRewardInfo(BaseStruct):
class MissionDisplayRewards(BaseStruct): class MissionDisplayRewards(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
class MissionData(BaseStruct): class MissionData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
sortId: int sortId: int
description: str description: str
type_: str = field(name="type") type_: str = field(name='type')
itemBgType: str itemBgType: str
preMissionIds: Union[List[str], None] preMissionIds: Union[List[str], None]
template: str template: str
@ -228,9 +228,9 @@ class ClimbTowerMissionData(MissionData):
class MissionGroup(BaseStruct): class MissionGroup(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
title: Union[str, None] title: Union[str, None]
type_: str = field(name="type") type_: str = field(name='type')
preMissionGroup: Union[str, None] preMissionGroup: Union[str, None]
period: Union[List[int], None] period: Union[List[int], None]
rewards: List[MissionDisplayRewards] rewards: List[MissionDisplayRewards]
@ -240,7 +240,7 @@ class MissionGroup(BaseStruct):
class ClimbTowerTable(BaseStruct): class ClimbTowerTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
towers: Dict[str, ClimbTowerSingleTowerData] towers: Dict[str, ClimbTowerSingleTowerData]
levels: Dict[str, ClimbTowerSingleLevelData] levels: Dict[str, ClimbTowerSingleLevelData]

View File

@ -21,7 +21,7 @@ class MeetingClueDataReceiveTimeBonus(BaseStruct):
class ClueData(BaseStruct): class ClueData(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
clues: List[MeetingClueDataClueData] clues: List[MeetingClueDataClueData]
clueTypes: List[MeetingClueDataClueTypeData] clueTypes: List[MeetingClueDataClueTypeData]

View File

@ -6,9 +6,9 @@ from msgspec import field
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class StringKeyFrames(BaseStruct): class StringKeyFrames(BaseStruct):
@ -34,7 +34,7 @@ class CrisisMapRankInfo(BaseStruct):
class CrisisTable(BaseStruct): class CrisisTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
seasonInfo: List[CrisisClientDataSeasonInfo] seasonInfo: List[CrisisClientDataSeasonInfo]
meta: str meta: str

View File

@ -7,9 +7,9 @@ from msgspec import field
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class StringKeyFrames(BaseStruct): class StringKeyFrames(BaseStruct):
@ -31,13 +31,13 @@ class CrisisV2ConstData(BaseStruct):
class appraiseType(Enum): class appraiseType(Enum):
RANK_D = "RANK_D" RANK_D = 'RANK_D'
RANK_C = "RANK_C" RANK_C = 'RANK_C'
RANK_B = "RANK_B" RANK_B = 'RANK_B'
RANK_A = "RANK_A" RANK_A = 'RANK_A'
RANK_S = "RANK_S" RANK_S = 'RANK_S'
RANK_SS = "RANK_SS" RANK_SS = 'RANK_SS'
RANK_SSS = "RANK_SSS" RANK_SSS = 'RANK_SSS'
class CrisisV2ScoreLevelToAppraiseData(BaseStruct): class CrisisV2ScoreLevelToAppraiseData(BaseStruct):
@ -45,7 +45,7 @@ class CrisisV2ScoreLevelToAppraiseData(BaseStruct):
class CrisisV2Table(BaseStruct): class CrisisV2Table(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
seasonInfoDataMap: Dict seasonInfoDataMap: Dict
scoreLevelToAppraiseDataMap: Dict[str, CrisisV2ScoreLevelToAppraiseData] scoreLevelToAppraiseDataMap: Dict[str, CrisisV2ScoreLevelToAppraiseData]

View File

@ -42,8 +42,8 @@ class HomeBackgroundSingleData(BaseStruct):
class HomeBackgroundThemeData(BaseStruct): class HomeBackgroundThemeData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
type_: str = field(name="type") type_: str = field(name='type')
sortId: int sortId: int
startTime: int startTime: int
tmName: str tmName: str
@ -61,7 +61,7 @@ class ThemeLimitInfo(BaseStruct):
class HomeBackgroundThemeLimitData(BaseStruct): class HomeBackgroundThemeLimitData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
limitInfos: List[ThemeLimitInfo] limitInfos: List[ThemeLimitInfo]
@ -76,7 +76,7 @@ class HomeBackgroundData(BaseStruct):
class DisplayMetaTable(BaseStruct): class DisplayMetaTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
playerAvatarData: PlayerAvatarData playerAvatarData: PlayerAvatarData
homeBackgroundData: HomeBackgroundData homeBackgroundData: HomeBackgroundData

View File

@ -31,14 +31,14 @@ class EnemyHandBookData(BaseStruct):
class EnemyHandbookLevelInfoDataRangePair(BaseStruct): class EnemyHandbookLevelInfoDataRangePair(BaseStruct):
min_: float = field(name="min") min_: float = field(name='min')
max_: float = field(name="max") max_: float = field(name='max')
class EnemyHandbookLevelInfoData(BaseStruct): class EnemyHandbookLevelInfoData(BaseStruct):
classLevel: str classLevel: str
attack: EnemyHandbookLevelInfoDataRangePair attack: EnemyHandbookLevelInfoDataRangePair
def_: EnemyHandbookLevelInfoDataRangePair = field(name="def") def_: EnemyHandbookLevelInfoDataRangePair = field(name='def')
magicRes: EnemyHandbookLevelInfoDataRangePair magicRes: EnemyHandbookLevelInfoDataRangePair
maxHP: EnemyHandbookLevelInfoDataRangePair maxHP: EnemyHandbookLevelInfoDataRangePair
moveSpeed: EnemyHandbookLevelInfoDataRangePair moveSpeed: EnemyHandbookLevelInfoDataRangePair
@ -48,13 +48,13 @@ class EnemyHandbookLevelInfoData(BaseStruct):
class EnemyHandbookRaceData(BaseStruct): class EnemyHandbookRaceData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
raceName: str raceName: str
sortId: int sortId: int
class EnemyHandbookTable(BaseStruct): class EnemyHandbookTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
levelInfoList: List[EnemyHandbookLevelInfoData] levelInfoList: List[EnemyHandbookLevelInfoData]
enemyData: Dict[str, EnemyHandBookData] enemyData: Dict[str, EnemyHandBookData]

View File

@ -15,7 +15,7 @@ class FavorDataFrames(BaseStruct):
class FavorTable(BaseStruct): class FavorTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
maxFavor: int maxFavor: int
favorFrames: List[FavorDataFrames] favorFrames: List[FavorDataFrames]

View File

@ -32,9 +32,9 @@ class GachaDataCarouselData(BaseStruct):
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class GachaDataRecruitRange(BaseStruct): class GachaDataRecruitRange(BaseStruct):
@ -131,7 +131,7 @@ class GachaDataFesGachaPoolRelateItem(BaseStruct):
class GachaTable(BaseStruct): class GachaTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
gachaTags: List[GachaTag] gachaTags: List[GachaTag]
carousel: List[GachaDataCarouselData] carousel: List[GachaDataCarouselData]

View File

@ -6,9 +6,9 @@ from msgspec import field
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class GameDataConstsCharAssistRefreshTimeState(BaseStruct): class GameDataConstsCharAssistRefreshTimeState(BaseStruct):
@ -23,7 +23,7 @@ class TermDescriptionData(BaseStruct):
class GamedataConst(BaseStruct): class GamedataConst(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
addedRewardDisplayZone: str addedRewardDisplayZone: str
advancedGachaCrystalCost: int advancedGachaCrystalCost: int

View File

@ -13,9 +13,9 @@ class HandbookUnlockParam(BaseStruct):
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class HandbookStageTimeData(BaseStruct): class HandbookStageTimeData(BaseStruct):
@ -43,11 +43,11 @@ class HandbookStoryStageData(BaseStruct):
class HandbookDisplayCondition(BaseStruct): class HandbookDisplayCondition(BaseStruct):
charId: str charId: str
conditionCharId: str conditionCharId: str
type_: str = field(name="type") type_: str = field(name='type')
class HandbookTeamMission(BaseStruct): class HandbookTeamMission(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
sort: int sort: int
powerId: str powerId: str
powerName: str powerName: str
@ -122,7 +122,7 @@ class HandbookInfoData(BaseStruct):
class HandbookInfoTable(BaseStruct): class HandbookInfoTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
handbookDict: Dict[str, HandbookInfoData] handbookDict: Dict[str, HandbookInfoData]
npcDict: Dict[str, NPCData] npcDict: Dict[str, NPCData]

View File

@ -40,6 +40,6 @@ class CharHandbook(BaseStruct):
class HandbookTable(BaseStruct): class HandbookTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
char_102_texas: CharHandbook char_102_texas: CharHandbook

View File

@ -15,6 +15,6 @@ class HandbookTeam(BaseStruct):
class HandbookTeamTable(BaseStruct): class HandbookTeamTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
team: Dict[str, HandbookTeam] team: Dict[str, HandbookTeam]

View File

@ -16,9 +16,9 @@ class ItemDataBuildingProductInfo(BaseStruct):
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class FavorCharacterInfo(BaseStruct): class FavorCharacterInfo(BaseStruct):
@ -47,13 +47,13 @@ class UniCollectionInfo(BaseStruct):
class ApSupplyFeature(BaseStruct): class ApSupplyFeature(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
ap: int ap: int
hasTs: bool hasTs: bool
class ExpItemFeature(BaseStruct): class ExpItemFeature(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
gainExp: int gainExp: int
@ -83,7 +83,7 @@ class ItemData(BaseStruct):
class CharVoucherItemFeature(BaseStruct): class CharVoucherItemFeature(BaseStruct):
displayType: int displayType: int
id_: str = field(name="id") id_: str = field(name='id')
class ServerItemReminderMailData(BaseStruct): class ServerItemReminderMailData(BaseStruct):
@ -98,7 +98,7 @@ class ServerItemReminderInfo(BaseStruct):
class ItemTable(BaseStruct): class ItemTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
activityPotentialCharacters: Dict[str, ActivityPotentialCharacterInfo] activityPotentialCharacters: Dict[str, ActivityPotentialCharacterInfo]
apSupplies: Dict[str, ApSupplyFeature] apSupplies: Dict[str, ApSupplyFeature]

View File

@ -8,13 +8,13 @@ from msgspec import field
class MedalExpireTime(BaseStruct): class MedalExpireTime(BaseStruct):
start: int start: int
end: int end: int
type_: str = field(name="type") type_: str = field(name='type')
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class MedalGroupData(BaseStruct): class MedalGroupData(BaseStruct):
@ -61,7 +61,7 @@ class MedalPerData(BaseStruct):
class MedalTable(BaseStruct): class MedalTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
medalList: List[MedalPerData] medalList: List[MedalPerData]
medalTypeData: Dict[str, MedalTypeData] medalTypeData: Dict[str, MedalTypeData]

View File

@ -6,8 +6,8 @@ from msgspec import field
class MissionDisplayRewards(BaseStruct): class MissionDisplayRewards(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
@ -28,26 +28,26 @@ class MissionWeeklyRewardConf(BaseStruct):
beginTime: int beginTime: int
endTime: int endTime: int
groupId: str groupId: str
id_: str = field(name="id") id_: str = field(name='id')
periodicalPointCost: int periodicalPointCost: int
type_: str = field(name="type") type_: str = field(name='type')
sortIndex: int sortIndex: int
rewards: List[MissionDisplayRewards] rewards: List[MissionDisplayRewards]
class MissionDailyRewardConf(BaseStruct): class MissionDailyRewardConf(BaseStruct):
groupId: str groupId: str
id_: str = field(name="id") id_: str = field(name='id')
periodicalPointCost: int periodicalPointCost: int
type_: str = field(name="type") type_: str = field(name='type')
sortIndex: int sortIndex: int
rewards: List[MissionDisplayRewards] rewards: List[MissionDisplayRewards]
class MissionGroup(BaseStruct): class MissionGroup(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
title: Union[str, None] title: Union[str, None]
type_: str = field(name="type") type_: str = field(name='type')
preMissionGroup: Union[str, None] preMissionGroup: Union[str, None]
period: Union[List[int], None] period: Union[List[int], None]
rewards: Union[List[MissionDisplayRewards], None] rewards: Union[List[MissionDisplayRewards], None]
@ -57,10 +57,10 @@ class MissionGroup(BaseStruct):
class MissionData(BaseStruct): class MissionData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
sortId: int sortId: int
description: str description: str
type_: str = field(name="type") type_: str = field(name='type')
itemBgType: str itemBgType: str
preMissionIds: Union[List[str], None] preMissionIds: Union[List[str], None]
template: str template: str
@ -78,7 +78,7 @@ class MissionData(BaseStruct):
class MissionTable(BaseStruct): class MissionTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
missions: Dict[str, MissionData] missions: Dict[str, MissionData]
missionGroups: Dict[str, MissionGroup] missionGroups: Dict[str, MissionGroup]

View File

@ -6,21 +6,21 @@ from msgspec import field
class RewardItem(BaseStruct): class RewardItem(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
sortId: int sortId: int
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
class MissionDisplayRewards(BaseStruct): class MissionDisplayRewards(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
@ -42,7 +42,7 @@ class ReturnCheckinData(BaseStruct):
class ReturnLongTermTaskData(BaseStruct): class ReturnLongTermTaskData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
sortId: int sortId: int
template: str template: str
param: List[str] param: List[str]
@ -53,7 +53,7 @@ class ReturnLongTermTaskData(BaseStruct):
class ReturnDailyTaskData(BaseStruct): class ReturnDailyTaskData(BaseStruct):
groupId: str groupId: str
id_: str = field(name="id") id_: str = field(name='id')
groupSortId: int groupSortId: int
taskSortId: int taskSortId: int
template: str template: str
@ -105,10 +105,10 @@ class ChainLoginData(BaseStruct):
class MissionData(BaseStruct): class MissionData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
sortId: int sortId: int
description: str description: str
type_: str = field(name="type") type_: str = field(name='type')
itemBgType: str itemBgType: str
preMissionIds: None preMissionIds: None
template: str template: str
@ -126,9 +126,9 @@ class MissionData(BaseStruct):
class MissionGroup(BaseStruct): class MissionGroup(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
title: None title: None
type_: str = field(name="type") type_: str = field(name='type')
preMissionGroup: None preMissionGroup: None
period: None period: None
rewards: None rewards: None
@ -145,7 +145,7 @@ class OpenServerData(BaseStruct):
class OpenServerScheduleItem(BaseStruct): class OpenServerScheduleItem(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
startTs: int startTs: int
endTs: int endTs: int
totalCheckinDescption: str totalCheckinDescption: str
@ -269,7 +269,7 @@ class OpenServerNewbieCheckInPackage(BaseStruct):
class OpenServerTable(BaseStruct): class OpenServerTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
schedule: List[OpenServerScheduleItem] schedule: List[OpenServerScheduleItem]
dataMap: Dict[str, OpenServerData] dataMap: Dict[str, OpenServerData]

View File

@ -21,7 +21,7 @@ class PlayerAvatarPerData(BaseStruct):
class PlayerAvatarTable(BaseStruct): class PlayerAvatarTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
avatarList: List[PlayerAvatarPerData] avatarList: List[PlayerAvatarPerData]
avatarTypeData: Dict[str, PlayerAvatarGroupData] avatarTypeData: Dict[str, PlayerAvatarGroupData]

View File

@ -18,13 +18,13 @@ class ObscuredRect(BaseStruct):
class Stage(BaseStruct): class Stage(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
direction: int direction: int
grids: List[GridPosition] grids: List[GridPosition]
boundingBoxes: Union[List[ObscuredRect], None] = None boundingBoxes: Union[List[ObscuredRect], None] = None
class RangeTable(BaseStruct): class RangeTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
range_: Dict[str, Stage] range_: Dict[str, Stage]

View File

@ -6,9 +6,9 @@ from msgspec import field
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class ReplicateData(BaseStruct): class ReplicateData(BaseStruct):
@ -21,6 +21,6 @@ class ReplicateList(BaseStruct):
class ReplicateTable(BaseStruct): class ReplicateTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
replicate: Dict[str, ReplicateList] replicate: Dict[str, ReplicateList]

View File

@ -6,14 +6,14 @@ from msgspec import field
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class StageDataDisplayRewards(BaseStruct): class StageDataDisplayRewards(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
dropType: int dropType: int
@ -32,8 +32,8 @@ class Act17sideDataChoiceNodeOptionData(BaseStruct):
class StageDataDisplayDetailRewards(BaseStruct): class StageDataDisplayDetailRewards(BaseStruct):
occPercent: int occPercent: int
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
dropType: int dropType: int
CannotGetPercent: Union[float, None] = None CannotGetPercent: Union[float, None] = None
GetPercent: Union[float, None] = None GetPercent: Union[float, None] = None
@ -69,7 +69,7 @@ class Act17sideDataMainlineChapterData(BaseStruct):
chapterDes: str chapterDes: str
chapterIcon: str chapterIcon: str
unlockDes: str unlockDes: str
id_: str = field(name="id") id_: str = field(name='id')
class RunesSelector(BaseStruct): class RunesSelector(BaseStruct):
@ -92,7 +92,7 @@ class TechTreeBranchRunes(BaseStruct):
class BranchRuneData(BaseStruct): class BranchRuneData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
points: float points: float
mutexGroupKey: None mutexGroupKey: None
description: str description: str
@ -260,7 +260,7 @@ class RuneData(BaseStruct):
class RuneTablePackedRuneData(BaseStruct): class RuneTablePackedRuneData(BaseStruct):
description: str description: str
id_: str = field(name="id") id_: str = field(name='id')
points: float points: float
runes: List[RuneData] runes: List[RuneData]
mutexGroupKey: Union[str, None] = None mutexGroupKey: Union[str, None] = None
@ -316,8 +316,8 @@ class RetroTrailRuleData(BaseStruct):
class WeightItemBundle(BaseStruct): class WeightItemBundle(BaseStruct):
count: int count: int
dropType: str dropType: str
id_: str = field(name="id") id_: str = field(name='id')
type_: str = field(name="type") type_: str = field(name='type')
weight: int weight: int
@ -401,7 +401,7 @@ class RetroTrailData(BaseStruct):
class RetroActData(BaseStruct): class RetroActData(BaseStruct):
retroId: str retroId: str
type_: int = field(name="type") type_: int = field(name='type')
linkedActId: List[str] linkedActId: List[str]
startTime: int startTime: int
trailStartTime: int trailStartTime: int
@ -430,7 +430,7 @@ class RetroStageOverrideInfo(BaseStruct):
class RetroTable(BaseStruct): class RetroTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
customData: ActivityCustomData customData: ActivityCustomData
initRetroCoin: int initRetroCoin: int

View File

@ -28,12 +28,12 @@ class RoguelikeOuterBuff(BaseStruct):
class RoguelikeOutBuffData(BaseStruct): class RoguelikeOutBuffData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
buffs: Dict[str, RoguelikeOuterBuff] buffs: Dict[str, RoguelikeOuterBuff]
class RoguelikeEndingData(BaseStruct): class RoguelikeEndingData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
backgroundId: str backgroundId: str
name: str name: str
description: str description: str
@ -43,7 +43,7 @@ class RoguelikeEndingData(BaseStruct):
class RoguelikeModeData(BaseStruct): class RoguelikeModeData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
name: str name: str
canUnlockItem: int canUnlockItem: int
scoreFactor: float scoreFactor: float
@ -56,24 +56,24 @@ class RoguelikeModeData(BaseStruct):
class RoguelikeChoiceSceneData(BaseStruct): class RoguelikeChoiceSceneData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
title: str title: str
description: str description: str
background: str background: str
class RoguelikeChoiceData(BaseStruct): class RoguelikeChoiceData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
title: str title: str
description: Union[str, None] description: Union[str, None]
type_: str = field(name="type") type_: str = field(name='type')
nextSceneId: Union[str, None] nextSceneId: Union[str, None]
icon: Union[str, None] icon: Union[str, None]
param: Dict[str, object] param: Dict[str, object]
class RoguelikeZoneData(BaseStruct): class RoguelikeZoneData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
name: str name: str
description: str description: str
endingDescription: str endingDescription: str
@ -82,7 +82,7 @@ class RoguelikeZoneData(BaseStruct):
class RoguelikeStageData(BaseStruct): class RoguelikeStageData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
linkedStageId: str linkedStageId: str
levelId: str levelId: str
code: str code: str
@ -96,12 +96,12 @@ class RoguelikeStageData(BaseStruct):
class RoguelikeRelicFeature(BaseStruct): class RoguelikeRelicFeature(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
buffs: List[RoguelikeBuff] buffs: List[RoguelikeBuff]
class RoguelikeUpgradeTicketFeature(BaseStruct): class RoguelikeUpgradeTicketFeature(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
profession: int profession: int
rarity: int rarity: int
professionList: List[str] professionList: List[str]
@ -109,7 +109,7 @@ class RoguelikeUpgradeTicketFeature(BaseStruct):
class RoguelikeRecruitTicketFeature(BaseStruct): class RoguelikeRecruitTicketFeature(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
profession: int profession: int
rarity: int rarity: int
professionList: List[str] professionList: List[str]
@ -125,13 +125,13 @@ class RelicStableUnlockParam(BaseStruct):
class RoguelikeItemData(BaseStruct): class RoguelikeItemData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
name: str name: str
description: Union[str, None] description: Union[str, None]
usage: str usage: str
obtainApproach: str obtainApproach: str
iconId: str iconId: str
type_: str = field(name="type") type_: str = field(name='type')
rarity: str rarity: str
value: int value: int
sortId: int sortId: int
@ -193,7 +193,7 @@ class RoguelikeConstTable(BaseStruct):
class RoguelikeTable(BaseStruct): class RoguelikeTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
constTable: RoguelikeConstTable constTable: RoguelikeConstTable
itemTable: RoguelikeItemTable itemTable: RoguelikeItemTable

View File

@ -21,7 +21,7 @@ class RoguelikeTopicConfig(BaseStruct):
class RoguelikeTopicBasicData(BaseStruct): class RoguelikeTopicBasicData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
name: str name: str
startTime: int startTime: int
disappearTimeOnMainScreen: int disappearTimeOnMainScreen: int
@ -68,7 +68,7 @@ class RoguelikeTopicEnroll(BaseStruct):
class RoguelikeTopicBP(BaseStruct): class RoguelikeTopicBP(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
level: int level: int
tokenNum: int tokenNum: int
nextTokenNum: int nextTokenNum: int
@ -88,9 +88,9 @@ class RoguelikeTopicMilestoneUpdateData(BaseStruct):
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class RoguelikeTopicBPGrandPrize(BaseStruct): class RoguelikeTopicBPGrandPrize(BaseStruct):
@ -111,7 +111,7 @@ class RoguelikeTopicBPGrandPrize(BaseStruct):
class RoguelikeTopicMonthMission(BaseStruct): class RoguelikeTopicMonthMission(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
taskName: str taskName: str
taskClass: str taskClass: str
innerClassWeight: int innerClassWeight: int
@ -122,7 +122,7 @@ class RoguelikeTopicMonthMission(BaseStruct):
class RoguelikeTopicMonthSquad(BaseStruct): class RoguelikeTopicMonthSquad(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
teamName: str teamName: str
teamSubName: Union[str, None] teamSubName: Union[str, None]
teamFlavorDesc: Union[str, None] teamFlavorDesc: Union[str, None]
@ -292,8 +292,8 @@ class ActArchiveBuffData(BaseStruct):
class ActArchiveTotemItemData(BaseStruct): class ActArchiveTotemItemData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
type_: int = field(name="type") type_: int = field(name='type')
enrollConditionId: Union[str, None] enrollConditionId: Union[str, None]
sortId: int sortId: int
@ -303,7 +303,7 @@ class ActArchiveTotemData(BaseStruct):
class ActArchiveChaosItemData(BaseStruct): class ActArchiveChaosItemData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
isHidden: bool isHidden: bool
enrollId: Union[str, None] enrollId: Union[str, None]
sortId: int sortId: int
@ -412,7 +412,7 @@ class RoguelikeGameInitData(BaseStruct):
class RoguelikeGameStageData(BaseStruct): class RoguelikeGameStageData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
linkedStageId: str linkedStageId: str
levelId: str levelId: str
code: str code: str
@ -431,7 +431,7 @@ class RoguelikeGameStageData(BaseStruct):
class RoguelikeGameZoneData(BaseStruct): class RoguelikeGameZoneData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
name: str name: str
clockPerformance: Union[str, None] clockPerformance: Union[str, None]
displayTime: Union[str, None] displayTime: Union[str, None]
@ -453,7 +453,7 @@ class RoguelikeGameTrapData(BaseStruct):
class RoguelikeGameRecruitTicketData(BaseStruct): class RoguelikeGameRecruitTicketData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
profession: int profession: int
rarity: int rarity: int
professionList: List[str] professionList: List[str]
@ -464,7 +464,7 @@ class RoguelikeGameRecruitTicketData(BaseStruct):
class RoguelikeGameUpgradeTicketData(BaseStruct): class RoguelikeGameUpgradeTicketData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
profession: int profession: int
rarity: int rarity: int
professionList: List[str] professionList: List[str]
@ -472,7 +472,7 @@ class RoguelikeGameUpgradeTicketData(BaseStruct):
class RoguelikeGameCustomTicketData(BaseStruct): class RoguelikeGameCustomTicketData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
subType: str subType: str
discardText: str discardText: str
@ -489,7 +489,7 @@ class RoguelikeBuff(BaseStruct):
class RoguelikeGameRelicData(BaseStruct): class RoguelikeGameRelicData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
buffs: List[RoguelikeBuff] buffs: List[RoguelikeBuff]
@ -500,13 +500,13 @@ class RoguelikeGameRelicCheckParam(BaseStruct):
class RoguelikeGameRelicParamData(BaseStruct): class RoguelikeGameRelicParamData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
checkCharBoxTypes: List[str] checkCharBoxTypes: List[str]
checkCharBoxParams: List[RoguelikeGameRelicCheckParam] checkCharBoxParams: List[RoguelikeGameRelicCheckParam]
class RoguelikeGameRecruitGrpData(BaseStruct): class RoguelikeGameRecruitGrpData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
iconId: str iconId: str
name: str name: str
desc: str desc: str
@ -514,7 +514,7 @@ class RoguelikeGameRecruitGrpData(BaseStruct):
class RoguelikeChoiceDisplayData(BaseStruct): class RoguelikeChoiceDisplayData(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
funcIconId: Union[str, None] funcIconId: Union[str, None]
itemId: Union[str, None] itemId: Union[str, None]
taskId: Union[str, None] taskId: Union[str, None]
@ -524,11 +524,11 @@ class RoguelikeChoiceDisplayData(BaseStruct):
class RoguelikeGameChoiceData(BaseStruct): class RoguelikeGameChoiceData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
title: str title: str
description: Union[str, None] description: Union[str, None]
lockedCoverDesc: Union[str, None] lockedCoverDesc: Union[str, None]
type_: str = field(name="type") type_: str = field(name='type')
leftDecoType: str leftDecoType: str
nextSceneId: Union[str, None] nextSceneId: Union[str, None]
icon: Union[str, None] icon: Union[str, None]
@ -537,7 +537,7 @@ class RoguelikeGameChoiceData(BaseStruct):
class RoguelikeGameChoiceSceneData(BaseStruct): class RoguelikeGameChoiceSceneData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
title: str title: str
description: str description: str
background: Union[str, None] background: Union[str, None]
@ -560,8 +560,8 @@ class RoguelikeGameNodeSubTypeData(BaseStruct):
class RoguelikeGameVariationData(BaseStruct): class RoguelikeGameVariationData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
type_: str = field(name="type") type_: str = field(name='type')
outerName: str outerName: str
innerName: str innerName: str
functionDesc: str functionDesc: str
@ -571,7 +571,7 @@ class RoguelikeGameVariationData(BaseStruct):
class RoguelikeGameCharBuffData(BaseStruct): class RoguelikeGameCharBuffData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
iconId: str iconId: str
outerName: str outerName: str
innerName: str innerName: str
@ -581,7 +581,7 @@ class RoguelikeGameCharBuffData(BaseStruct):
class RoguelikeGameSquadBuffData(BaseStruct): class RoguelikeGameSquadBuffData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
iconId: str iconId: str
outerName: str outerName: str
innerName: str innerName: str
@ -663,7 +663,7 @@ class RoguelikeGameEndingDataLevelIcon(BaseStruct):
class RoguelikeGameEndingData(BaseStruct): class RoguelikeGameEndingData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
familyId: int familyId: int
name: str name: str
desc: str desc: str
@ -685,13 +685,13 @@ class TipData(BaseStruct):
class RoguelikeGameItemData(BaseStruct): class RoguelikeGameItemData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
name: str name: str
description: Union[str, None] description: Union[str, None]
usage: str usage: str
obtainApproach: str obtainApproach: str
iconId: str iconId: str
type_: str = field(name="type") type_: str = field(name='type')
subType: str subType: str
rarity: str rarity: str
value: int value: int
@ -961,7 +961,7 @@ class RoguelikeVisionData(BaseStruct):
class RoguelikeVisionModuleDataVisionChoiceConfig(BaseStruct): class RoguelikeVisionModuleDataVisionChoiceConfig(BaseStruct):
value: int value: int
type_: int = field(name="type") type_: int = field(name='type')
class RoguelikeVisionModuleConsts(BaseStruct): class RoguelikeVisionModuleConsts(BaseStruct):
@ -1227,7 +1227,7 @@ class RoguelikeTopicCustomizeData(BaseStruct):
class RoguelikeTopicTable(BaseStruct): class RoguelikeTopicTable(BaseStruct):
__version__ = "23-04-23-15-07-53-24a81c" __version__ = '23-04-23-15-07-53-24a81c'
topics: Dict[str, RoguelikeTopicBasicData] topics: Dict[str, RoguelikeTopicBasicData]
constant: RoguelikeTopicConst constant: RoguelikeTopicConst

View File

@ -240,7 +240,7 @@ class SandboxEventData(BaseStruct):
class SandboxEventSceneData(BaseStruct): class SandboxEventSceneData(BaseStruct):
choiceSceneId: str choiceSceneId: str
type_: str = field(name="type") type_: str = field(name='type')
title: str title: str
description: str description: str
choices: List[str] choices: List[str]
@ -248,7 +248,7 @@ class SandboxEventSceneData(BaseStruct):
class SandboxEventChoiceData(BaseStruct): class SandboxEventChoiceData(BaseStruct):
choiceId: str choiceId: str
type_: str = field(name="type") type_: str = field(name='type')
costAction: int costAction: int
finishScene: bool finishScene: bool
title: str title: str
@ -272,12 +272,12 @@ class SandboxMissionData(BaseStruct):
class SandboxUnitData(BaseStruct): class SandboxUnitData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
name: str name: str
class SandboxDailyDescTemplateData(BaseStruct): class SandboxDailyDescTemplateData(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
templateDesc: List[str] templateDesc: List[str]
@ -296,7 +296,7 @@ class RushEnemyGroupConfig(BaseStruct):
class RushEnemyGroupRushEnemyDBRef(BaseStruct): class RushEnemyGroupRushEnemyDBRef(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
level: int level: int
@ -331,7 +331,7 @@ class RuneData(BaseStruct):
class RuneTablePackedRuneData(BaseStruct): class RuneTablePackedRuneData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
points: Union[int, float] points: Union[int, float]
mutexGroupKey: Union[str, None] mutexGroupKey: Union[str, None]
description: str description: str
@ -398,7 +398,7 @@ class SandboxItemData(BaseStruct):
class SandboxTable(BaseStruct): class SandboxTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
sandboxActTables: Dict[str, SandboxActTable] sandboxActTables: Dict[str, SandboxActTable]
itemDatas: Dict[str, SandboxItemData] itemDatas: Dict[str, SandboxItemData]

View File

@ -20,7 +20,7 @@ class ShopRecommendGroup(BaseStruct):
class ShopKeeperWord(BaseStruct): class ShopKeeperWord(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
text: str text: str
@ -91,7 +91,7 @@ class ShopCreditUnlockItem(BaseStruct):
class ShopCreditUnlockGroup(BaseStruct): class ShopCreditUnlockGroup(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
index: str index: str
startDateTime: int startDateTime: int
charDict: List[ShopCreditUnlockItem] charDict: List[ShopCreditUnlockItem]
@ -144,7 +144,7 @@ class LMTGSShopOverlaySchedule(BaseStruct):
class ShopClientTable(BaseStruct): class ShopClientTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
recommendList: List[ShopRecommendItem] recommendList: List[ShopRecommendItem]
creditUnlockGroup: Dict[str, ShopCreditUnlockGroup] creditUnlockGroup: Dict[str, ShopCreditUnlockGroup]

View File

@ -6,9 +6,9 @@ from msgspec import field
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class SpData(BaseStruct): class SpData(BaseStruct):
@ -46,6 +46,6 @@ class SkillDataBundle(BaseStruct):
class SkillTable(BaseStruct): class SkillTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
skills: Dict[str, SkillDataBundle] skills: Dict[str, SkillDataBundle]

View File

@ -82,7 +82,7 @@ class SpecialSkinInfo(BaseStruct):
class SkinTable(BaseStruct): class SkinTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
charSkins: Dict[str, CharSkinData] charSkins: Dict[str, CharSkinData]
buildinEvolveMap: Dict[str, Dict[str, str]] buildinEvolveMap: Dict[str, Dict[str, str]]

View File

@ -11,15 +11,15 @@ class StageDataConditionDesc(BaseStruct):
class StageDataDisplayRewards(BaseStruct): class StageDataDisplayRewards(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
dropType: int dropType: int
class StageDataDisplayDetailRewards(BaseStruct): class StageDataDisplayDetailRewards(BaseStruct):
occPercent: int occPercent: int
type_: str = field(name="type") type_: str = field(name='type')
id_: str = field(name="id") id_: str = field(name='id')
dropType: int dropType: int
@ -44,9 +44,9 @@ class ProgressInfo(BaseStruct):
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class ExtraInfo(BaseStruct): class ExtraInfo(BaseStruct):
@ -139,7 +139,7 @@ class TileAppendInfo(BaseStruct):
class WeeklyForceOpenTable(BaseStruct): class WeeklyForceOpenTable(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
startTime: int startTime: int
endTime: int endTime: int
forceOpenList: List[str] forceOpenList: List[str]
@ -241,7 +241,7 @@ class ApProtectZoneInfo(BaseStruct):
class StageTable(BaseStruct): class StageTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
stages: Dict[str, StageData] stages: Dict[str, StageData]
runeStageGroups: Dict[str, RuneStageGroupData] runeStageGroups: Dict[str, RuneStageGroupData]

View File

@ -11,9 +11,9 @@ class MiniActTrialDataRuleData(BaseStruct):
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class MiniActTrialDataMiniActTrialRewardData(BaseStruct): class MiniActTrialDataMiniActTrialRewardData(BaseStruct):
@ -38,23 +38,23 @@ class MiniActTrialData(BaseStruct):
class ActArchiveResDataPicArchiveResItemData(BaseStruct): class ActArchiveResDataPicArchiveResItemData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
desc: str desc: str
assetPath: str assetPath: str
type_: str = field(name="type") type_: str = field(name='type')
subType: Union[str, None] subType: Union[str, None]
picDescription: str picDescription: str
kvId: Union[str, None] kvId: Union[str, None]
class ActArchiveResDataAudioArchiveResItemData(BaseStruct): class ActArchiveResDataAudioArchiveResItemData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
desc: str desc: str
name: str name: str
class ActArchiveResDataAvgArchiveResItemData(BaseStruct): class ActArchiveResDataAvgArchiveResItemData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
desc: str desc: str
breifPath: Union[str, None] breifPath: Union[str, None]
contentPath: str contentPath: str
@ -64,7 +64,7 @@ class ActArchiveResDataAvgArchiveResItemData(BaseStruct):
class ActArchiveResDataStoryArchiveResItemData(BaseStruct): class ActArchiveResDataStoryArchiveResItemData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
desc: str desc: str
date: Union[str, None] date: Union[str, None]
pic: str pic: str
@ -86,7 +86,7 @@ class ActArchiveResDataActivityNewsLine(BaseStruct):
class ActArchiveResDataNewsArchiveResItemData(BaseStruct): class ActArchiveResDataNewsArchiveResItemData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
desc: str desc: str
newsType: str newsType: str
newsFormat: ActArchiveResDataNewsFormatData newsFormat: ActArchiveResDataNewsFormatData
@ -229,7 +229,7 @@ class ActArchiveComponentTable(BaseStruct):
class StoryReviewMetaTable(BaseStruct): class StoryReviewMetaTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
miniActTrialData: MiniActTrialData miniActTrialData: MiniActTrialData
actArchiveResData: ActArchiveResData actArchiveResData: ActArchiveResData

View File

@ -6,9 +6,9 @@ from msgspec import field
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class StoryDataConditionStageCondition(BaseStruct): class StoryDataConditionStageCondition(BaseStruct):
@ -40,7 +40,7 @@ class StoryReviewInfoClientData(BaseStruct):
class StoryReviewGroupClientData(BaseStruct): class StoryReviewGroupClientData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
name: str name: str
entryType: str entryType: str
actType: str actType: str
@ -60,6 +60,6 @@ class StoryReviewGroupClientData(BaseStruct):
class StoryReviewTable(BaseStruct): class StoryReviewTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
storyreviewtable: Dict[str, StoryReviewGroupClientData] storyreviewtable: Dict[str, StoryReviewGroupClientData]

View File

@ -6,7 +6,7 @@ from msgspec import field
class StoryDataTrigger(BaseStruct): class StoryDataTrigger(BaseStruct):
type_: str = field(name="type") type_: str = field(name='type')
key: Union[str, None] key: Union[str, None]
useRegex: bool useRegex: bool
@ -27,13 +27,13 @@ class StoryDataCondition(BaseStruct):
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class StoryData(BaseStruct): class StoryData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
needCommit: bool needCommit: bool
repeatable: bool repeatable: bool
disabled: bool disabled: bool
@ -46,6 +46,6 @@ class StoryData(BaseStruct):
class StoryTable(BaseStruct): class StoryTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
stories: Dict[str, StoryData] stories: Dict[str, StoryData]

View File

@ -27,7 +27,7 @@ class RuneData(BaseStruct):
class PackedRuneData(BaseStruct): class PackedRuneData(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
points: float points: float
mutexGroupKey: Union[str, None] mutexGroupKey: Union[str, None]
description: str description: str
@ -35,6 +35,6 @@ class PackedRuneData(BaseStruct):
class TechBuffTable(BaseStruct): class TechBuffTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
runes: List[PackedRuneData] runes: List[PackedRuneData]

View File

@ -17,7 +17,7 @@ class WorldViewTip(BaseStruct):
class TipTable(BaseStruct): class TipTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
tips: List[TipData] tips: List[TipData]
worldViewTips: List[WorldViewTip] worldViewTips: List[WorldViewTip]

View File

@ -32,7 +32,7 @@ class CharacterDataTraitDataBundle(BaseStruct):
class AttributesData(BaseStruct): class AttributesData(BaseStruct):
maxHp: int maxHp: int
atk: int atk: int
def_: int = field(name="def") def_: int = field(name='def')
magicResistance: float magicResistance: float
cost: int cost: int
blockCnt: int blockCnt: int
@ -60,9 +60,9 @@ class CharacterDataAttributesKeyFrame(BaseStruct):
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class CharacterDataPhaseData(BaseStruct): class CharacterDataPhaseData(BaseStruct):
@ -123,7 +123,7 @@ class ExternalBuff(BaseStruct):
class CharacterDataPotentialRank(BaseStruct): class CharacterDataPotentialRank(BaseStruct):
type_: int = field(name="type") type_: int = field(name='type')
description: str description: str
buff: Union[ExternalBuff, None] buff: Union[ExternalBuff, None]
equivalentCost: Union[ItemBundle, None] equivalentCost: Union[ItemBundle, None]
@ -170,6 +170,6 @@ class TokenCharacterData(BaseStruct):
class TokenTable(BaseStruct): class TokenTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
tokens: Dict[str, TokenCharacterData] tokens: Dict[str, TokenCharacterData]

View File

@ -6,9 +6,9 @@ from msgspec import field
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class UnlockCondition(BaseStruct): class UnlockCondition(BaseStruct):
@ -39,7 +39,7 @@ class UniEquipData(BaseStruct):
unlockFavorPercent: int unlockFavorPercent: int
missionList: List[str] missionList: List[str]
itemCost: Union[List[ItemBundle], None] itemCost: Union[List[ItemBundle], None]
type_: str = field(name="type") type_: str = field(name='type')
traitDescBundle: List[TraitDescBundle] traitDescBundle: List[TraitDescBundle]
@ -59,7 +59,7 @@ class SubProfessionData(BaseStruct):
class UniequipData(BaseStruct): class UniequipData(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
equipDict: Dict[str, UniEquipData] equipDict: Dict[str, UniEquipData]
missionList: Dict[str, UniEquipMissionData] missionList: Dict[str, UniEquipMissionData]

View File

@ -6,9 +6,9 @@ from msgspec import field
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class UniEquipData(BaseStruct): class UniEquipData(BaseStruct):
@ -29,7 +29,7 @@ class UniEquipData(BaseStruct):
unlockFavorPoint: int unlockFavorPoint: int
missionList: List[str] missionList: List[str]
itemCost: Union[Dict[str, List[ItemBundle]], None] itemCost: Union[Dict[str, List[ItemBundle]], None]
type_: str = field(name="type") type_: str = field(name='type')
uniEquipGetTime: int uniEquipGetTime: int
charEquipOrder: int charEquipOrder: int
@ -61,7 +61,7 @@ class UniEquipTimeInfo(BaseStruct):
class UniEquipTable(BaseStruct): class UniEquipTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
equipDict: Dict[str, UniEquipData] equipDict: Dict[str, UniEquipData]
missionList: Dict[str, UniEquipMissionData] missionList: Dict[str, UniEquipMissionData]

View File

@ -8,7 +8,7 @@ from msgspec import field
class ZoneData(BaseStruct): class ZoneData(BaseStruct):
zoneID: str zoneID: str
zoneIndex: int zoneIndex: int
type_: str = field(name="type") type_: str = field(name='type')
zoneNameFirst: Union[str, None] zoneNameFirst: Union[str, None]
zoneNameSecond: Union[str, None] zoneNameSecond: Union[str, None]
zoneNameTitleCurrent: Union[str, None] zoneNameTitleCurrent: Union[str, None]
@ -21,7 +21,7 @@ class ZoneData(BaseStruct):
class WeeklyZoneData(BaseStruct): class WeeklyZoneData(BaseStruct):
daysOfWeek: List[int] daysOfWeek: List[int]
type_: str = field(name="type") type_: str = field(name='type')
class ZoneValidInfo(BaseStruct): class ZoneValidInfo(BaseStruct):
@ -47,9 +47,9 @@ class MainlineZoneData(BaseStruct):
class ItemBundle(BaseStruct): class ItemBundle(BaseStruct):
id_: str = field(name="id") id_: str = field(name='id')
count: int count: int
type_: str = field(name="type") type_: str = field(name='type')
class RecordRewardInfo(BaseStruct): class RecordRewardInfo(BaseStruct):
@ -101,7 +101,7 @@ class ZoneMetaData(BaseStruct):
class ZoneTable(BaseStruct): class ZoneTable(BaseStruct):
__version__ = "23-10-31-11-47-45-d410ff" __version__ = '23-10-31-11-47-45-d410ff'
zones: Dict[str, ZoneData] zones: Dict[str, ZoneData]
weeklyAdditionInfo: Dict[str, WeeklyZoneData] weeklyAdditionInfo: Dict[str, WeeklyZoneData]

View File

@ -2,23 +2,25 @@ from __future__ import annotations
from collections.abc import Callable, Iterable, Iterator from collections.abc import Callable, Iterable, Iterator
from copy import copy, deepcopy from copy import copy, deepcopy
from typing import Any, Dict, Tuple, TypeVar, Union from typing import Any, TypeVar
from typing_extensions import dataclass_transform
from msgspec import ( from msgspec import (
Struct, Struct,
UnsetType, UnsetType,
convert, convert,
field, field,
)
from msgspec import (
json as mscjson, json as mscjson,
) )
from typing_extensions import dataclass_transform
Model = TypeVar("Model", bound="BaseStruct") Model = TypeVar('Model', bound='BaseStruct')
T1 = TypeVar("T1") T1 = TypeVar('T1')
T2 = TypeVar("T2") T2 = TypeVar('T2')
def transUnset(v: Union[T1, UnsetType], d: T2 = None) -> Union[T1, T2]: def transUnset(v: T1 | UnsetType, d: T2 = None) -> T1 | T2:
return v if not isinstance(v, UnsetType) else d return v if not isinstance(v, UnsetType) else d
@ -39,8 +41,8 @@ class BaseStruct(
*, *,
strict: bool = True, strict: bool = True,
from_attributes: bool = False, from_attributes: bool = False,
dec_hook: Union[Callable[[type, Any], Any], None] = None, dec_hook: Callable[[type, Any], Any] | None = None,
builtin_types: Union[Iterable[type], None] = None, builtin_types: Iterable[type] | None = None,
str_keys: bool = False, str_keys: bool = False,
) -> Model: ) -> Model:
if obj is None: if obj is None:
@ -57,7 +59,7 @@ class BaseStruct(
str_keys=str_keys, str_keys=str_keys,
) )
def __iter__(self) -> Iterator[Tuple[str, Any]]: def __iter__(self) -> Iterator[tuple[str, Any]]:
for field_name in self.__struct_fields__: for field_name in self.__struct_fields__:
yield field_name, getattr(self, field_name) yield field_name, getattr(self, field_name)
@ -68,7 +70,7 @@ class BaseStruct(
for field_name in self.__struct_fields__: for field_name in self.__struct_fields__:
yield getattr(self, field_name) yield getattr(self, field_name)
def model_dump(self) -> Dict[str, Any]: def model_dump(self) -> dict[str, Any]:
return mscjson.decode(mscjson.encode(self)) return mscjson.decode(mscjson.encode(self))
def dump_child(self, target: str) -> Any: def dump_child(self, target: str) -> Any:

View File

@ -42,19 +42,22 @@ class ArknightsAttendanceAward(Struct):
count: int count: int
type_: str = field(name='type') type_: str = field(name='type')
class ArknightsAttendanceModel(Struct): class ArknightsAttendanceModel(Struct):
ts: str ts: str
awards: List[ArknightsAttendanceAward] awards: List[ArknightsAttendanceAward]
################ ################
# ArknightsAttendance End # ArknightsAttendance End
################ ################
################ ################
# ArknightsUserMeModel Start # ArknightsUserMeModel Start
################ ################
class UserMeInfoApply(Struct): class UserMeInfoApply(Struct):
nickname: str nickname: str
profile: str profile: str
@ -137,16 +140,17 @@ class ArknightsUserMeModel(Struct, omit_defaults=True):
moderator: UserMeModerator moderator: UserMeModerator
userInfoApply: UserMeInfoApply userInfoApply: UserMeInfoApply
################ ################
# ArknightsUserMeModel End # ArknightsUserMeModel End
################ ################
################ ################
# ArknightsPlayerInfoModel Start # ArknightsPlayerInfoModel Start
################ ################
class PlayerManufactureFormulaInfo(Struct): class PlayerManufactureFormulaInfo(Struct):
id_: str = field(name='id') id_: str = field(name='id')
itemId: str itemId: str
@ -539,8 +543,8 @@ class PlayerInfoChar(Struct):
evolvePhase: int evolvePhase: int
potentialRank: int potentialRank: int
mainSkillLvl: int mainSkillLvl: int
skills: Union[List[PlayerInfoCharSkill] , None] skills: Union[List[PlayerInfoCharSkill], None]
equip: Union[List[PlayerInfoCharEquip] , None] equip: Union[List[PlayerInfoCharEquip], None]
favorPercent: int favorPercent: int
defaultSkillId: str defaultSkillId: str
gainTime: int gainTime: int

View File

@ -12,6 +12,7 @@ RESOURCE_PATH = MAIN_PATH / 'resource'
GAMEDATA_PATH = RESOURCE_PATH / 'gamedata' GAMEDATA_PATH = RESOURCE_PATH / 'gamedata'
SKIN_PATH = RESOURCE_PATH / 'skin' SKIN_PATH = RESOURCE_PATH / 'skin'
def init_dir(): def init_dir():
for i in [ for i in [
MAIN_PATH, MAIN_PATH,
@ -19,7 +20,7 @@ def init_dir():
PLAYER_PATH, PLAYER_PATH,
RESOURCE_PATH, RESOURCE_PATH,
GAMEDATA_PATH, GAMEDATA_PATH,
SKIN_PATH SKIN_PATH,
]: ]:
i.mkdir(parents=True, exist_ok=True) i.mkdir(parents=True, exist_ok=True)

View File

@ -1,3 +1,3 @@
ArknightsUID_version = "0.1.0" ArknightsUID_version = '0.1.0'
Arknights_Client_version = "2.1.21" Arknights_Client_version = '2.1.21'
Arknights_Res_version = "23-10-31-11-47-45-d410ff" Arknights_Res_version = '23-10-31-11-47-45-d410ff'

View File

@ -4,14 +4,13 @@
<a href="https://github.com/qwerdvd/ArknightsUID"><img src="https://s2.loli.net/2023/10/30/eFZmkfrni9bBjdV.png" width="256" height="256" alt="ArknightsUID"></a> <a href="https://github.com/qwerdvd/ArknightsUID"><img src="https://s2.loli.net/2023/10/30/eFZmkfrni9bBjdV.png" width="256" height="256" alt="ArknightsUID"></a>
</p> </p>
<h1 align = "center">ArknightsUID 0.1</h1> <h1 align = "center">ArknightsUID 0.1</h1>
<h4 align = "center">🚧支持OneBot(QQ)、QQ频道、微信、开黑啦、Telegram的全功能星铁Bot插件🚧</h4> <h4 align = "center">🚧支持OneBot(QQ)、QQ频道、微信、开黑啦、Telegram的全功能明日方舟Bot插件🚧</h4>
<div align = "center"> <div align = "center">
<a href="https://docs.sayu-bot.com/" target="_blank">安装文档</a> &nbsp; · &nbsp; <a href="https://docs.sayu-bot.com/" target="_blank">安装文档</a> &nbsp; · &nbsp;
<a href="https://docs.sayu-bot.com/插件帮助/ArknightsUID.html" target="_blank">指令列表</a> &nbsp; · &nbsp; <a href="https://docs.sayu-bot.com/插件帮助/ArknightsUID.html" target="_blank">指令列表</a> &nbsp; · &nbsp;
<a href="https://docs.sayu-bot.com/常见问题/">常见问题</a> <a href="https://docs.sayu-bot.com/常见问题/">常见问题</a>
</div> </div>
## 丨安装提醒 ## 丨安装提醒
> **注意:该插件为[早柚核心(gsuid_core)](https://github.com/Genshin-bots/gsuid_core)的扩展,具体安装方式可参考[GenshinUID](https://github.com/KimigaiiWuyi/GenshinUID)** > **注意:该插件为[早柚核心(gsuid_core)](https://github.com/Genshin-bots/gsuid_core)的扩展,具体安装方式可参考[GenshinUID](https://github.com/KimigaiiWuyi/GenshinUID)**

View File

@ -57,7 +57,9 @@ pythonPlatform = "All"
[tool.ruff] [tool.ruff]
select = ["E", "W", "F", "UP", "C", "T", "PYI", "PT", "Q"] select = ["E", "W", "F", "UP", "C", "T", "PYI", "PT", "Q"]
ignore = ["C901", "Q000"] ignore = ["C901", "Q000", "Q003"]
line-length = 108 line-length = 108
target-version = "py38" target-version = "py38"
[tool.ruff.format]
quote-style = "single"