diff --git a/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/processor.py b/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/processor.py index ecd9122..24ec481 100644 --- a/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/processor.py +++ b/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/processor.py @@ -24,7 +24,7 @@ from .constant import BASE_URL, GAME_TYPE, RANK_PERCENTILE from .model import IORank from .schemas.league_all import FailedModel as LeagueAllFailed from .schemas.league_all import LeagueAll -from .schemas.league_all import User as LeagueAllUser +from .schemas.league_all import ValidUser as LeagueAllUser from .schemas.user_info import FailedModel as InfoFailed from .schemas.user_info import ( NeverPlayedLeague, @@ -216,7 +216,7 @@ async def get_io_rank_data() -> None: user = sort(users, field) return asdict(User(ID=user.id, name=user.username)), field(user) - users = league_all.data.users + users = [i for i in league_all.data.users if isinstance(i, LeagueAllUser)] rank_to_users: defaultdict[Rank, list[LeagueAllUser]] = defaultdict(list) for i in users: rank_to_users[i.league.rank].append(i) diff --git a/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/schemas/league_all.py b/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/schemas/league_all.py index efc33fc..0229109 100644 --- a/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/schemas/league_all.py +++ b/nonebot_plugin_tetris_stats/game_data_processor/io_data_processor/schemas/league_all.py @@ -7,7 +7,7 @@ from .base import SuccessModel as BaseSuccessModel class SuccessModel(BaseSuccessModel): class Data(BaseModel): - class User(BaseModel): + class ValidUser(BaseModel): class League(BaseModel): gamesplayed: int gameswon: int @@ -30,10 +30,34 @@ class SuccessModel(BaseSuccessModel): verified: bool country: str | None - users: list[User] + class InvalidUser(BaseModel): + class League(BaseModel): + gamesplayed: int + gameswon: int + rating: float + glicko: float | None + rd: float | None + rank: Rank + bestrank: Rank + apm: float | None + pps: float | None + vs: float | None + decaying: bool + + id: str = Field(..., alias='_id') + username: str + role: str + xp: float + league: League + supporter: bool + verified: bool + country: str | None + + users: list[ValidUser | InvalidUser] data: Data LeagueAll = SuccessModel | FailedModel -User = SuccessModel.Data.User +ValidUser = SuccessModel.Data.ValidUser +InvalidUser = SuccessModel.Data.InvalidUser