mirror of
https://github.com/A-Minos/nonebot-plugin-tetris-stats.git
synced 2026-03-05 05:36:54 +08:00
@@ -7,7 +7,7 @@ from ...typing import Rank, ValidRank
|
|||||||
from ..base import ArCounts, FailedModel, P, SuccessModel
|
from ..base import ArCounts, FailedModel, P, SuccessModel
|
||||||
|
|
||||||
|
|
||||||
class League(BaseModel):
|
class BaseLeague(BaseModel):
|
||||||
gamesplayed: int
|
gamesplayed: int
|
||||||
gameswon: int
|
gameswon: int
|
||||||
tr: float
|
tr: float
|
||||||
@@ -16,13 +16,21 @@ class League(BaseModel):
|
|||||||
bestrank: ValidRank
|
bestrank: ValidRank
|
||||||
glicko: float
|
glicko: float
|
||||||
rd: float
|
rd: float
|
||||||
apm: float
|
|
||||||
pps: float
|
pps: float
|
||||||
vs: float
|
|
||||||
decaying: bool
|
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')
|
id: str = Field(..., alias='_id')
|
||||||
username: str
|
username: str
|
||||||
role: Literal['anon', 'user', 'bot', 'halfmod', 'mod', 'admin', 'sysop']
|
role: Literal['anon', 'user', 'bot', 'halfmod', 'mod', 'admin', 'sysop']
|
||||||
@@ -30,7 +38,6 @@ class Entry(BaseModel):
|
|||||||
xp: float
|
xp: float
|
||||||
country: str | None = None
|
country: str | None = None
|
||||||
supporter: bool | None = None
|
supporter: bool | None = None
|
||||||
league: League
|
|
||||||
gamesplayed: int
|
gamesplayed: int
|
||||||
gameswon: int
|
gameswon: int
|
||||||
gametime: float
|
gametime: float
|
||||||
@@ -39,8 +46,16 @@ class Entry(BaseModel):
|
|||||||
p: P
|
p: P
|
||||||
|
|
||||||
|
|
||||||
|
class InvalidEntry(BaseEntry):
|
||||||
|
league: InvalidLeague
|
||||||
|
|
||||||
|
|
||||||
|
class Entry(BaseEntry):
|
||||||
|
league: League
|
||||||
|
|
||||||
|
|
||||||
class Data(BaseModel):
|
class Data(BaseModel):
|
||||||
entries: list[Entry]
|
entries: list[Entry | InvalidEntry]
|
||||||
|
|
||||||
|
|
||||||
class BySuccessModel(SuccessModel):
|
class BySuccessModel(SuccessModel):
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from . import command
|
|||||||
from .api.leaderboards import by
|
from .api.leaderboards import by
|
||||||
from .api.schemas.base import P
|
from .api.schemas.base import P
|
||||||
from .api.schemas.leaderboards import Parameter
|
from .api.schemas.leaderboards import Parameter
|
||||||
|
from .api.schemas.leaderboards.by import Entry
|
||||||
from .constant import GAME_TYPE
|
from .constant import GAME_TYPE
|
||||||
|
|
||||||
command.add(
|
command.add(
|
||||||
@@ -84,6 +85,7 @@ async def _(
|
|||||||
join_at=None,
|
join_at=None,
|
||||||
)
|
)
|
||||||
for i in league.data.entries
|
for i in league.data.entries
|
||||||
|
if isinstance(i, Entry)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ async def get_tetra_league_data() -> None:
|
|||||||
|
|
||||||
players: list[Entry] = []
|
players: list[Entry] = []
|
||||||
for result in results:
|
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)
|
players.sort(key=lambda x: x.league.tr, reverse=True)
|
||||||
|
|
||||||
rank_player_mapping: defaultdict[Rank, list[Entry]] = defaultdict(list)
|
rank_player_mapping: defaultdict[Rank, list[Entry]] = defaultdict(list)
|
||||||
|
|||||||
Reference in New Issue
Block a user