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再来查询哦~'
# 开始绘图任务
task = []
img = Image.new(
'RGBA', (based_w * len(useable_uid_list), based_h), (0, 0, 0, 0)
)
img = Image.new('RGBA', (based_w * len(useable_uid_list), based_h), (0, 0, 0, 0))
for uid_index, uid in enumerate(useable_uid_list):
task.append(_draw_all_ap_img(img, uid, uid_index))
await asyncio.gather(*task)
@ -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_draw = ImageDraw.Draw(img)
img_draw.text(
(425, 1710),

View File

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

View File

@ -11,5 +11,5 @@ def seconds2hours_zhcn(seconds: int) -> str:
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

View File

@ -9,7 +9,7 @@ from gsuid_core.utils.error_reply import UID_HINT
from ..utils.database.models import ArknightsBind
from .set_config import set_config_func, set_push_value
sv_self_config = SV("ark配置")
sv_self_config = SV('ark配置')
# @sv_self_config.on_fullmatch(("ark配置", "方舟配置"))
@ -19,46 +19,46 @@ sv_self_config = SV("ark配置")
# await bot.send(im)
@sv_self_config.on_prefix(("ark设置")) # noqa: UP034
@sv_self_config.on_prefix(('ark设置')) # noqa: UP034
async def send_config_ev(bot: Bot, ev: Event):
logger.info("开始执行[设置阈值信息]")
logger.info('开始执行[设置阈值信息]')
uid = await ArknightsBind.get_uid_by_game(ev.user_id, bot.bot_id)
if uid is None:
return await bot.send(UID_HINT)
func = "".join(re.findall("[\u4e00-\u9fa5]", ev.text.replace("阈值", "")))
value = re.findall(r"\d+", ev.text)
func = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text.replace('阈值', '')))
value = re.findall(r'\d+', ev.text)
value = value[0] if value else None
if value is None:
return await bot.send("请输入正确的阈值数字...")
return await bot.send('请输入正确的阈值数字...')
logger.info(f"[设置阈值信息]func: {func}, value: {value}")
logger.info(f'[设置阈值信息]func: {func}, value: {value}')
im = await set_push_value(ev.bot_id, func, uid, int(value))
await bot.send(im)
# 开启 自动签到 功能
@sv_self_config.on_prefix(("ark开启", "ark关闭"))
@sv_self_config.on_prefix(('ark开启', 'ark关闭'))
async def open_switch_func(bot: Bot, ev: Event):
user_id = ev.user_id
config_name = ev.text
logger.info(f"[{user_id}]尝试[{ev.command[2:]}]了[{ev.text}]功能")
logger.info(f'[{user_id}]尝试[{ev.command[2:]}]了[{ev.text}]功能')
if ev.command == "ark开启":
if ev.command == 'ark开启':
query = True
gid = ev.group_id if ev.group_id else "on"
gid = ev.group_id if ev.group_id else 'on'
else:
query = False
gid = "off"
gid = 'off'
is_admin = ev.user_pm <= 2
if ev.at and is_admin:
user_id = ev.at
elif ev.at:
return await bot.send("你没有权限...")
return await bot.send('你没有权限...')
uid = await ArknightsBind.get_uid_by_game(ev.user_id, bot.bot_id)
if uid is None:

View File

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

View File

@ -18,7 +18,8 @@ async def get_help_data() -> Union[Dict[str, PluginHelp], None]:
if HELP_DATA.exists():
async with aiofiles.open(HELP_DATA, 'rb') as file:
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 / 'button.png'),
source_han_sans_cn_origin,
extra_message = [f'Client Version:{Arknights_Client_version} '
f' Res version: {Arknights_Res_version}'],
extra_message=[
f'Client Version:{Arknights_Client_version} ' f' Res version: {Arknights_Res_version}'
],
)
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 .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):
await bot.send("正在开始下载~可能需要较久的时间!")
await bot.send('正在开始下载~可能需要较久的时间!')
im = await download_all_resource()
await bot.send(im)
async def startup():
logger.info("[资源文件下载] 正在检查与下载缺失的资源文件, 可能需要较长时间, 请稍等")
logger.info('[资源文件下载] 正在检查与下载缺失的资源文件, 可能需要较长时间, 请稍等')
await download_all_resource()
logger.info("[资源文件下载] 检查完毕, 正在加载 gamedata")
logger.info('[资源文件下载] 检查完毕, 正在加载 gamedata')
TASK = []
for file_path in Path(
get_res_path(["ArknightsUID", "resource", "gamedata"])
).glob("*.json"):
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()
logger.info("[资源文件下载] gamedata 加载完毕")
logger.info('[资源文件下载] gamedata 加载完毕')

