add AvatarDetail Model

This commit is contained in:
qwerdvd 2023-10-31 16:54:18 +08:00
parent 10bbdcac3b
commit c5a074a054
No known key found for this signature in database
GPG Key ID: A3AF89C783404769
5 changed files with 134 additions and 91 deletions

View File

@ -2,6 +2,52 @@ from typing import Any, Dict, List, Union
from msgspec import Struct
class AvatarDetailEquipment(Struct):
item_id: str
item_name: str
item_url: str
avatar_base_type: str
rarity: str
max_level: int
cur_level: int
target_level: int
class AvatarDetailSkill(Struct):
point_id: str
pre_point: str
point_type: int
anchor: str
item_url: str
max_level: int
cur_level: int
target_level: int
progress: str
min_level_limit: int
class AvatarDetailAvatar(Struct):
item_id: str
item_name: str
icon_url: str
damage_type: str
rarity: str
avatar_base_type: str
max_level: int
cur_level: int
target_level: int
vertical_icon_url: str
class AvatarDetail(Struct):
avatar: AvatarDetailAvatar
skills: List[AvatarDetailSkill]
skills_other: List[AvatarDetailSkill]
equipment: AvatarDetailEquipment
is_login: bool
################
# 抽卡记录相关 #
################

View File

@ -1,13 +1,13 @@
import re
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.logger import logger
from gsuid_core.models import Event
from gsuid_core.sv import SV
from ..utils.convert import get_uid
from ..utils.sr_prefix import PREFIX
from .draw_roleinfo_card import get_role_img, get_detail_img
from .draw_roleinfo_card import get_detail_img, get_role_img
sv_get_info = SV('sr查询信息')

View File

