mirror of
https://github.com/PaiGramTeam/SIMNet.git
synced 2024-11-25 15:42:16 +00:00
✨ Support query starrail activity
This commit is contained in:
parent
b29ecf51fa
commit
386c14c149
@ -4,6 +4,7 @@ from typing import Optional, Mapping, Dict, Any
|
|||||||
from simnet.client.components.chronicle.base import BaseChronicleClient
|
from simnet.client.components.chronicle.base import BaseChronicleClient
|
||||||
from simnet.errors import BadRequest, DataNotPublic
|
from simnet.errors import BadRequest, DataNotPublic
|
||||||
from simnet.models.lab.record import RecordCard
|
from simnet.models.lab.record import RecordCard
|
||||||
|
from simnet.models.starrail.chronicle.activity import StarRailActivity
|
||||||
from simnet.models.starrail.chronicle.challenge import StarRailChallenge
|
from simnet.models.starrail.chronicle.challenge import StarRailChallenge
|
||||||
from simnet.models.starrail.chronicle.characters import StarRailDetailCharacters
|
from simnet.models.starrail.chronicle.characters import StarRailDetailCharacters
|
||||||
from simnet.models.starrail.chronicle.museum import StarRailMuseumBasic, StarRailMuseumDetail
|
from simnet.models.starrail.chronicle.museum import StarRailMuseumBasic, StarRailMuseumDetail
|
||||||
@ -265,3 +266,24 @@ class StarRailBattleChronicleClient(BaseChronicleClient):
|
|||||||
"""
|
"""
|
||||||
data = await self._request_starrail_record("museum/detail", uid, lang=lang)
|
data = await self._request_starrail_record("museum/detail", uid, lang=lang)
|
||||||
return StarRailMuseumDetail(**data)
|
return StarRailMuseumDetail(**data)
|
||||||
|
|
||||||
|
async def get_starrail_activity(
|
||||||
|
self,
|
||||||
|
uid: Optional[int] = None,
|
||||||
|
lang: Optional[str] = None,
|
||||||
|
) -> StarRailActivity:
|
||||||
|
"""Get starrail activity info.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
uid (Optional[int], optional): The player ID. Defaults to None.
|
||||||
|
lang (Optional[str], optional): The language of the data. Defaults to None.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
StarRailActivity: The requested activity info.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
BadRequest: If the request is invalid.
|
||||||
|
DataNotPublic: If the requested data is not public.
|
||||||
|
"""
|
||||||
|
data = await self._request_starrail_record("activity", uid, lang=lang)
|
||||||
|
return StarRailActivity(**data)
|
||||||
|
@ -227,3 +227,12 @@ class LabClient(BaseClient):
|
|||||||
"""
|
"""
|
||||||
accounts = await self.get_game_accounts(lang=lang)
|
accounts = await self.get_game_accounts(lang=lang)
|
||||||
return [account for account in accounts if account.game == Game.GENSHIN]
|
return [account for account in accounts if account.game == Game.GENSHIN]
|
||||||
|
|
||||||
|
async def get_starrail_accounts(self, *, lang: Optional[str] = None) -> List[Account]:
|
||||||
|
"""Get the starrail accounts of the currently logged-in user.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List[Account]: A list of account info objects of starrail accounts.
|
||||||
|
"""
|
||||||
|
accounts = await self.get_game_accounts(lang=lang)
|
||||||
|
return [account for account in accounts if account.game == Game.STARRAIL]
|
||||||
|
@ -29,3 +29,10 @@ class RogueCharacter(StarRailBaseCharacter):
|
|||||||
"""Rogue character model."""
|
"""Rogue character model."""
|
||||||
|
|
||||||
level: int
|
level: int
|
||||||
|
|
||||||
|
|
||||||
|
class StarFightCharacter(StarRailBaseCharacter):
|
||||||
|
"""Combat character model."""
|
||||||
|
|
||||||
|
level: int
|
||||||
|
is_trial: bool
|
||||||
|
57
simnet/models/starrail/chronicle/activity.py
Normal file
57
simnet/models/starrail/chronicle/activity.py
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
"""Starrail chronicle activity."""
|
||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
|
from simnet.models.base import APIModel
|
||||||
|
from simnet.models.starrail.character import StarFightCharacter
|
||||||
|
|
||||||
|
from .base import PartialTime
|
||||||
|
|
||||||
|
__all__ = ["StarRailActivityBase", "StarRailStarFightRecord", "StarRailStarFight", "StarRailActivity"]
|
||||||
|
|
||||||
|
|
||||||
|
class StarRailActivityBase(APIModel):
|
||||||
|
"""StarRailActivity Base Model"""
|
||||||
|
|
||||||
|
exists_data: bool
|
||||||
|
is_hot: bool
|
||||||
|
strategy_link: str = ""
|
||||||
|
|
||||||
|
|
||||||
|
class StarRailStarFightRecord(APIModel):
|
||||||
|
"""Stellar Flare Record"""
|
||||||
|
|
||||||
|
name: str
|
||||||
|
difficulty_id: int
|
||||||
|
round: int
|
||||||
|
stage_id: int
|
||||||
|
time: Optional[PartialTime]
|
||||||
|
lineup: List[StarFightCharacter]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def time_str(self) -> str:
|
||||||
|
"""Get the time as a string."""
|
||||||
|
if self.time is None:
|
||||||
|
return "N/A"
|
||||||
|
|
||||||
|
return self.time.datetime.strftime("%Y.%m.%d %H:%M")
|
||||||
|
|
||||||
|
|
||||||
|
class StarRailStarFight(StarRailActivityBase):
|
||||||
|
"""Stellar Flare"""
|
||||||
|
|
||||||
|
records: List[StarRailStarFightRecord]
|
||||||
|
|
||||||
|
|
||||||
|
class StarRailActivity(APIModel):
|
||||||
|
"""Starrail chronicle activity."""
|
||||||
|
|
||||||
|
activities: List
|
||||||
|
|
||||||
|
@property
|
||||||
|
def star_fight(self) -> StarRailStarFight:
|
||||||
|
"""Get the star fight activity."""
|
||||||
|
for activity in self.activities:
|
||||||
|
if list(activity.keys())[0] == "star_fight":
|
||||||
|
return StarRailStarFight(**activity["star_fight"])
|
||||||
|
|
||||||
|
raise ValueError("No star fight activity found.")
|
Loading…
Reference in New Issue
Block a user