View File

@ -103,18 +103,14 @@ class ExcelTableManager:
zone_table_: ZoneTable
async def activity_table(self) -> None:
self.activity_table_ = ActivityTable.convert(
await store.get_excel("activity_table")
)
self.activity_table_ = ActivityTable.convert(await store.get_excel('activity_table'))
@property
def ACTIVITY_TABLE(self) -> ActivityTable:
return self.activity_table_
async def audio_data(self) -> None:
self.audio_data_ = AudioData.convert(
await store.get_excel("audio_data")
)
self.audio_data_ = AudioData.convert(await store.get_excel('audio_data'))
@property
def AUDIO_DATA(self) -> AudioData:
@ -122,7 +118,7 @@ class ExcelTableManager:
async def battle_equip_table(self) -> None:
self.battle_equip_table_ = BattleEquipTable.convert(
{"equips": await store.get_excel("battle_equip_table")}
{'equips': await store.get_excel('battle_equip_table')}
)
@property
@ -130,124 +126,98 @@ class ExcelTableManager:
return self.battle_equip_table_
async def building_data(self) -> None:
self.building_data_ = BuildingData.convert(
await store.get_excel("building_data")
)
self.building_data_ = BuildingData.convert(await store.get_excel('building_data'))
@property
def BUILDING_DATA(self) -> BuildingData:
return self.building_data_
async def campaign_table(self) -> None:
self.campaign_table_ = CampaignTable.convert(
await store.get_excel("campaign_table")
)
self.campaign_table_ = CampaignTable.convert(await store.get_excel('campaign_table'))
@property
def CAMPAIGN_TABLE(self) -> CampaignTable:
return self.campaign_table_
async def chapter_table(self) -> None:
self.chapter_table_ = ChapterTable.convert(
{"chapters": await store.get_excel("chapter_table")}
)
self.chapter_table_ = ChapterTable.convert({'chapters': await store.get_excel('chapter_table')})
@property
def CHAPTER_TABLE(self) -> ChapterTable:
return self.chapter_table_
async def character_table(self) -> None:
self.character_table_ = CharacterTable.convert(
{"chars": await store.get_excel("character_table")}
)
self.character_table_ = CharacterTable.convert({'chars': await store.get_excel('character_table')})
@property
def CHARATER_TABLE(self) -> CharacterTable:
return self.character_table_
async def char_meta_table(self) -> None:
self.char_meta_table_ = CharMetaTable.convert(
await store.get_excel("char_meta_table")
)
self.char_meta_table_ = CharMetaTable.convert(await store.get_excel('char_meta_table'))
@property
def CHAR_META_TABLE(self) -> CharMetaTable:
return self.char_meta_table_
async def charm_table(self) -> None:
self.charm_table_ = CharmTable.convert(
await store.get_excel("charm_table")
)
self.charm_table_ = CharmTable.convert(await store.get_excel('charm_table'))
@property
def CHARM_TABLE(self) -> CharmTable:
return self.charm_table_
async def char_patch_table(self) -> None:
self.char_patch_table_ = CharPatchTable.convert(
await store.get_excel("char_patch_table")
)
self.char_patch_table_ = CharPatchTable.convert(await store.get_excel('char_patch_table'))
@property
def CHAR_PATH_TABLE(self) -> CharPatchTable:
return self.char_patch_table_
async def charword_table(self) -> None:
self.charword_table_ = CharwordTable.convert(
await store.get_excel("charword_table")
)
self.charword_table_ = CharwordTable.convert(await store.get_excel('charword_table'))
@property
def CHARWORD_TABLE(self) -> CharwordTable:
return self.charword_table_
async def checkin_table(self) -> None:
self.checkin_table_ = CheckinTable.convert(
await store.get_excel("checkin_table")
)
self.checkin_table_ = CheckinTable.convert(await store.get_excel('checkin_table'))
@property
def CHECKIN_TABLE(self) -> CheckinTable:
return self.checkin_table_
async def climb_tower_table(self) -> None:
self.climb_tower_table_ = ClimbTowerTable.convert(
await store.get_excel("climb_tower_table")
)
self.climb_tower_table_ = ClimbTowerTable.convert(await store.get_excel('climb_tower_table'))
@property
def CLIMB_TOWER_TABLE(self) -> ClimbTowerTable:
return self.climb_tower_table_
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
def CLUE_DATA(self) -> ClueData:
return self.clue_data_
async def crisis_table(self) -> None:
self.crisis_table_ = CrisisTable.convert(
await store.get_excel("crisis_table")
)
self.crisis_table_ = CrisisTable.convert(await store.get_excel('crisis_table'))
@property
def CRISIS_TABLE(self) -> CrisisTable:
return self.crisis_table_
async def crisis_v2_table(self) -> None:
self.crisis_v2_table_ = CrisisV2Table.convert(
await store.get_excel("crisis_v2_table")
)
self.crisis_v2_table_ = CrisisV2Table.convert(await store.get_excel('crisis_v2_table'))
@property
def CRISIS_V2_TABLE(self) -> CrisisV2Table:
return self.crisis_v2_table_
async def display_meta_table(self) -> None:
self.display_meta_table_ = DisplayMetaTable.convert(
await store.get_excel("display_meta_table")
)
self.display_meta_table_ = DisplayMetaTable.convert(await store.get_excel('display_meta_table'))
@property
def DISPLAY_META_TABLE(self) -> DisplayMetaTable:
@ -255,7 +225,7 @@ class ExcelTableManager:
async def enemy_handbook_table(self) -> None:
self.enemy_handbook_table_ = EnemyHandbookTable.convert(
await store.get_excel("enemy_handbook_table")
await store.get_excel('enemy_handbook_table')
)
@property
@ -263,45 +233,35 @@ class ExcelTableManager:
return self.enemy_handbook_table_
async def favor_table(self) -> None:
self.favor_table_ = FavorTable.convert(
await store.get_excel("favor_table")
)
self.favor_table_ = FavorTable.convert(await store.get_excel('favor_table'))
@property
def FAVOR_TABLE(self) -> FavorTable:
return self.favor_table_
async def gacha_table(self) -> None:
self.gacha_table_ = GachaTable.convert(
await store.get_excel("gacha_table")
)
self.gacha_table_ = GachaTable.convert(await store.get_excel('gacha_table'))
@property
def GACHA_TABLE(self) -> GachaTable:
return self.gacha_table_
async def gamedata_const(self) -> None:
self.gamedata_const_ = GamedataConst.convert(
await store.get_excel("gamedata_const")
)
self.gamedata_const_ = GamedataConst.convert(await store.get_excel('gamedata_const'))
@property
def GAMEDATA_CONST(self) -> GamedataConst:
return self.gamedata_const_
async def handbook_info_table(self) -> None:
self.handbook_info_table_ = HandbookInfoTable.convert(
await store.get_excel("handbook_info_table")
)
self.handbook_info_table_ = HandbookInfoTable.convert(await store.get_excel('handbook_info_table'))
@property
def HANDBOOK_INFO_TABLE(self) -> HandbookInfoTable:
return self.handbook_info_table_
async def handbook_table(self) -> None:
self.handbook_table_ = HandbookTable.convert(
await store.get_excel("handbook_table")
)
self.handbook_table_ = HandbookTable.convert(await store.get_excel('handbook_table'))
@property
def HANDBOOK_TABLE(self) -> HandbookTable:
@ -309,7 +269,7 @@ class ExcelTableManager:
async def handbook_team_table(self) -> None:
self.handbook_team_table_ = HandbookTeamTable.convert(
{"team": await store.get_excel("handbook_team_table")}
{'team': await store.get_excel('handbook_team_table')}
)
@property
@ -317,54 +277,42 @@ class ExcelTableManager:
return self.handbook_team_table_
async def item_table(self) -> None:
self.item_table_ = ItemTable.convert(
await store.get_excel("item_table")
)
self.item_table_ = ItemTable.convert(await store.get_excel('item_table'))
@property
def ITEM_TABLE(self) -> ItemTable:
return self.item_table_
async def medal_table(self) -> None:
self.medal_table_ = MedalTable.convert(
await store.get_excel("medal_table")
)
self.medal_table_ = MedalTable.convert(await store.get_excel('medal_table'))
@property
def MEDAL_TABLE(self) -> MedalTable:
return self.medal_table_
async def mission_table(self) -> None:
self.mission_table_ = MissionTable.convert(
await store.get_excel("mission_table")
)
self.mission_table_ = MissionTable.convert(await store.get_excel('mission_table'))
@property
def MISSION_TABLE(self) -> MissionTable:
return self.mission_table_
async def open_server_table(self) -> None:
self.open_server_table_ = OpenServerTable.convert(
await store.get_excel("open_server_table")
)
self.open_server_table_ = OpenServerTable.convert(await store.get_excel('open_server_table'))
@property
def OPEN_SERVER_TABLE(self) -> OpenServerTable:
return self.open_server_table_
async def player_avatar_table(self) -> None:
self.player_avatar_table_ = PlayerAvatarTable.convert(
await store.get_excel("player_avatar_table")
)
self.player_avatar_table_ = PlayerAvatarTable.convert(await store.get_excel('player_avatar_table'))
@property
def PLAYER_AVATAR_TABLE(self) -> PlayerAvatarTable:
return self.player_avatar_table_
async def range_table(self) -> None:
self.range_table_ = RangeTable.convert(
{"range_": await store.get_excel("range_table")}
)
self.range_table_ = RangeTable.convert({'range_': await store.get_excel('range_table')})
@property
def RANGE_TABLE(self) -> RangeTable:
@ -372,7 +320,7 @@ class ExcelTableManager:
async def replicate_table(self) -> None:
self.replicate_table_ = ReplicateTable.convert(
{"replicate": await store.get_excel("replicate_table")}
{'replicate': await store.get_excel('replicate_table')}
)
@property
@ -380,18 +328,14 @@ class ExcelTableManager:
return self.replicate_table_
async def retro_table(self) -> None:
self.retro_table_ = RetroTable.convert(
await store.get_excel("retro_table")
)
self.retro_table_ = RetroTable.convert(await store.get_excel('retro_table'))
@property
def RETRO_TABLE(self) -> RetroTable:
return self.retro_table_
async def roguelike_table(self) -> None:
self.roguelike_table_ = RoguelikeTable.convert(
await store.get_excel("roguelike_table")
)
self.roguelike_table_ = RoguelikeTable.convert(await store.get_excel('roguelike_table'))
@property
def ROGUELIKE_TABLE(self) -> RoguelikeTable:
@ -399,7 +343,7 @@ class ExcelTableManager:
async def roguelike_topic_table(self) -> None:
self.roguelike_topic_table_ = RoguelikeTopicTable.convert(
await store.get_excel("roguelike_topic_table")
await store.get_excel('roguelike_topic_table')
)
@property
@ -407,45 +351,35 @@ class ExcelTableManager:
return self.roguelike_topic_table_
async def sandbox_table(self) -> None:
self.sandbox_table_ = SandboxTable.convert(
await store.get_excel("sandbox_table")
)
self.sandbox_table_ = SandboxTable.convert(await store.get_excel('sandbox_table'))
@property
def SANDBOX_TABLE(self) -> SandboxTable:
return self.sandbox_table_
async def shop_client_table(self) -> None:
self.shop_client_table_ = ShopClientTable.convert(
await store.get_excel("shop_client_table")
)
self.shop_client_table_ = ShopClientTable.convert(await store.get_excel('shop_client_table'))
@property
def SHOP_CLIENT_TABLE(self) -> ShopClientTable:
return self.shop_client_table_
async def skill_table(self) -> None:
self.skill_table_ = SkillTable.convert(
{"skills": await store.get_excel("skill_table")}
)
self.skill_table_ = SkillTable.convert({'skills': await store.get_excel('skill_table')})
@property
def SKILL_TABLE(self) -> SkillTable:
return self.skill_table_
async def skin_table(self) -> None:
self.skin_table_ = SkinTable.convert(
await store.get_excel("skin_table")
)
self.skin_table_ = SkinTable.convert(await store.get_excel('skin_table'))
@property
def SKIN_TABLE(self) -> SkinTable:
return self.skin_table_
async def stage_table(self) -> None:
self.stage_table_ = StageTable.convert(
await store.get_excel("stage_table")
)
self.stage_table_ = StageTable.convert(await store.get_excel('stage_table'))
@property
def STAGE_TABLE(self) -> StageTable:
@ -453,7 +387,7 @@ class ExcelTableManager:
async def story_review_meta_table(self) -> None:
self.story_review_meta_table_ = StoryReviewMetaTable.convert(
await store.get_excel("story_review_meta_table")
await store.get_excel('story_review_meta_table')
)
@property
@ -462,7 +396,7 @@ class ExcelTableManager:
async def story_review_table(self) -> None:
self.story_review_table_ = StoryReviewTable.convert(
{"storyreviewtable": await store.get_excel("story_review_table")}
{'storyreviewtable': await store.get_excel('story_review_table')}
)
@property
@ -470,61 +404,49 @@ class ExcelTableManager:
return self.story_review_table_
async def story_table(self) -> None:
self.story_table_ = StoryTable.convert(
{"stories": await store.get_excel("story_table")}
)
self.story_table_ = StoryTable.convert({'stories': await store.get_excel('story_table')})
@property
def STORY_TABLE(self) -> StoryTable:
return self.story_table_
async def tech_buff_table(self) -> None:
self.tech_buff_table_ = TechBuffTable.convert(
await store.get_excel("tech_buff_table")
)
self.tech_buff_table_ = TechBuffTable.convert(await store.get_excel('tech_buff_table'))
@property
def TECH_BUFF_TABLE(self) -> TechBuffTable:
return self.tech_buff_table_
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
def TIP_TABLE(self) -> TipTable:
return self.tip_table_
async def token_table(self) -> None:
self.token_table_ = TokenTable.convert(
{"tokens": await store.get_excel("token_table")}
)
self.token_table_ = TokenTable.convert({'tokens': await store.get_excel('token_table')})
@property
def TOKEN_TABLE(self) -> TokenTable:
return self.token_table_
async def uniequip_data(self) -> None:
self.uniequip_data_ = UniequipData.convert(
await store.get_excel("uniequip_data")
)
self.uniequip_data_ = UniequipData.convert(await store.get_excel('uniequip_data'))
@property
def UNIEQUIP_DATA(self) -> UniequipData:
return self.uniequip_data_
async def uniequip_table(self) -> None:
self.uniequip_table_ = UniEquipTable.convert(
await store.get_excel("uniequip_table")
)
self.uniequip_table_ = UniEquipTable.convert(await store.get_excel('uniequip_table'))
@property
def UNIEQUIP_TABLE(self) -> UniEquipTable:
return self.uniequip_table_
async def zone_table(self) -> None:
self.zone_table_ = ZoneTable.convert(
await store.get_excel("zone_table")
)
self.zone_table_ = ZoneTable.convert(await store.get_excel('zone_table'))
@property
def ZONE_TABLE(self) -> ZoneTable:
@ -535,9 +457,9 @@ class ExcelTableManager:
for name, method in inspect.getmembers(self):
if not inspect.iscoroutinefunction(method):
continue
if name.startswith("__"):
if name.startswith('__'):
continue
if name != "preload_table" and name != 'CHARATER_TABLE':
if name != 'preload_table' and name != 'CHARATER_TABLE':
task.append(method())
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.
"""
try:
with Path.open(file_path, encoding="UTF-8", **kwargs) as file:
with Path.open(file_path, encoding='UTF-8', **kwargs) as file:
return json.load(file)
except (FileNotFoundError, json.JSONDecodeError) as e:
logger.error(f"Error reading JSON file: {e}")
logger.error(f'Error reading JSON file: {e}')
return {}
@ -84,7 +84,7 @@ class StorageObject(Struct):
class StoreService(Store):
__slots__ = ("store", "lock", "path")
__slots__ = ('store', 'lock', 'path')
def __init__(self) -> None:
self.path: anyioPath = anyioPath('data')
@ -102,7 +102,7 @@ class StoreService(Store):
def _write_sync(self, target_file: anyioPath) -> None:
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
try:
try:
@ -122,7 +122,7 @@ class StoreService(Store):
async def set(self, key: str, value: Any, expires_in: int | timedelta | None = None) -> None:
if isinstance(value, str):
value = value.encode("UTF-8")
value = value.encode('UTF-8')
async with self.lock:
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_char_img = (
Image.open(SKIN_PATH / f'{secretary_skinId}b.png')
.resize((768, 768))
.convert('RGBA')
Image.open(SKIN_PATH / f'{secretary_skinId}b.png').resize((768, 768)).convert('RGBA')
)
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,
(255, 255, 255),
sans_font_28,
'lm'
'lm',
)
# 放入职信息
base_info.resize((475, 400)).convert('RGBA')
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 qid not in private_msg_list:
private_msg_list[qid] = []
private_msg_list[qid].append(
{'bot_id': bot_id, 'uid': ark_uid, 'msg': im}
)
private_msg_list[qid].append({'bot_id': bot_id, 'uid': ark_uid, 'msg': im})
else:
# 向群消息推送列表添加这个群
if gid not in group_msg_list:

View File

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

View File

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

View File

@ -3,9 +3,7 @@ import re
from ..utils.ark_api import ark_skd_api
from ..utils.database.models import ArknightsBind, ArknightsPush, ArknightsUser
ERROR_HINT = (
'添加失败, 格式为: skd添加cred Cred 例如: skd添加cred VropL583Sb1hClS5buQ4nSASkDlL8tMT'
)
ERROR_HINT = '添加失败, 格式为: skd添加cred Cred 例如: skd添加cred VropL583Sb1hClS5buQ4nSASkDlL8tMT'
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())
check_cred = await ark_skd_api.check_cred_valid(
cred=match.group(), token=token
cred=match.group(),
token=token,
)
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'):
text = text[:-1]
img = Image.new(
'RGB', (max_size, len(text) * font_size // 5), (228, 222, 210)
)
img = Image.new('RGB', (max_size, len(text) * font_size // 5), (228, 222, 210))
img_draw = ImageDraw.ImageDraw(img)
y = draw_center_text_by_line(
img_draw, (25, 0), text, sans_font_20, 'black', 750, True
)
y = draw_center_text_by_line(img_draw, (25, 0), text, sans_font_20, 'black', 750, True)
img = img.crop((0, 0, 800, int(y + 30)))
return await convert_img(img)
@ -50,6 +46,7 @@ async def send_role_wiki_pic(bot: Bot, ev: Event):
img = await get_wiki_info(char_id=char_id)
await bot.send(await text2pic(img))
@sv_sr_wiki.on_prefix('ark模组图鉴')
async def send_equip_wiki_pic(bot: Bot, ev: Event):
char_name = ' '.join(re.findall('[\u4e00-\u9fa5]+', ev.text))

View File

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

View File

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

View File

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

View File

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

View File

@ -7,7 +7,7 @@ from msgspec import json as mscjson
from typing_extensions import dataclass_transform
Model = TypeVar('Model', bound='BaseStruct')
T = TypeVar("T")
T = TypeVar('T')
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,))
class BaseStruct(
Struct, forbid_unknown_fields=True, omit_defaults=True, gc=False
Struct,
forbid_unknown_fields=True,
omit_defaults=True,
gc=False,
):
class Config:
encoder = mscjson.Encoder()

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,3 +1,3 @@
ArknightsUID_version = "0.1.0"
Arknights_Client_version = "2.1.21"
Arknights_Res_version = "23-10-31-11-47-45-d410ff"
ArknightsUID_version = '0.1.0'
Arknights_Client_version = '2.1.21'
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>
</p>
<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">
<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/常见问题/">常见问题</a>
</div>
## 丨安装提醒
> **注意:该插件为[早柚核心(gsuid_core)](https://github.com/Genshin-bots/gsuid_core)的扩展,具体安装方式可参考[GenshinUID](https://github.com/KimigaiiWuyi/GenshinUID)**
@ -27,7 +26,7 @@
## 丨功能
<details><summary>ark每日 - 命令: arkmr</summary><p>
<img src="https://s2.loli.net/2023/10/30/atoCVXFJisMZIAu.jpg"/>
<img src="https://s2.loli.net/2023/10/30/atoCVXFJisMZIAu.jpg"/>
</p></details>
以及签到 & 体力推送等..

View File

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