@ -1,17 +1,30 @@
import asyncio
from pathlib import Path
from typing import Dict, List, Union, Optional
from typing import Dict, List, Optional, Union
from PIL import Image, ImageDraw
from gsuid_core.logger import logger
from gsuid_core.utils.error_reply import get_error
from PIL import Image, ImageDraw
from ..sruid_utils.api.mys.models import (
AvatarDetail,
AvatarListItem,
AvatarListItemDetail,
RoleBasicInfo,
Stats,
)
from ..utils.fonts.first_world import fw_font_28
from ..utils.fonts.starrail_fonts import (
sr_font_24,
sr_font_26,
sr_font_28,
sr_font_30,
sr_font_36,
sr_font_40,
)
from ..utils.image.convert import convert_img
from ..utils.mys_api import mys_api
from .utils import get_icon, wrap_list
from ..utils.image.convert import convert_img
from ..utils.fonts.starrail_fonts import sr_font_24, sr_font_26, sr_font_28, sr_font_30, sr_font_36, sr_font_40
from ..utils.fonts.first_world import fw_font_28
from ..sruid_utils.api.mys.models import Stats, RoleBasicInfo, AvatarListItem
from gsuid_core.logger import logger
TEXT_PATH = Path(__file__).parent / 'texture2D'
@ -242,7 +255,7 @@ async def draw_role_card(sr_uid: str) -> Union[bytes, str]:
return await convert_img(img)
async def _draw_detail_card(
avatar_detail, avatar, index, char_info
avatar_detail: AvatarDetail, avatar: AvatarListItemDetail, index: int, char_info: Image.Image
) -> Image.Image:
if str(avatar.rarity) == '5':
bg_color = (255, 240, 211)
@ -280,7 +293,7 @@ async def _draw_detail_card(
avatar_draw.text(
(380, 25),
f"{avatar_detail['skills'][0]['cur_level']}",
f'{avatar_detail.skills[0].cur_level}',
first_color,
sr_font_24,
'mm',
@ -288,7 +301,7 @@ async def _draw_detail_card(
avatar_draw.text(
(430, 25),
f"{avatar_detail['skills'][1]['cur_level']}",
f'{avatar_detail.skills[1].cur_level}',
first_color,
sr_font_24,
'mm',
@ -296,7 +309,7 @@ async def _draw_detail_card(
avatar_draw.text(
(485, 25),
f"{avatar_detail['skills'][2]['cur_level']}",
f'{avatar_detail.skills[2].cur_level}',
first_color,
sr_font_24,
'mm',
@ -304,7 +317,7 @@ async def _draw_detail_card(
avatar_draw.text(
(540, 25),
f"{avatar_detail['skills'][3]['cur_level']}",
f'{avatar_detail.skills[3].cur_level}',
first_color,
sr_font_24,
'mm',
@ -317,7 +330,7 @@ async def _draw_detail_card(
avatar_draw.text(
(640, 25),
f"{avatar.equip.rank}",
f'{avatar.equip.rank}',
first_color,
sr_font_24,
'lm',
@ -325,7 +338,7 @@ async def _draw_detail_card(
avatar_draw.text(
(680, 25),
f"Lv{avatar.equip.level}",
f'Lv{avatar.equip.level}',
first_color,
sr_font_24,
'lm',
@ -333,7 +346,7 @@ async def _draw_detail_card(
avatar_draw.text(
(750, 25),
f"{avatar.equip.name}",
f'{avatar.equip.name}',
first_color,
sr_font_24,
'lm',
@ -345,8 +358,7 @@ async def _draw_detail_card(
async def get_detail_card(sr_uid: str) -> Union[bytes, str]:
# 获取角色列表
# avatar_list = await mys_api.get_avatar_list(sr_uid)
avatar_list = await mys_api.get_avatar_info(sr_uid, '1001')
avatar_list = await mys_api.get_avatar_info(sr_uid, 1001)
if isinstance(avatar_list, int):
return get_error(avatar_list)
avatar_num = len(avatar_list.avatar_list)
@ -445,11 +457,16 @@ async def get_detail_card(sr_uid: str) -> Union[bytes, str]:
'mm',
)
for index, avatar in enumerate(avatar_list.avatar_list):
avatar_detail = await mys_api.get_avatar_detail(sr_uid, avatar.id)
avatar_detail = await mys_api.get_avatar_detail(sr_uid, str(avatar.id))
if isinstance(avatar_detail, int):
return get_error(avatar_detail)
# 200
char_info = await _draw_detail_card(avatar_detail, avatar, index, char_info)
char_info = await _draw_detail_card(
avatar_detail,
avatar,
index,
char_info,
)
# 写底层文字
char_img_draw.text(

View File

@ -1,10 +1,10 @@
from io import BytesIO
from pathlib import Path
from typing import List, TypeVar, Generator
from typing import Generator, List, TypeVar
from PIL import Image
from aiohttp import ClientSession
from gsuid_core.data_store import get_res_path
from PIL import Image
T = TypeVar('T')

View File

@ -1,38 +1,39 @@
import copy
import time
import random
from string import digits, ascii_letters
from typing import Any, Dict, Union, Literal, Optional
import time
from string import ascii_letters, digits
from typing import Any, Dict, Literal, Optional, Union
import msgspec
from gsuid_core.utils.api.mys_api import _MysApi
from gsuid_core.utils.database.models import GsUser
# from gsuid_core.utils.api.mys.models import MysSign, SignList
from gsuid_core.utils.api.mys.tools import (
mys_version,
_random_int_ds,
generate_os_ds,
get_web_ds_token,
mys_version,
)
from gsuid_core.utils.api.mys_api import _MysApi
from gsuid_core.utils.database.models import GsUser
from .api import srdbsqla
from ..sruid_utils.api.mys.api import _API
from ..sruid_utils.api.mys.models import (
MysSign,
AbyssData,
AvatarDetail,
AvatarInfo,
DailyNoteData,
GachaLog,
MonthlyAward,
MysSign,
RogueData,
RogueLocustData,
RoleBasicInfo,
RoleIndex,
SignInfo,
SignList,
AbyssData,
RogueData,
RoleIndex,
AvatarInfo,
MonthlyAward,
DailyNoteData,
RoleBasicInfo,
WidgetStamina,
RogueLocustData,
)
from .api import srdbsqla
RECOGNIZE_SERVER = {
'1': 'prod_gf_cn',
@ -286,27 +287,6 @@ class MysApi(_MysApi):
# data = cast(AvatarInfo, data['data'])
return data
async def get_avatar_list(
self, uid: str
):
data = await self.simple_mys_req(
'STAR_RAIL_AVATAR_LIST_URL',
uid,
params={
'game': 'hkrpg',
'uid': uid,
'region': RECOGNIZE_SERVER.get(str(uid)[0], 'prod_gf_cn'),
'lang': 'zh-cn',
'tab_from': 'TabOwned',
'page': '1',
'size': '100',
},
header=self._HEADER,
)
if isinstance(data, Dict):
data = data['data']
return data
async def get_avatar_detail(
self, uid: str, avatarid: str
):
@ -325,7 +305,7 @@ class MysApi(_MysApi):
header=self._HEADER,
)
if isinstance(data, Dict):
data = data['data']
data = msgspec.convert(data['data'], type=AvatarDetail)
return data
async def get_sign_list(self, uid) -> Union[SignList, int]: