mirror of
https://github.com/baiqwerdvd/ArknightsUID.git
synced 2025-06-19 05:45:03 +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.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.sv import SV
|
from gsuid_core.sv import SV
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
ARK_USER_ME = 'https://zonai.skland.com/api/v1/user/me'
|
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'
|
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 gsuid_core.logger import logger
|
||||||
|
|
||||||
from ...database.models import ArknightsUser
|
from ...database.models import ArknightsUser
|
||||||
from ...models.skland.models import ArknightsUserMeModel
|
from ...models.skland.models import ArknightsPlayerInfoModel, ArknightsUserMeModel
|
||||||
from .api import ARK_USER_ME
|
from .api import ARK_PLAYER_INFO, ARK_USER_ME
|
||||||
|
|
||||||
|
|
||||||
class BaseArkApi:
|
class BaseArkApi:
|
||||||
@ -21,6 +21,23 @@ class BaseArkApi:
|
|||||||
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
|
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:
|
async def check_cred_valid(self, Cred: str) -> bool | ArknightsUserMeModel:
|
||||||
header = deepcopy(self._HEADER)
|
header = deepcopy(self._HEADER)
|
||||||
header['Cred'] = Cred
|
header['Cred'] = Cred
|
||||||
|
@ -403,6 +403,20 @@ class BuildingDormitories(Struct):
|
|||||||
comfort: int
|
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):
|
class BuildingTradings(Struct):
|
||||||
slotId: str
|
slotId: str
|
||||||
level: int
|
level: int
|
||||||
@ -410,7 +424,7 @@ class BuildingTradings(Struct):
|
|||||||
completeWorkTime: int
|
completeWorkTime: int
|
||||||
lastUpdateTime: int
|
lastUpdateTime: int
|
||||||
strategy: str
|
strategy: str
|
||||||
stock: list[int]
|
stock: list[BuildingStock]
|
||||||
stockLimit: int
|
stockLimit: int
|
||||||
|
|
||||||
|
|
||||||
@ -500,8 +514,8 @@ class PlayerAssistChar(Struct):
|
|||||||
class PlayerMedal(Struct):
|
class PlayerMedal(Struct):
|
||||||
type_: str = field(name='type')
|
type_: str = field(name='type')
|
||||||
template: str
|
template: str
|
||||||
templateMedallist: list[str]
|
templateMedalList: list[str]
|
||||||
customMedalLayout: list[str]
|
customMedalLayout: list[str | None]
|
||||||
total: int
|
total: int
|
||||||
|
|
||||||
|
|
||||||
@ -546,6 +560,14 @@ class DisplayShowConfig(Struct):
|
|||||||
standingsSwitch: bool
|
standingsSwitch: bool
|
||||||
|
|
||||||
|
|
||||||
|
class PlayerActivityBannerList(Struct):
|
||||||
|
activityId: str
|
||||||
|
imgUrl: str
|
||||||
|
url: str
|
||||||
|
startTs: int
|
||||||
|
endTs: int
|
||||||
|
|
||||||
|
|
||||||
class ArknightsPlayerInfoModel(Struct, omit_defaults=True, gc=False):
|
class ArknightsPlayerInfoModel(Struct, omit_defaults=True, gc=False):
|
||||||
currentTs: int
|
currentTs: int
|
||||||
showConfig: DisplayShowConfig
|
showConfig: DisplayShowConfig
|
||||||
@ -575,6 +597,7 @@ class ArknightsPlayerInfoModel(Struct, omit_defaults=True, gc=False):
|
|||||||
manufactureFormulaInfoMap: dict[str, PlayerManufactureFormulaInfo]
|
manufactureFormulaInfoMap: dict[str, PlayerManufactureFormulaInfo]
|
||||||
charAssets: list[PlayerCharAsset]
|
charAssets: list[PlayerCharAsset]
|
||||||
skinAssets: list[PlayerSkinAsset]
|
skinAssets: list[PlayerSkinAsset]
|
||||||
|
activityBannerList: dict[str, list[PlayerActivityBannerList]]
|
||||||
|
|
||||||
|
|
||||||
################
|
################
|
||||||
|
Loading…
x
Reference in New Issue
Block a user