mirror of
https://github.com/PaiGramTeam/SIMNet.git
synced 2024-11-21 21:58:05 +00:00
✨ Support starrail activity - FantasticStory
This commit is contained in:
parent
63ce8a249e
commit
2e50bf2081
@ -31,7 +31,7 @@ class RogueCharacter(StarRailBaseCharacter):
|
||||
level: int
|
||||
|
||||
|
||||
class StarFightCharacter(StarRailBaseCharacter):
|
||||
class ActivityCharacter(StarRailBaseCharacter):
|
||||
"""Combat character model."""
|
||||
|
||||
level: int
|
||||
|
@ -2,7 +2,7 @@
|
||||
from typing import List, Optional
|
||||
|
||||
from simnet.models.base import APIModel
|
||||
from simnet.models.starrail.character import StarFightCharacter
|
||||
from simnet.models.starrail.character import ActivityCharacter
|
||||
|
||||
from .base import PartialTime
|
||||
|
||||
@ -25,7 +25,7 @@ class StarRailStarFightRecord(APIModel):
|
||||
round: int
|
||||
stage_id: int
|
||||
time: Optional[PartialTime]
|
||||
lineup: List[StarFightCharacter]
|
||||
lineup: List[ActivityCharacter]
|
||||
|
||||
@property
|
||||
def time_str(self) -> str:
|
||||
@ -42,16 +42,66 @@ class StarRailStarFight(StarRailActivityBase):
|
||||
records: List[StarRailStarFightRecord]
|
||||
|
||||
|
||||
class StarRailFantasticStoryBuff(APIModel):
|
||||
"""Fantastic Story Buff"""
|
||||
|
||||
id: int
|
||||
name: str
|
||||
desc: str
|
||||
icon: str
|
||||
|
||||
|
||||
class StarRailFantasticStoryRecord(APIModel):
|
||||
"""Fantastic Story Record"""
|
||||
|
||||
name: str
|
||||
score: int
|
||||
score_rank: int
|
||||
stage_id: int
|
||||
finish_time: Optional[PartialTime]
|
||||
avatars: List[ActivityCharacter]
|
||||
buffs: List[StarRailFantasticStoryBuff]
|
||||
|
||||
@property
|
||||
def time_str(self) -> str:
|
||||
"""Get the time as a string."""
|
||||
if self.finish_time is None:
|
||||
return "N/A"
|
||||
|
||||
return self.finish_time.datetime.strftime("%Y.%m.%d %H:%M")
|
||||
|
||||
|
||||
class StarRailFantasticStory(StarRailActivityBase):
|
||||
"""Fantastic Story"""
|
||||
|
||||
records: List[StarRailFantasticStoryRecord]
|
||||
|
||||
|
||||
class StarRailActivity(APIModel):
|
||||
"""Starrail chronicle activity."""
|
||||
|
||||
activities: List
|
||||
|
||||
def find_activity(self, key: str) -> Optional[dict]:
|
||||
"""Find an activity by key."""
|
||||
for activity in self.activities:
|
||||
if list(activity.keys())[0] == key:
|
||||
return activity
|
||||
|
||||
return None
|
||||
|
||||
@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"])
|
||||
if data := self.find_activity("star_fight"):
|
||||
return StarRailStarFight(**data["star_fight"])
|
||||
|
||||
raise ValueError("No star fight activity found.")
|
||||
|
||||
@property
|
||||
def fantastic_story(self) -> StarRailFantasticStory:
|
||||
"""Get the fantastic story activity."""
|
||||
if data := self.find_activity("fantastic_story"):
|
||||
return StarRailFantasticStory(**data["fantastic_story"])
|
||||
|
||||
raise ValueError("No fantastic story activity found.")
|
||||
|
@ -1,5 +1,6 @@
|
||||
"""Starrail Chronicle Base Model."""
|
||||
import datetime
|
||||
from typing import Optional
|
||||
|
||||
from simnet.models.base import APIModel
|
||||
|
||||
@ -12,7 +13,8 @@ class PartialTime(APIModel):
|
||||
day: int
|
||||
hour: int
|
||||
minute: int
|
||||
second: Optional[int] = None
|
||||
|
||||
@property
|
||||
def datetime(self) -> datetime.datetime:
|
||||
return datetime.datetime(self.year, self.month, self.day, self.hour, self.minute)
|
||||
return datetime.datetime(self.year, self.month, self.day, self.hour, self.minute, self.second or 0)
|
||||
|
Loading…
Reference in New Issue
Block a user