mirror of
https://github.com/baiqwerdvd/ArknightsUID.git
synced 2025-06-18 21:35:05 +08:00
✨支持获取角色信息并保存
This commit is contained in:
parent
52dfa580fe
commit
78f585d185
30
ArknightsUID/arknightsuid_roleinfo/__init__.py
Normal file
30
ArknightsUID/arknightsuid_roleinfo/__init__.py
Normal 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))
|
25
ArknightsUID/arknightsuid_roleinfo/draw_roleinfo_card.py
Normal file
25
ArknightsUID/arknightsuid_roleinfo/draw_roleinfo_card.py
Normal 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)
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
from gsuid_core.bot import Bot
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.sv import SV
|
||||
|
@ -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'
|
||||
|
@ -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
|
||||
|
@ -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]]
|
||||
|
||||
|
||||
################
|
||||
|
Loading…
x
Reference in New Issue
Block a user