支持新版gamedata

This commit is contained in:
baiqwerdvd 2024-04-28 17:30:22 +08:00
parent 0059e0dbe7
commit f6d610d33b
No known key found for this signature in database
GPG Key ID: 7717E46E1797411A
16 changed files with 89 additions and 129 deletions

View File

@ -54,7 +54,9 @@ async def get_ap_img(bot_id: str, user_id: str):
# 开始绘图任务 # 开始绘图任务
task = [] task = []
img = Image.new( img = Image.new(
"RGBA", (based_w * len(useable_uid_list), based_h), (0, 0, 0, 0) "RGBA",
(based_w * len(useable_uid_list), based_h),
(0, 0, 0, 0),
) )
for uid_index, uid in enumerate(useable_uid_list): for uid_index, uid in enumerate(useable_uid_list):
task.append(_draw_all_ap_img(img, uid, uid_index)) task.append(_draw_all_ap_img(img, uid, uid_index))
@ -97,9 +99,7 @@ def get_error(img: Image.Image, uid: str, daily_data: int):
async def draw_ap_img(uid: str) -> Image.Image: async def draw_ap_img(uid: str) -> Image.Image:
# char # char
char_pic = ( char_pic = (
Image.open(TEXT_PATH / "char_1028_texas2_1b.png") Image.open(TEXT_PATH / "char_1028_texas2_1b.png").resize((1700, 1700)).convert("RGBA")
.resize((1700, 1700))
.convert("RGBA")
) )
tmp_img = Image.new("RGBA", (based_w, based_h)) tmp_img = Image.new("RGBA", (based_w, based_h))

View File

