拆分一部分代码

This commit is contained in:
qwerdvd 2023-09-11 02:42:36 +08:00
parent ca99169a6b
commit 13731a3d40
9 changed files with 102 additions and 99 deletions

View File

@ -1,6 +1,6 @@
from __future__ import annotations from __future__ import annotations
from typing import Union, TypedDict from typing import List, TypedDict, Union
class MihomoData(TypedDict): class MihomoData(TypedDict):
@ -20,7 +20,7 @@ class Equipment(TypedDict):
class Relic(TypedDict): class Relic(TypedDict):
subAffixList: list[SubAffix] subAffixList: List[SubAffix]
tid: int tid: int
mainAffixId: int mainAffixId: int
type: int type: int
@ -33,13 +33,13 @@ class SubAffix(TypedDict):
class Avatar(TypedDict): class Avatar(TypedDict):
skillTreeList: list[Behavior] skillTreeList: List[Behavior]
rank: Union[int, None] rank: Union[int, None]
pos: Union[int, None] pos: Union[int, None]
avatarId: int avatarId: int
level: int level: int
equipment: Union[Equipment, None] equipment: Union[Equipment, None]
relicList: list[Relic] relicList: List[Relic]
promotion: int promotion: int
@ -61,7 +61,7 @@ class PlayerDetailInfo(TypedDict):
assistAvatarDetail: Avatar assistAvatarDetail: Avatar
platform: str platform: str
isDisplayAvatar: bool isDisplayAvatar: bool
avatarDetailList: Union[list[Avatar], None] avatarDetailList: Union[List[Avatar], None]
uid: int uid: int
friendCount: int friendCount: int
worldLevel: int worldLevel: int

View File

@ -0,0 +1,69 @@
from typing import Dict
from .draw_char_img import cal_char_info
from .effect.Role import RoleInstance
async def cal(char_data: Dict):
char = await cal_char_info(char_data)
skill_info_list = []
if char.char_id in [
1102,
1204,
1107,
1213,
1006,
1005,
1205,
1208,
1104,
1209,
1004,
1003,
1201,
1212,
]:
if char.char_id == 1213:
for skill_type in [
'Normal',
'Normal1',
'Normal2',
'Normal3',
'Ultra',
]:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
elif char.char_id == 1005:
for skill_type in ['Normal', 'BPSkill', 'Ultra', 'DOT']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
elif char.char_id == 1212:
for skill_type in ['Normal', 'BPSkill', 'BPSkill1', 'Ultra']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
elif char.char_id == 1208:
for skill_type in ['Normal', 'Ultra']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
elif char.char_id in [1205, 1201]:
for skill_type in ['Normal', 'Normal1', 'Ultra']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
else:
for skill_type in ['Normal', 'BPSkill', 'Ultra']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
if char.char_id in [1204, 1107, 1005, 1205, 1209, 1003]:
role = RoleInstance(char)
im_tmp = await role.cal_damage('Talent')
skill_info_list.append(im_tmp)
return skill_info_list
else:
return '角色伤害计算未完成'

View File

