mirror of
https://github.com/PaiGramTeam/MibooGram.git
synced 2024-11-22 07:08:04 +00:00
61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
from typing import Tuple, Optional
|
|
|
|
from simnet import ZZZClient
|
|
from simnet.models.zzz.calculator import ZZZCalculatorCharacterDetails
|
|
|
|
from gram_core.dependence.redisdb import RedisDB
|
|
from plugins.tools.genshin import GenshinHelper
|
|
|
|
|
|
class NeedClient(Exception):
|
|
"""无缓存,需要 StarRailClient"""
|
|
|
|
|
|
class PlayerDetailHelper:
|
|
def __init__(self, helper: GenshinHelper, redis: RedisDB):
|
|
self.helper = helper
|
|
self.qname = "plugins:agent_detail"
|
|
self.redis = redis.client
|
|
self.expire = 15 * 60 # 15分钟
|
|
|
|
async def set_characters_for_redis(
|
|
self,
|
|
uid: int,
|
|
nickname: str,
|
|
data: "ZZZCalculatorCharacterDetails",
|
|
) -> None:
|
|
data_k = f"{self.qname}:{uid}:data"
|
|
json_data = data.json(by_alias=True)
|
|
await self.redis.set(data_k, json_data, ex=self.expire)
|
|
|
|
async def del_characters_for_redis(
|
|
self,
|
|
uid: int,
|
|
) -> None:
|
|
data_k = f"{self.qname}:{uid}:data"
|
|
await self.redis.delete(data_k)
|
|
|
|
async def get_characters_for_redis(
|
|
self,
|
|
uid: int,
|
|
) -> Tuple[Optional[str], Optional["ZZZCalculatorCharacterDetails"]]:
|
|
data_k = f"{self.qname}:{uid}:data"
|
|
data_v = await self.redis.get(data_k)
|
|
if data_v is None:
|
|
return None, None
|
|
json_data = str(data_v, encoding="utf-8")
|
|
return "", ZZZCalculatorCharacterDetails.parse_raw(json_data)
|
|
|
|
async def get_characters(
|
|
self, uid: int, client: "ZZZClient" = None
|
|
) -> Tuple[Optional[str], Optional["ZZZCalculatorCharacterDetails"]]:
|
|
nickname, data = await self.get_characters_for_redis(uid)
|
|
if nickname is None or data is None:
|
|
if not client:
|
|
raise NeedClient
|
|
data1 = await client.get_zzz_characters()
|
|
cids = [i.id for i in data1.characters]
|
|
data = await client.get_zzz_character_info(cids)
|
|
await self.set_characters_for_redis(client.player_id, "", data)
|
|
return nickname, data
|