@ -7,9 +7,7 @@ from gsuid_core.utils.plugins_config.models import (
) )
CONIFG_DEFAULT: Dict[str, GSC] = { CONIFG_DEFAULT: Dict[str, GSC] = {
"SignTime": GsListStrConfig( "SignTime": GsListStrConfig("每晚签到时间设置", "每晚森空岛签到时间设置(时,分)", ["0", "38"]),
"每晚签到时间设置", "每晚森空岛签到时间设置(时,分)", ["0", "38"]
),
"SignReportSimple": GsBoolConfig( "SignReportSimple": GsBoolConfig(
"简洁签到报告", "简洁签到报告",
"开启后可以大大减少每日签到报告字数", "开启后可以大大减少每日签到报告字数",

View File

@ -43,8 +43,7 @@ async def get_core_help() -> Union[bytes, str]:
Image.open(TEXT_PATH / "button.png"), Image.open(TEXT_PATH / "button.png"),
source_han_sans_cn_origin, source_han_sans_cn_origin,
extra_message=[ extra_message=[
f"Client Version:{Arknights_Client_version} " f"Client Version:{Arknights_Client_version} " f" Res version: {Arknights_Res_version}"
f" Res version: {Arknights_Res_version}"
], ],
) )
return img return img

View File

@ -25,8 +25,7 @@ async def get_resp_msg(bot: Bot, ev: Event):
if not phone_number.isdigit(): if not phone_number.isdigit():
return await bot.send("你输入了错误的格式!") return await bot.send("你输入了错误的格式!")
resp = await bot.receive_resp( resp = await bot.receive_resp(
f"请确认你的手机号码: {phone_number}." f"请确认你的手机号码: {phone_number}." "如果正确请回复'确认', 其他任何回复将取消本次操作."
"如果正确请回复'确认', 其他任何回复将取消本次操作."
) )
if resp is not None and resp.text == "确认": if resp is not None and resp.text == "确认":
login = SklandLogin(phone_number) login = SklandLogin(phone_number)

View File

@ -26,7 +26,6 @@ from ..utils.models.gamedata.GamedataConst import GamedataConst
from ..utils.models.gamedata.HandbookInfoTable import HandbookInfoTable from ..utils.models.gamedata.HandbookInfoTable import HandbookInfoTable
from ..utils.models.gamedata.HandbookTable import HandbookTable from ..utils.models.gamedata.HandbookTable import HandbookTable
from ..utils.models.gamedata.HandbookTeamTable import HandbookTeamTable from ..utils.models.gamedata.HandbookTeamTable import HandbookTeamTable
from ..utils.models.gamedata.ItemTable import ItemTable
from ..utils.models.gamedata.MedalTable import MedalTable from ..utils.models.gamedata.MedalTable import MedalTable
from ..utils.models.gamedata.MissionTable import MissionTable from ..utils.models.gamedata.MissionTable import MissionTable
from ..utils.models.gamedata.OpenServerTable import OpenServerTable from ..utils.models.gamedata.OpenServerTable import OpenServerTable
@ -37,7 +36,6 @@ from ..utils.models.gamedata.RetroTable import RetroTable
from ..utils.models.gamedata.RoguelikeTable import RoguelikeTable from ..utils.models.gamedata.RoguelikeTable import RoguelikeTable
from ..utils.models.gamedata.RoguelikeTopicTable import RoguelikeTopicTable from ..utils.models.gamedata.RoguelikeTopicTable import RoguelikeTopicTable
from ..utils.models.gamedata.SandboxTable import SandboxTable from ..utils.models.gamedata.SandboxTable import SandboxTable
from ..utils.models.gamedata.SandboxPermTable import SandboxPermTable
from ..utils.models.gamedata.ShopClientTable import ShopClientTable from ..utils.models.gamedata.ShopClientTable import ShopClientTable
from ..utils.models.gamedata.SkillTable import SkillTable from ..utils.models.gamedata.SkillTable import SkillTable
from ..utils.models.gamedata.SkinTable import SkinTable from ..utils.models.gamedata.SkinTable import SkinTable
@ -66,9 +64,8 @@ def read_json(file_path: Path, **kwargs) -> dict:
logger.error(f"Error reading JSON file: {e}") logger.error(f"Error reading JSON file: {e}")
return {} return {}
threading.Thread(
target=lambda: asyncio.run(download_all_resource()), daemon=True threading.Thread(target=lambda: asyncio.run(download_all_resource()), daemon=True).start()
).start()
# ACTIVITY_TABLE = ActivityTable.convert(read_json(GAMEDATA_PATH / 'activity_table.json')) # ACTIVITY_TABLE = ActivityTable.convert(read_json(GAMEDATA_PATH / 'activity_table.json'))
# AUDIO_DATA = AudioData.convert(read_json(GAMEDATA_PATH / 'audio_data.json')) # AUDIO_DATA = AudioData.convert(read_json(GAMEDATA_PATH / 'audio_data.json'))
@ -84,23 +81,15 @@ CHAPTER_TABLE = ChapterTable.convert(
CHARACTER_TABLE = CharacterTable.convert( CHARACTER_TABLE = CharacterTable.convert(
{"chars": read_json(GAMEDATA_PATH / "character_table.json")} {"chars": read_json(GAMEDATA_PATH / "character_table.json")}
) )
CHAR_META_TABLE = CharMetaTable.convert( CHAR_META_TABLE = CharMetaTable.convert(read_json(GAMEDATA_PATH / "char_meta_table.json"))
read_json(GAMEDATA_PATH / "char_meta_table.json")
)
CHARM_TABLE = CharmTable.convert(read_json(GAMEDATA_PATH / "charm_table.json")) CHARM_TABLE = CharmTable.convert(read_json(GAMEDATA_PATH / "charm_table.json"))
CHAR_PATH_TABLE = CharPatchTable.convert( CHAR_PATH_TABLE = CharPatchTable.convert(read_json(GAMEDATA_PATH / "char_patch_table.json"))
read_json(GAMEDATA_PATH / "char_patch_table.json")
)
CHARWORD_TABLE = CharwordTable.convert(read_json(GAMEDATA_PATH / "charword_table.json")) CHARWORD_TABLE = CharwordTable.convert(read_json(GAMEDATA_PATH / "charword_table.json"))
CHECKIN_TABLE = CheckinTable.convert(read_json(GAMEDATA_PATH / "checkin_table.json")) CHECKIN_TABLE = CheckinTable.convert(read_json(GAMEDATA_PATH / "checkin_table.json"))
CLIMB_TOWER_TABLE = ClimbTowerTable.convert( CLIMB_TOWER_TABLE = ClimbTowerTable.convert(read_json(GAMEDATA_PATH / "climb_tower_table.json"))
read_json(GAMEDATA_PATH / "climb_tower_table.json")
)
CLUE_DATA = ClueData.convert(read_json(GAMEDATA_PATH / "clue_data.json")) CLUE_DATA = ClueData.convert(read_json(GAMEDATA_PATH / "clue_data.json"))
CRISIS_TABLE = CrisisTable.convert(read_json(GAMEDATA_PATH / "crisis_table.json")) CRISIS_TABLE = CrisisTable.convert(read_json(GAMEDATA_PATH / "crisis_table.json"))
CRISIS_V2_TABLE = CrisisV2Table.convert( CRISIS_V2_TABLE = CrisisV2Table.convert(read_json(GAMEDATA_PATH / "crisis_v2_table.json"))
read_json(GAMEDATA_PATH / "crisis_v2_table.json")
)
# DISPLAY_META_TABLE = DisplayMetaTable.convert(read_json(GAMEDATA_PATH / 'display_meta_table.json')) # DISPLAY_META_TABLE = DisplayMetaTable.convert(read_json(GAMEDATA_PATH / 'display_meta_table.json'))
@ -126,38 +115,28 @@ HANDBOOK_TEAM_TABLE = HandbookTeamTable.convert(
MEDAL_TABLE = MedalTable.convert(read_json(GAMEDATA_PATH / "medal_table.json")) MEDAL_TABLE = MedalTable.convert(read_json(GAMEDATA_PATH / "medal_table.json"))
MISSION_TABLE = MissionTable.convert(read_json(GAMEDATA_PATH / "mission_table.json")) MISSION_TABLE = MissionTable.convert(read_json(GAMEDATA_PATH / "mission_table.json"))
OPEN_SERVER_TABLE = OpenServerTable.convert( OPEN_SERVER_TABLE = OpenServerTable.convert(read_json(GAMEDATA_PATH / "open_server_table.json"))
read_json(GAMEDATA_PATH / "open_server_table.json")
)
PLAYER_AVATAR_TABLE = PlayerAvatarTable.convert( PLAYER_AVATAR_TABLE = PlayerAvatarTable.convert(
read_json(GAMEDATA_PATH / "player_avatar_table.json") read_json(GAMEDATA_PATH / "player_avatar_table.json")
) )
RANGE_TABLE = RangeTable.convert( RANGE_TABLE = RangeTable.convert({"range_": read_json(GAMEDATA_PATH / "range_table.json")})
{"range_": read_json(GAMEDATA_PATH / "range_table.json")}
)
REPLICATE_TABLE = ReplicateTable.convert( REPLICATE_TABLE = ReplicateTable.convert(
{"replicate": read_json(GAMEDATA_PATH / "replicate_table.json")} {"replicate": read_json(GAMEDATA_PATH / "replicate_table.json")}
) )
RETRO_TABLE = RetroTable.convert(read_json(GAMEDATA_PATH / "retro_table.json")) RETRO_TABLE = RetroTable.convert(read_json(GAMEDATA_PATH / "retro_table.json"))
ROGUELIKE_TABLE = RoguelikeTable.convert( ROGUELIKE_TABLE = RoguelikeTable.convert(read_json(GAMEDATA_PATH / "roguelike_table.json"))
read_json(GAMEDATA_PATH / "roguelike_table.json")
)
ROGUELIKE_TOPIC_TABLE = RoguelikeTopicTable.convert( ROGUELIKE_TOPIC_TABLE = RoguelikeTopicTable.convert(
read_json(GAMEDATA_PATH / "roguelike_topic_table.json") read_json(GAMEDATA_PATH / "roguelike_topic_table.json")
) )
SANDBOX_TABLE = SandboxTable.convert(read_json(GAMEDATA_PATH / "sandbox_table.json")) SANDBOX_TABLE = SandboxTable.convert(read_json(GAMEDATA_PATH / "sandbox_table.json"))
SANDBOX_PERM_TABLE = SandboxPermTable.convert( # SANDBOX_PERM_TABLE = SandboxPermTable.convert(
read_json(GAMEDATA_PATH / "sandbox_perm_table.json") # read_json(GAMEDATA_PATH / "sandbox_perm_table.json")
) # )
SHOP_CLIENT_TABLE = ShopClientTable.convert( SHOP_CLIENT_TABLE = ShopClientTable.convert(read_json(GAMEDATA_PATH / "shop_client_table.json"))
read_json(GAMEDATA_PATH / "shop_client_table.json") SKILL_TABLE = SkillTable.convert({"skills": read_json(GAMEDATA_PATH / "skill_table.json")})
)
SKILL_TABLE = SkillTable.convert(
{"skills": read_json(GAMEDATA_PATH / "skill_table.json")}
)
SKIN_TABLE = SkinTable.convert(read_json(GAMEDATA_PATH / "skin_table.json")) SKIN_TABLE = SkinTable.convert(read_json(GAMEDATA_PATH / "skin_table.json"))
STAGE_TABLE = StageTable.convert(read_json(GAMEDATA_PATH / "stage_table.json")) STAGE_TABLE = StageTable.convert(read_json(GAMEDATA_PATH / "stage_table.json"))
STORY_REVIEW_META_TABLE = StoryReviewMetaTable.convert( STORY_REVIEW_META_TABLE = StoryReviewMetaTable.convert(
@ -166,17 +145,11 @@ STORY_REVIEW_META_TABLE = StoryReviewMetaTable.convert(
STORY_REVIEW_TABLE = StoryReviewTable.convert( STORY_REVIEW_TABLE = StoryReviewTable.convert(
{"storyreviewtable": read_json(GAMEDATA_PATH / "story_review_table.json")} {"storyreviewtable": read_json(GAMEDATA_PATH / "story_review_table.json")}
) )
STORY_TABLE = StoryTable.convert( STORY_TABLE = StoryTable.convert({"stories": read_json(GAMEDATA_PATH / "story_table.json")})
{"stories": read_json(GAMEDATA_PATH / "story_table.json")}
)
TECH_BUFF_TABLE = TechBuffTable.convert( TECH_BUFF_TABLE = TechBuffTable.convert(read_json(GAMEDATA_PATH / "tech_buff_table.json"))
read_json(GAMEDATA_PATH / "tech_buff_table.json")
)
TIP_TABLE = TipTable.convert(read_json(GAMEDATA_PATH / "tip_table.json")) TIP_TABLE = TipTable.convert(read_json(GAMEDATA_PATH / "tip_table.json"))
TOKEN_TABLE = TokenTable.convert( TOKEN_TABLE = TokenTable.convert({"tokens": read_json(GAMEDATA_PATH / "token_table.json")})
{"tokens": read_json(GAMEDATA_PATH / "token_table.json")}
)
UNIEQUIP_DATA = UniequipData.convert(read_json(GAMEDATA_PATH / "uniequip_data.json")) UNIEQUIP_DATA = UniequipData.convert(read_json(GAMEDATA_PATH / "uniequip_data.json"))
UNIEQUIP_TABLE = UniEquipTable.convert(read_json(GAMEDATA_PATH / "uniequip_table.json")) UNIEQUIP_TABLE = UniEquipTable.convert(read_json(GAMEDATA_PATH / "uniequip_table.json"))

View File

@ -34,9 +34,7 @@ async def get_role_img(uid: str):
secretary_skinId = secretary.skinId.replace("@", "_") secretary_skinId = secretary.skinId.replace("@", "_")
secretary_char_img = ( secretary_char_img = (
Image.open(SKINPACK_PATH / f"{secretary_skinId}b.png") Image.open(SKINPACK_PATH / f"{secretary_skinId}b.png").resize((768, 768)).convert("RGBA")
.resize((768, 768))
.convert("RGBA")
) )
char_info.paste(secretary_char_img, (0, -20), secretary_char_img) char_info.paste(secretary_char_img, (0, -20), secretary_char_img)

View File

@ -73,9 +73,7 @@ async def sign_in(ark_uid: str) -> str:
count += 1 count += 1
sign_missed = day_of_month - count + special_count sign_missed = day_of_month - count + special_count
im = f"ark签到成功!\n{get_im}\n本月漏签次数:{sign_missed}" im = f"ark签到成功!\n{get_im}\n本月漏签次数:{sign_missed}"
logger.info( logger.info(f"[ARK签到] {ark_uid} 签到完成, 结果: ark签到成功, 漏签次数: {sign_missed}")
f"[ARK签到] {ark_uid} 签到完成, 结果: ark签到成功, 漏签次数: {sign_missed}"
)
return im return im
@ -134,9 +132,7 @@ async def daily_sign():
delay = 1 delay = 1
else: else:
delay = 50 + random.randint(3, 45) delay = 50 + random.randint(3, 45)
logger.info( logger.info(f"[ARK签到] 已签到{len(tasks)}个用户, 等待{delay}秒进行下一次签到")
f"[ARK签到] 已签到{len(tasks)}个用户, 等待{delay}秒进行下一次签到"
)
tasks.clear() tasks.clear()
already = 0 already = 0
await asyncio.sleep(delay) await asyncio.sleep(delay)

View File

@ -3,7 +3,9 @@ import re
from ..utils.ark_api import ark_skd_api from ..utils.ark_api import ark_skd_api
from ..utils.database.models import ArknightsBind, ArknightsPush, ArknightsUser from ..utils.database.models import ArknightsBind, ArknightsPush, ArknightsUser
ERROR_HINT = "添加失败, 格式为: skd添加cred Cred 例如: skd添加cred VropL583Sb1hClS5buQ4nSASkDlL8tMT" ERROR_HINT = (
"添加失败, 格式为: skd添加cred Cred 例如: skd添加cred VropL583Sb1hClS5buQ4nSASkDlL8tMT"
)
UID_HINT = "添加失败, 请先绑定明日方舟UID" UID_HINT = "添加失败, 请先绑定明日方舟UID"

View File

@ -26,7 +26,13 @@ async def text2pic(text: str, max_size: int = 800, font_size: int = 20):
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) img_draw = ImageDraw.ImageDraw(img)
y = draw_center_text_by_line( y = draw_center_text_by_line(
img_draw, (25, 0), text, sans_font_20, "black", 750, True img_draw,
(25, 0),
text,
sans_font_20,
"black",
750,
True,
) )
img = img.crop((0, 0, 800, int(y + 30))) img = img.crop((0, 0, 800, int(y + 30)))
return await convert_img(img) return await convert_img(img)

View File

@ -172,15 +172,11 @@ async def get_equip_info(char_id: str):
for blackboard_ in blackboard: for blackboard_ in blackboard:
blackboard_dict[blackboard_.key] = blackboard_.value blackboard_dict[blackboard_.key] = blackboard_.value
if additionalDescription: if additionalDescription:
additionalDescription = re.sub( additionalDescription = re.sub(r"<[^>]+>", "", additionalDescription)
r"<[^>]+>", "", additionalDescription
)
additionalDescription = render_template( additionalDescription = render_template(
additionalDescription, blackboard_dict additionalDescription, blackboard_dict
) )
additionalDescription = re.sub( additionalDescription = re.sub(r".000000", "", additionalDescription)
r".000000", "", additionalDescription
)
im += f"{additionalDescription}\n" im += f"{additionalDescription}\n"
elif target == "TALENT_DATA_ONLY": elif target == "TALENT_DATA_ONLY":
@ -192,9 +188,7 @@ async def get_equip_info(char_id: str):
upgradeDescription = candidate.upgradeDescription upgradeDescription = candidate.upgradeDescription
blackboard = candidate.blackboard blackboard = candidate.blackboard
if upgradeDescription and blackboard: if upgradeDescription and blackboard:
upgradeDescription = re.sub( upgradeDescription = re.sub(r"<[^>]+>", "", upgradeDescription)
r"<[^>]+>", "", upgradeDescription
)
im += f"{upgradeDescription}\n" im += f"{upgradeDescription}\n"
elif target == "DISPLAY": elif target == "DISPLAY":
@ -207,15 +201,11 @@ async def get_equip_info(char_id: str):
for blackboard_ in blackboard: for blackboard_ in blackboard:
blackboard_dict[blackboard_.key] = blackboard_.value blackboard_dict[blackboard_.key] = blackboard_.value
if additionalDescription and blackboard: if additionalDescription and blackboard:
additionalDescription = re.sub( additionalDescription = re.sub(r"<[^>]+>", "", additionalDescription)
r"<[^>]+>", "", additionalDescription
)
additionalDescription = render_template( additionalDescription = render_template(
additionalDescription, blackboard_dict additionalDescription, blackboard_dict
) )
additionalDescription = re.sub( additionalDescription = re.sub(r".000000", "", additionalDescription)
r".000000", "", additionalDescription
)
im += f"{additionalDescription}\n" im += f"{additionalDescription}\n"
elif target == "TALENT": elif target == "TALENT":
@ -226,9 +216,7 @@ async def get_equip_info(char_id: str):
if upgradeDescription == "": if upgradeDescription == "":
continue continue
else: else:
upgradeDescription = re.sub( upgradeDescription = re.sub(r"<[^>]+>", "", upgradeDescription)
r"<[^>]+>", "", upgradeDescription
)
im += f"{upgradeDescription}\n" im += f"{upgradeDescription}\n"
elif target == "TRAIT_DATA_ONLY": elif target == "TRAIT_DATA_ONLY":
@ -241,9 +229,7 @@ async def get_equip_info(char_id: str):
for blackboard_ in blackboard: for blackboard_ in blackboard:
blackboard_dict[blackboard_.key] = blackboard_.value blackboard_dict[blackboard_.key] = blackboard_.value
if overrideDescripton and blackboard: if overrideDescripton and blackboard:
overrideDescripton = re.sub( overrideDescripton = re.sub(r"<[^>]+>", "", overrideDescripton)
r"<[^>]+>", "", overrideDescripton
)
overrideDescripton = render_template( overrideDescripton = render_template(
overrideDescripton, blackboard_dict overrideDescripton, blackboard_dict
) )
@ -302,9 +288,7 @@ async def get_wiki_info(char_id: str):
char_talent_name = talent_candidates[-1].name char_talent_name = talent_candidates[-1].name
char_talent_description = talent_candidates[-1].description char_talent_description = talent_candidates[-1].description
if char_talent_description: if char_talent_description:
char_talent_description = re.sub( char_talent_description = re.sub(r"<[^>]+>", "", char_talent_description)
r"<[^>]+>", "", char_talent_description
)
im += f"{char_talent_name}: {char_talent_description}\n" im += f"{char_talent_name}: {char_talent_description}\n"
char_potential_data = character_data.potentialRanks char_potential_data = character_data.potentialRanks
@ -384,9 +368,9 @@ async def get_wiki_info(char_id: str):
if skill_description: if skill_description:
skill_description = skill_description.replace(":0.0", "") skill_description = skill_description.replace(":0.0", "")
skill_description = re.sub(r"<[^>]+>", "", skill_description) skill_description = re.sub(r"<[^>]+>", "", skill_description)
skill_description = render_template( skill_description = render_template(skill_description, black_board_dict).replace(
skill_description, black_board_dict "--", "-"
).replace("--", "-") )
last_skill_description = re.sub(r".000000", "", skill_description) last_skill_description = re.sub(r".000000", "", skill_description)
if "{" in last_skill_description: if "{" in last_skill_description:
raise NotImplementedError raise NotImplementedError
@ -668,9 +652,9 @@ async def draw_wiki(char_id: str):
black_board_dict[black_board.key] = black_board.value black_board_dict[black_board.key] = black_board.value
if skill_description: if skill_description:
skill_description = re.sub(r"<[^>]+>", "", skill_description) skill_description = re.sub(r"<[^>]+>", "", skill_description)
skill_description = render_template( skill_description = render_template(skill_description, black_board_dict).replace(
skill_description, black_board_dict "--", "-"
).replace("--", "-") )
last_skill_description = re.sub(r".000000", "", skill_description) last_skill_description = re.sub(r".000000", "", skill_description)
if "{" in last_skill_description: if "{" in last_skill_description:
raise NotImplementedError raise NotImplementedError

View File

@ -52,7 +52,9 @@ class BaseArkApi:
proxy_url: Union[str, None] = proxy_url if proxy_url else None proxy_url: Union[str, None] = proxy_url if proxy_url else None
async def _pass( async def _pass(
self, gt: str, ch: str self,
gt: str,
ch: str,
) -> Tuple[Union[str, None], Union[str, None]]: ) -> Tuple[Union[str, None], Union[str, None]]:
_pass_api = core_plugins_config.get_config("_pass_API").data _pass_api = core_plugins_config.get_config("_pass_API").data
if _pass_api: if _pass_api:
@ -71,10 +73,12 @@ class BaseArkApi:
return validate, ch return validate, ch
async def get_game_player_info( async def get_game_player_info(
self, uid: str self,
uid: str,
) -> Union[int, ArknightsPlayerInfoModel]: ) -> Union[int, ArknightsPlayerInfoModel]:
cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid( cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(
uid=uid, attr="cred" uid=uid,
attr="cred",
) )
if cred is None: if cred is None:
return -60 return -60
@ -102,7 +106,8 @@ class BaseArkApi:
async def skd_sign(self, uid: str) -> Union[int, ArknightsAttendanceModel]: async def skd_sign(self, uid: str) -> Union[int, ArknightsAttendanceModel]:
cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid( cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(
uid=uid, attr="cred" uid=uid,
attr="cred",
) )
if cred is None: if cred is None:
return -60 return -60
@ -137,10 +142,12 @@ class BaseArkApi:
return msgspec.convert(unpack_data, ArknightsAttendanceModel) return msgspec.convert(unpack_data, ArknightsAttendanceModel)
async def get_sign_info( async def get_sign_info(
self, uid: str self,
uid: str,
) -> Union[int, ArknightsAttendanceCalendarModel]: ) -> Union[int, ArknightsAttendanceCalendarModel]:
cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid( cred: Union[str, None] = await ArknightsUser.get_user_attr_by_uid(
uid=uid, attr="cred" uid=uid,
attr="cred",
) )
if cred is None: if cred is None:
return -60 return -60
@ -187,7 +194,10 @@ class BaseArkApi:
cred = ( cred = (
cred cred
if cred if cred
else await ArknightsUser.get_user_attr_by_uid(uid=uid, attr="cred") else await ArknightsUser.get_user_attr_by_uid(
uid=uid,
attr="cred",
)
) )
header = deepcopy(_HEADER) header = deepcopy(_HEADER)
if cred is None: if cred is None:
@ -222,7 +232,9 @@ class BaseArkApi:
uid = await ArknightsUser.get_uid_by_cred(cred) uid = await ArknightsUser.get_uid_by_cred(cred)
if uid is not None: if uid is not None:
await ArknightsUser.update_user_attr_by_uid( await ArknightsUser.update_user_attr_by_uid(
uid=uid, attr="token", value=token uid=uid,
attr="token",
value=token,
) )
return token return token
@ -263,12 +275,7 @@ class BaseArkApi:
raise Exception("token is None") raise Exception("token is None")
encode_token = token.encode("utf-8") encode_token = token.encode("utf-8")
hex_s = hmac.new(encode_token, str2.encode("utf-8"), hashlib.sha256).hexdigest() hex_s = hmac.new(encode_token, str2.encode("utf-8"), hashlib.sha256).hexdigest()
sign = ( sign = hashlib.md5(hex_s.encode("utf-8")).hexdigest().encode("utf-8").decode("utf-8")
hashlib.md5(hex_s.encode("utf-8"))
.hexdigest()
.encode("utf-8")
.decode("utf-8")
)
header["sign"] = sign header["sign"] = sign
header["timestamp"] = timestamp header["timestamp"] = timestamp
header["dId"] = dId header["dId"] = dId
@ -317,7 +324,7 @@ class BaseArkApi:
use_proxy: Union[bool, None] = False, use_proxy: Union[bool, None] = False,
) -> Union[Dict, Union[int, None]]: ) -> Union[Dict, Union[int, None]]:
async with ClientSession( async with ClientSession(
connector=TCPConnector(verify_ssl=ssl_verify) connector=TCPConnector(verify_ssl=ssl_verify),
) as client: ) as client:
raw_data = {} raw_data = {}
if "cred" not in header: if "cred" not in header:

View File

@ -40,9 +40,7 @@ class ArknightsUser(User, table=True):
@classmethod @classmethod
@with_session @with_session
async def get_all_user( async def get_all_user(cls: Type[T_ARK_User], session: AsyncSession) -> Sequence[T_ARK_User]:
cls: Type[T_ARK_User], session: AsyncSession
) -> Sequence[T_ARK_User]:
sql = select(cls).where(cls.cred is not None, cls.cred != "") sql = select(cls).where(cls.cred is not None, cls.cred != "")
result = await session.execute(sql) result = await session.execute(sql)
data: Sequence[T_ARK_User] = result.scalars().all() data: Sequence[T_ARK_User] = result.scalars().all()
@ -88,13 +86,9 @@ class ArknightsPush(Push, table=True):
ap_is_push: Union[bool, None] = Field(default=False, title="理智是否已经推送") ap_is_push: Union[bool, None] = Field(default=False, title="理智是否已经推送")
training_push: Union[bool, None] = Field(default=False, title="训练室推送") training_push: Union[bool, None] = Field(default=False, title="训练室推送")
training_value: Union[int, None] = Field(default=30, title="训练室推送阈值") training_value: Union[int, None] = Field(default=30, title="训练室推送阈值")
training_is_push: Union[bool, None] = Field( training_is_push: Union[bool, None] = Field(default=False, title="训练室是否已经推送")
default=False, title="训练室是否已经推送"
)
version_push: Union[bool, None] = Field(default=False, title="版本更新推送") version_push: Union[bool, None] = Field(default=False, title="版本更新推送")
version_is_push: Union[bool, None] = Field( version_is_push: Union[bool, None] = Field(default=False, title="版本更新是否已经推送")
default=False, title="版本更新是否已经推送"
)
@classmethod @classmethod
async def insert_push_data(cls, bot_id: str, uid: str, skd_uid: str): async def insert_push_data(cls, bot_id: str, uid: str, skd_uid: str):
@ -144,9 +138,7 @@ class ArknightsPush(Push, table=True):
await cls.update_push_data(uid, {f"{mode}_is_push": status}) await cls.update_push_data(uid, {f"{mode}_is_push": status})
@classmethod @classmethod
async def select_push_data( async def select_push_data(cls: Type[T_BaseIDModel], uid: str) -> Union[T_BaseIDModel, None]:
cls: Type[T_BaseIDModel], uid: str
) -> Union[T_BaseIDModel, None]:
return await cls.base_select_data(uid=uid) return await cls.base_select_data(uid=uid)
@classmethod @classmethod

View File

@ -318,9 +318,7 @@ class BuildingDataCustomDataDiyUISortTemplateListData(BaseStruct):
expandState: str expandState: str
defaultTemplateIndex: int defaultTemplateIndex: int
defaultTemplateOrder: str defaultTemplateOrder: str
templates: List[ templates: List[BuildingDataCustomDataDiyUISortTemplateListDataDiyUISortTemplateData]
BuildingDataCustomDataDiyUISortTemplateListDataDiyUISortTemplateData
]
class BuildingDataCustomData(BaseStruct): class BuildingDataCustomData(BaseStruct):

View File

@ -130,6 +130,13 @@ class GachaDataFesGachaPoolRelateItem(BaseStruct):
rarityRank6ItemId: str rarityRank6ItemId: str
class GachaNormalItem(BaseStruct):
itemId: str
endTime: int
gachaPoolId: str
isTen: bool
class GachaTable(BaseStruct): class GachaTable(BaseStruct):
__version__ = "24-02-02-10-18-07-831ad8" __version__ = "24-02-02-10-18-07-831ad8"
@ -137,6 +144,7 @@ class GachaTable(BaseStruct):
carousel: List[GachaDataCarouselData] carousel: List[GachaDataCarouselData]
classicPotentialMaterialConverter: PotentialMaterialConverterConfig classicPotentialMaterialConverter: PotentialMaterialConverterConfig
dicRecruit6StarHint: Union[Dict[str, str], None] dicRecruit6StarHint: Union[Dict[str, str], None]
normalGachaItem: List[GachaNormalItem]
fesGachaPoolRelateItem: Union[ fesGachaPoolRelateItem: Union[
Dict[str, GachaDataFesGachaPoolRelateItem], Dict[str, GachaDataFesGachaPoolRelateItem],
None, None,

View File

@ -1,3 +1,3 @@
ArknightsUID_version = "0.1.0" ArknightsUID_version = "0.1.0"
Arknights_Client_version = "2.2.21" Arknights_Client_version = "2.2.41"
Arknights_Res_version = "24-03-29-14-33-44-5002d2" Arknights_Res_version = "24-04-26-09-22-08-413e02"

View File

@ -56,7 +56,7 @@ pythonVersion = "3.8"
pythonPlatform = "All" pythonPlatform = "All"
[tool.ruff] [tool.ruff]
line-length = 88 line-length = 98
target-version = "py38" target-version = "py38"
[tool.ruff.lint] [tool.ruff.lint]