@ -36,7 +36,7 @@ from ..utils.resource.RESOURCE_PATH import (
SKILL_PATH, SKILL_PATH,
WEAPON_PATH, WEAPON_PATH,
) )
from .effect.Role import RoleInstance from .cal_damage import cal
from .mono.Character import Character from .mono.Character import Character
from .to_data import api_to_dict from .to_data import api_to_dict
@ -726,71 +726,6 @@ async def get_char_data(
return json.load(fp) return json.load(fp)
async def cal(char_data: Dict):
char = await cal_char_info(char_data)
skill_info_list = []
if char.char_id in [
1102,
1204,
1107,
1213,
1006,
1005,
1205,
1208,
1104,
1209,
1004,
1003,
1201,
1212,
]:
if char.char_id == 1213:
for skill_type in [
'Normal',
'Normal1',
'Normal2',
'Normal3',
'Ultra',
]:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
elif char.char_id == 1005:
for skill_type in ['Normal', 'BPSkill', 'Ultra', 'DOT']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
elif char.char_id == 1212:
for skill_type in ['Normal', 'BPSkill', 'BPSkill1', 'Ultra']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
elif char.char_id == 1208:
for skill_type in ['Normal', 'Ultra']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
elif char.char_id in [1205, 1201]:
for skill_type in ['Normal', 'Normal1', 'Ultra']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
else:
for skill_type in ['Normal', 'BPSkill', 'Ultra']:
role = RoleInstance(char)
im_tmp = await role.cal_damage(skill_type)
skill_info_list.append(im_tmp)
if char.char_id in [1204, 1107, 1005, 1205, 1209, 1003]:
role = RoleInstance(char)
im_tmp = await role.cal_damage('Talent')
skill_info_list.append(im_tmp)
return skill_info_list
else:
return '角色伤害计算未完成'
async def get_relic_score( async def get_relic_score(
subProperty: str, subValue, char_name: str, is_main: bool subProperty: str, subValue, char_name: str, is_main: bool
) -> float: ) -> float:

View File

@ -30,7 +30,6 @@ async def merge_attribute(base_attr: Dict, attribute_bonus: Dict) -> Dict:
attr_value = base_attr.get(attribute, 0) attr_value = base_attr.get(attribute, 0)
merged_attr[attribute] = attr_value + attribute_bonus[attribute] merged_attr[attribute] = attr_value + attribute_bonus[attribute]
elif attribute.__contains__('AddedRatio'): elif attribute.__contains__('AddedRatio'):
# attr = attribute.split('AddedRatio')[0]
attr_value = base_attr.get(attribute, 0) attr_value = base_attr.get(attribute, 0)
merged_attr[attribute] = attr_value + attribute_bonus[attribute] merged_attr[attribute] = attr_value + attribute_bonus[attribute]
elif attribute.__contains__('DmgAdd'): elif attribute.__contains__('DmgAdd'):

View File

@ -1,16 +1,16 @@
import asyncio import asyncio
from pathlib import Path from pathlib import Path
from typing import List, Union from typing import Dict, List, Union
from PIL import Image, ImageDraw from PIL import Image, ImageDraw
from .to_data import api_to_dict
from ..utils.image.convert import convert_img
from ..utils.fonts.first_world import fw_font_28 from ..utils.fonts.first_world import fw_font_28
from ..utils.map.SR_MAP_PATH import avatarId2Name
from ..utils.map.name_covert import avatar_id_to_char_star
from ..utils.fonts.starrail_fonts import sr_font_24, sr_font_30, sr_font_58 from ..utils.fonts.starrail_fonts import sr_font_24, sr_font_30, sr_font_58
from ..utils.image.convert import convert_img
from ..utils.map.name_covert import avatar_id_to_char_star
from ..utils.map.SR_MAP_PATH import avatarId2Name
from ..utils.resource.RESOURCE_PATH import CHAR_ICON_PATH, CHAR_PREVIEW_PATH from ..utils.resource.RESOURCE_PATH import CHAR_ICON_PATH, CHAR_PREVIEW_PATH
from .to_data import api_to_dict
half_color = (255, 255, 255, 120) half_color = (255, 255, 255, 120)
first_color = (29, 29, 29) first_color = (29, 29, 29)
@ -18,7 +18,6 @@ second_color = (67, 61, 56)
white_color = (247, 247, 247) white_color = (247, 247, 247)
gray_color = (175, 175, 175) gray_color = (175, 175, 175)
# MAP_PATH = Path(__file__).parent / 'map'
TEXT_PATH = Path(__file__).parent / 'texture2D' TEXT_PATH = Path(__file__).parent / 'texture2D'
char_mask = Image.open(TEXT_PATH / 'char_mask.png') char_mask = Image.open(TEXT_PATH / 'char_mask.png')
char_bg_mask = Image.open(TEXT_PATH / 'char_bg_mask.png') char_bg_mask = Image.open(TEXT_PATH / 'char_bg_mask.png')
@ -104,7 +103,7 @@ async def draw_enka_card(uid: str, char_list: List, showfrom: int = 0):
return await convert_img(img) return await convert_img(img)
async def draw_mihomo_char(index: int, img: Image.Image, char_data: dict): async def draw_mihomo_char(index: int, img: Image.Image, char_data: Dict):
char_id = char_data['avatarId'] char_id = char_data['avatarId']
char_name = char_data['avatarName'] char_name = char_data['avatarName']
char_star = await avatar_id_to_char_star(str(char_id)) char_star = await avatar_id_to_char_star(str(char_id))
@ -136,7 +135,7 @@ async def draw_mihomo_char(index: int, img: Image.Image, char_data: dict):
img.paste(char_card, (x, 199), char_card) img.paste(char_card, (x, 199), char_card)
async def draw_enka_char(index: int, img: Image.Image, char_data: dict): async def draw_enka_char(index: int, img: Image.Image, char_data: Dict):
char_id = char_data['avatarId'] char_id = char_data['avatarId']
char_star = await avatar_id_to_char_star(str(char_id)) char_star = await avatar_id_to_char_star(str(char_id))
char_card = Image.open(TEXT_PATH / f'char_card_{char_star}.png') char_card = Image.open(TEXT_PATH / f'char_card_{char_star}.png')

View File

@ -1,6 +1,6 @@
import json import json
from pathlib import Path from pathlib import Path
from typing import List, Optional, Union from typing import Dict, List, Optional, Union
from httpx import ReadTimeout from httpx import ReadTimeout
@ -33,13 +33,13 @@ from .cal_value import cal_relic_main_affix, cal_relic_sub_affix
async def api_to_dict( async def api_to_dict(
sr_uid: str, sr_data: Optional[MihomoData] = None sr_uid: str, sr_data: Optional[MihomoData] = None
) -> Union[List[dict], str]: ) -> Union[List[Dict], str]:
""" """
:说明: :说明:
访问Mihomo.me API并转换为StarRailUID的数据Json 访问Mihomo.me API并转换为StarRailUID的数据Json
:参数: :参数:
* ``uid: str``: 玩家uid * ``uid: str``: 玩家uid
* ``sr_data: Optional[dict] = None``: 来自Mihomo.me的dict, 可留空 * ``sr_data: Optional[Dict] = None``: 来自Mihomo.me的dict, 可留空
:返回: :返回:
* ``刷新完成提示语: str``: 包含刷新成功的角色列表 * ``刷新完成提示语: str``: 包含刷新成功的角色列表
""" """
@ -54,7 +54,7 @@ async def api_to_dict(
return '网络不太稳定...' return '网络不太稳定...'
if isinstance(sr_data, str): if isinstance(sr_data, str):
return [] return []
if isinstance(sr_data, dict): if isinstance(sr_data, Dict):
if 'detailInfo' not in sr_data: if 'detailInfo' not in sr_data:
return '服务器正在维护或者关闭中...\n检查Mihomo.me是否可以访问\n如可以访问,尝试上报Bug!' return '服务器正在维护或者关闭中...\n检查Mihomo.me是否可以访问\n如可以访问,尝试上报Bug!'
elif sr_data is None: elif sr_data is None:
@ -342,7 +342,7 @@ async def get_data(char: Avatar, sr_data: MihomoData, sr_uid: str):
async def api_to_data( async def api_to_data(
uid: str, mihomo_data: Optional[MihomoData] = None uid: str, mihomo_data: Optional[MihomoData] = None
) -> Union[dict, str]: ) -> Union[Dict, str]:
raw_data = await api_to_dict(uid, mihomo_data) raw_data = await api_to_dict(uid, mihomo_data)
if isinstance(raw_data, str): if isinstance(raw_data, str):
return raw_data return raw_data

View File

@ -1,9 +1,9 @@
import json
import asyncio import asyncio
from pathlib import Path import json
from urllib import parse
from datetime import datetime from datetime import datetime
from pathlib import Path
from typing import Dict, Optional from typing import Dict, Optional
from urllib import parse
from ..utils.mys_api import mys_api from ..utils.mys_api import mys_api
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
@ -61,7 +61,7 @@ async def get_new_gachalog_by_link(
async def save_gachalogs( async def save_gachalogs(
uid: str, uid: str,
gacha_url: str, gacha_url: str,
raw_data: Optional[dict] = None, raw_data: Optional[Dict] = None,
is_force: bool = False, is_force: bool = False,
) -> str: ) -> str:
path = PLAYER_PATH / str(uid) path = PLAYER_PATH / str(uid)

View File

@ -1,15 +1,16 @@
import asyncio
import base64
import io import io
import json import json
import base64
import asyncio
from http.cookies import SimpleCookie from http.cookies import SimpleCookie
from typing import Any, List, Tuple, Union, Literal from typing import Any, Dict, List, Literal, Tuple, Union
import qrcode import qrcode
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.logger import logger
from qrcode.constants import ERROR_CORRECT_L from qrcode.constants import ERROR_CORRECT_L
from gsuid_core.bot import Bot
from gsuid_core.logger import logger
from gsuid_core.models import Event
from gsuid_core.segment import MessageSegment from gsuid_core.segment import MessageSegment
from ..utils.api import get_sqla from ..utils.api import get_sqla
@ -40,7 +41,7 @@ def get_qrcode_base64(url):
async def refresh( async def refresh(
code_data: dict, code_data: Dict,
) -> Union[Tuple[Literal[False], None], Tuple[Literal[True], Any]]: ) -> Union[Tuple[Literal[False], None], Tuple[Literal[True], Any]]:
scanned = False scanned = False
while True: while True:

View File

@ -1,5 +1,5 @@
from pathlib import Path from pathlib import Path
from typing import Dict, List, Union, TypedDict from typing import Dict, List, TypedDict, Union
from msgspec import json as msgjson from msgspec import json as msgjson
@ -78,7 +78,7 @@ with Path.open(MAP / rankId2Name_fileName, encoding='UTF-8') as f:
rankId2Name = msgjson.decode(f.read(), type=Dict[str, str]) rankId2Name = msgjson.decode(f.read(), type=Dict[str, str])
with Path.open(MAP / characterSkillTree_fileName, encoding='UTF-8') as f: with Path.open(MAP / characterSkillTree_fileName, encoding='UTF-8') as f:
characterSkillTree = msgjson.decode(f.read(), type=Dict[str, dict]) characterSkillTree = msgjson.decode(f.read(), type=Dict[str, Dict])
with Path.open(MAP / avatarId2DamageType_fileName, encoding='UTF-8') as f: with Path.open(MAP / avatarId2DamageType_fileName, encoding='UTF-8') as f:
avatarId2DamageType = msgjson.decode(f.read(), type=Dict[str, str]) avatarId2DamageType = msgjson.decode(f.read(), type=Dict[str, str])
@ -97,7 +97,7 @@ with Path.open(
) )
with Path.open(MAP / RelicSetSkill_fileName, encoding='UTF-8') as f: with Path.open(MAP / RelicSetSkill_fileName, encoding='UTF-8') as f:
RelicSetSkill = msgjson.decode(f.read(), type=Dict[str, dict]) RelicSetSkill = msgjson.decode(f.read(), type=Dict[str, Dict])
with Path.open(MAP / skillId2AttackType_fileName, encoding='UTF-8') as f: with Path.open(MAP / skillId2AttackType_fileName, encoding='UTF-8') as f:
skillId2AttackType = msgjson.decode(f.read(), type=Dict[str, str]) skillId2AttackType = msgjson.decode(f.read(), type=Dict[str, str])