支持获取角色信息并保存

This commit is contained in:
qwerdvd 2023-08-11 21:31:07 +08:00
parent 52dfa580fe
commit 78f585d185
6 changed files with 101 additions and 6 deletions

View File

@ -0,0 +1,30 @@
import re
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.sv import SV
from gsuid_core.utils.database.api import get_uid
from ..utils.ark_prefix import PREFIX
from ..utils.database.models import ArknightsBind
# from ..utils.convert import get_uid
from .draw_roleinfo_card import get_role_img
sv_get_info = SV('ark查询信息')
@sv_get_info.on_command((f'{PREFIX}uid'))
async def send_role_info(bot: Bot, ev: Event):
# name = ''.join(re.findall('[\u4e00-\u9fa5]', ev.text))
# if name:
# return
uid = await get_uid(bot, ev, bind_model=ArknightsBind)
if uid is None:
return '你还没有绑定UID噢,请使用[ark绑定uid123]完成绑定!'
await bot.logger.info('开始执行[ark查询信息]')
await get_role_img(uid)
await bot.send('WIP')
# await bot.send(await get_role_img(uid))

View File

@ -0,0 +1,25 @@
import asyncio
import json
from gsuid_core.data_store import get_res_path
from gsuid_core.utils.error_reply import get_error
from gsuid_core.utils.image.convert import convert_img
from PIL import Image
from ..utils.ark_api import ark_skd_api
async def get_role_img(sr_uid: str):
player_info = await ark_skd_api.get_game_player_info(sr_uid)
if isinstance(player_info, int):
return get_error(player_info)
current_ts = player_info.currentTs
status = player_info.status
uid = status.uid
player_save_path = get_res_path(['ArknightsUID', 'player'])
with open(player_save_path / f'{uid}.json', 'w', encoding='UTF-8') as f:
json.dump(player_info, f, ensure_ascii=False, indent=4)

View File

@ -1,4 +1,3 @@
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.sv import SV

View File

@ -1,3 +1,4 @@
ARK_USER_ME = 'https://zonai.skland.com/api/v1/user/me'
ARK_PLAYER_INFO = 'https://zonai.skland.com/api/v1/game/player/info'
ARK_GEN_CRED_BY_CODE = 'https://zonai.skland.com/api/v1/user/auth/generate_cred_by_code'

View File

@ -6,8 +6,8 @@ from aiohttp import ClientSession, ContentTypeError, TCPConnector
from gsuid_core.logger import logger
from ...database.models import ArknightsUser
from ...models.skland.models import ArknightsUserMeModel
from .api import ARK_USER_ME
from ...models.skland.models import ArknightsPlayerInfoModel, ArknightsUserMeModel
from .api import ARK_PLAYER_INFO, ARK_USER_ME
class BaseArkApi:
@ -21,6 +21,23 @@ class BaseArkApi:
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
}
async def get_game_player_info(self, uid: str) -> int | ArknightsPlayerInfoModel:
cred = await ArknightsUser.get_user_attr_by_uid(uid=uid, attr='cred')
if cred is None:
return -61
header = deepcopy(self._HEADER)
header['Cred'] = cred
raw_data = await self._ark_request(
url=ARK_PLAYER_INFO,
params={'uid': uid},
header=header,
)
unpack_data = self.unpack(raw_data)
if isinstance(unpack_data, int):
return unpack_data
else:
return msgspec.convert(unpack_data, type=ArknightsPlayerInfoModel)
async def check_cred_valid(self, Cred: str) -> bool | ArknightsUserMeModel:
header = deepcopy(self._HEADER)
header['Cred'] = Cred

View File

@ -403,6 +403,20 @@ class BuildingDormitories(Struct):
comfort: int
class BuildingStockDelivery(Struct):
id_: str = field(name='id')
count: int
type_: str = field(name='type')
class BuildingStock(Struct):
instId: int
type_: str = field(name='type')
delivery: list[BuildingStockDelivery]
gain: BuildingStockDelivery
isViolated: bool
class BuildingTradings(Struct):
slotId: str
level: int
@ -410,7 +424,7 @@ class BuildingTradings(Struct):
completeWorkTime: int
lastUpdateTime: int
strategy: str
stock: list[int]
stock: list[BuildingStock]
stockLimit: int
@ -500,8 +514,8 @@ class PlayerAssistChar(Struct):
class PlayerMedal(Struct):
type_: str = field(name='type')
template: str
templateMedallist: list[str]
customMedalLayout: list[str]
templateMedalList: list[str]
customMedalLayout: list[str | None]
total: int
@ -546,6 +560,14 @@ class DisplayShowConfig(Struct):
standingsSwitch: bool
class PlayerActivityBannerList(Struct):
activityId: str
imgUrl: str
url: str
startTs: int
endTs: int
class ArknightsPlayerInfoModel(Struct, omit_defaults=True, gc=False):
currentTs: int
showConfig: DisplayShowConfig
@ -575,6 +597,7 @@ class ArknightsPlayerInfoModel(Struct, omit_defaults=True, gc=False):
manufactureFormulaInfoMap: dict[str, PlayerManufactureFormulaInfo]
charAssets: list[PlayerCharAsset]
skinAssets: list[PlayerSkinAsset]
activityBannerList: dict[str, list[PlayerActivityBannerList]]
################