diff --git a/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/leaderboards/by.py b/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/leaderboards/by.py index f6550e26..d7c4fd61 100644 --- a/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/leaderboards/by.py +++ b/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/leaderboards/by.py @@ -7,7 +7,7 @@ from ..base import ArCounts, FailedModel, P, SuccessModel -class League(BaseModel): +class BaseLeague(BaseModel): gamesplayed: int gameswon: int tr: float @@ -16,13 +16,21 @@ class League(BaseModel): bestrank: ValidRank glicko: float rd: float - apm: float pps: float - vs: float decaying: bool -class Entry(BaseModel): +class InvalidLeague(BaseLeague): + apm: None + vs: None + + +class League(BaseLeague): + apm: float + vs: float + + +class BaseEntry(BaseModel): id: str = Field(..., alias='_id') username: str role: Literal['anon', 'user', 'bot', 'halfmod', 'mod', 'admin', 'sysop'] @@ -30,7 +38,6 @@ class Entry(BaseModel): xp: float country: str | None = None supporter: bool | None = None - league: League gamesplayed: int gameswon: int gametime: float @@ -39,8 +46,16 @@ class Entry(BaseModel): p: P +class InvalidEntry(BaseEntry): + league: InvalidLeague + + +class Entry(BaseEntry): + league: League + + class Data(BaseModel): - entries: list[Entry] + entries: list[Entry | InvalidEntry] class BySuccessModel(SuccessModel): diff --git a/nonebot_plugin_tetris_stats/games/tetrio/list.py b/nonebot_plugin_tetris_stats/games/tetrio/list.py index ccc9c913..d0a2e663 100644 --- a/nonebot_plugin_tetris_stats/games/tetrio/list.py +++ b/nonebot_plugin_tetris_stats/games/tetrio/list.py @@ -14,6 +14,7 @@ from .api.leaderboards import by from .api.schemas.base import P from .api.schemas.leaderboards import Parameter +from .api.schemas.leaderboards.by import Entry from .constant import GAME_TYPE command.add( @@ -84,6 +85,7 @@ async def _( join_at=None, ) for i in league.data.entries + if isinstance(i, Entry) ], ), ) diff --git a/nonebot_plugin_tetris_stats/games/tetrio/rank/__init__.py b/nonebot_plugin_tetris_stats/games/tetrio/rank/__init__.py index 5cd5fb9f..bca8705a 100644 --- a/nonebot_plugin_tetris_stats/games/tetrio/rank/__init__.py +++ b/nonebot_plugin_tetris_stats/games/tetrio/rank/__init__.py @@ -95,7 +95,7 @@ async def get_tetra_league_data() -> None: players: list[Entry] = [] for result in results: - players.extend(result.data.entries) + players.extend([i for i in result.data.entries if isinstance(i, Entry)]) players.sort(key=lambda x: x.league.tr, reverse=True) rank_player_mapping: defaultdict[Rank, list[Entry]] = defaultdict(list)