From ce7bce6e2047339ce7fac7f15e5eb7bfb6076ce4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=B5=E5=91=B5=E3=81=A7=E3=81=99?= <51957264+shoucandanghehe@users.noreply.github.com> Date: Sat, 21 Dec 2024 01:41:58 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E7=88=86=E7=82=B8=20(#?= =?UTF-8?q?528)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🐛 修爆炸 * 🐛 修复类型错误 --- .../tetrio/api/schemas/leaderboards/by.py | 27 ++++++++++++++----- .../games/tetrio/list.py | 2 ++ .../games/tetrio/rank/__init__.py | 2 +- 3 files changed, 24 insertions(+), 7 deletions(-) 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 f6550e2..d7c4fd6 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 ...typing import Rank, ValidRank 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 ccc9c91..d0a2e66 100644 --- a/nonebot_plugin_tetris_stats/games/tetrio/list.py +++ b/nonebot_plugin_tetris_stats/games/tetrio/list.py @@ -14,6 +14,7 @@ from . import command 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 5cd5fb9..bca8705 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)