mirror of
https://github.com/A-Minos/nonebot-plugin-tetris-stats.git
synced 2026-03-05 05:36:54 +08:00
✨ 同步新模板 schemas
This commit is contained in:
@@ -5,16 +5,17 @@ from nonebot.compat import PYDANTIC_V2
|
|||||||
|
|
||||||
from ..templates import TEMPLATES_DIR
|
from ..templates import TEMPLATES_DIR
|
||||||
from .schemas.bind import Bind
|
from .schemas.bind import Bind
|
||||||
from .schemas.tetrio.rank.detail import Data as TETRIORankDetailData
|
from .schemas.v1.tetrio.rank import Data as TETRIORankDataV1
|
||||||
from .schemas.tetrio.rank.v1 import Data as TETRIORankDataV1
|
from .schemas.v1.tetrio.user.info import Info as TETRIOUserInfoV1
|
||||||
from .schemas.tetrio.rank.v2 import Data as TETRIORankDataV2
|
from .schemas.v1.top.info import Info as TOPInfoV1
|
||||||
from .schemas.tetrio.record.blitz import Record as TETRIORecordBlitz
|
from .schemas.v1.tos.info import Info as TOSInfoV1
|
||||||
from .schemas.tetrio.record.sprint import Record as TETRIORecordSprint
|
from .schemas.v2.tetrio.rank import Data as TETRIORankDataV2
|
||||||
from .schemas.tetrio.user.info_v1 import Info as TETRIOUserInfoV1
|
from .schemas.v2.tetrio.rank.detail import Data as TETRIORankDetailDataV2
|
||||||
from .schemas.tetrio.user.info_v2 import Info as TETRIOUserInfoV2
|
from .schemas.v2.tetrio.record.blitz import Record as TETRIORecordBlitzV2
|
||||||
from .schemas.tetrio.user.list_v2 import List as TETRIOUserListV2
|
from .schemas.v2.tetrio.record.sprint import Record as TETRIORecordSprintV2
|
||||||
from .schemas.top_info import Info as TOPInfo
|
from .schemas.v2.tetrio.tetra_league import Data as TETRIOTetraLeagueDataV2
|
||||||
from .schemas.tos_info import Info as TOSInfo
|
from .schemas.v2.tetrio.user.info import Info as TETRIOUserInfoV2
|
||||||
|
from .schemas.v2.tetrio.user.list import Data as TETRIOUserListV2
|
||||||
|
|
||||||
env = Environment(
|
env = Environment(
|
||||||
loader=FileSystemLoader(TEMPLATES_DIR),
|
loader=FileSystemLoader(TEMPLATES_DIR),
|
||||||
@@ -32,21 +33,23 @@ async def render(render_type: Literal['v1/tetrio/info'], data: TETRIOUserInfoV1)
|
|||||||
@overload
|
@overload
|
||||||
async def render(render_type: Literal['v1/tetrio/rank'], data: TETRIORankDataV1) -> str: ...
|
async def render(render_type: Literal['v1/tetrio/rank'], data: TETRIORankDataV1) -> str: ...
|
||||||
@overload
|
@overload
|
||||||
async def render(render_type: Literal['v1/top/info'], data: TOPInfo) -> str: ...
|
async def render(render_type: Literal['v1/top/info'], data: TOPInfoV1) -> str: ...
|
||||||
@overload
|
@overload
|
||||||
async def render(render_type: Literal['v1/tos/info'], data: TOSInfo) -> str: ...
|
async def render(render_type: Literal['v1/tos/info'], data: TOSInfoV1) -> str: ...
|
||||||
|
@overload
|
||||||
|
async def render(render_type: Literal['v2/tetrio/rank'], data: TETRIORankDataV2) -> str: ...
|
||||||
|
@overload
|
||||||
|
async def render(render_type: Literal['v2/tetrio/rank/detail'], data: TETRIORankDetailDataV2) -> str: ...
|
||||||
|
@overload
|
||||||
|
async def render(render_type: Literal['v2/tetrio/record/blitz'], data: TETRIORecordBlitzV2) -> str: ...
|
||||||
|
@overload
|
||||||
|
async def render(render_type: Literal['v2/tetrio/record/sprint'], data: TETRIORecordSprintV2) -> str: ...
|
||||||
|
@overload
|
||||||
|
async def render(render_type: Literal['v2/tetrio/tetra-league'], data: TETRIOTetraLeagueDataV2) -> str: ...
|
||||||
@overload
|
@overload
|
||||||
async def render(render_type: Literal['v2/tetrio/user/info'], data: TETRIOUserInfoV2) -> str: ...
|
async def render(render_type: Literal['v2/tetrio/user/info'], data: TETRIOUserInfoV2) -> str: ...
|
||||||
@overload
|
@overload
|
||||||
async def render(render_type: Literal['v2/tetrio/user/list'], data: TETRIOUserListV2) -> str: ...
|
async def render(render_type: Literal['v2/tetrio/user/list'], data: TETRIOUserListV2) -> str: ...
|
||||||
@overload
|
|
||||||
async def render(render_type: Literal['v2/tetrio/record/40l'], data: TETRIORecordSprint) -> str: ...
|
|
||||||
@overload
|
|
||||||
async def render(render_type: Literal['v2/tetrio/record/blitz'], data: TETRIORecordBlitz) -> str: ...
|
|
||||||
@overload
|
|
||||||
async def render(render_type: Literal['v2/tetrio/rank'], data: TETRIORankDataV2) -> str: ...
|
|
||||||
@overload
|
|
||||||
async def render(render_type: Literal['v2/tetrio/rank/detail'], data: TETRIORankDetailData) -> str: ...
|
|
||||||
|
|
||||||
|
|
||||||
async def render(
|
async def render(
|
||||||
@@ -56,24 +59,26 @@ async def render(
|
|||||||
'v1/tetrio/rank',
|
'v1/tetrio/rank',
|
||||||
'v1/top/info',
|
'v1/top/info',
|
||||||
'v1/tos/info',
|
'v1/tos/info',
|
||||||
'v2/tetrio/user/info',
|
|
||||||
'v2/tetrio/user/list',
|
|
||||||
'v2/tetrio/record/40l',
|
|
||||||
'v2/tetrio/record/blitz',
|
|
||||||
'v2/tetrio/rank',
|
'v2/tetrio/rank',
|
||||||
'v2/tetrio/rank/detail',
|
'v2/tetrio/rank/detail',
|
||||||
|
'v2/tetrio/record/blitz',
|
||||||
|
'v2/tetrio/record/sprint',
|
||||||
|
'v2/tetrio/tetra-league',
|
||||||
|
'v2/tetrio/user/info',
|
||||||
|
'v2/tetrio/user/list',
|
||||||
],
|
],
|
||||||
data: Bind
|
data: Bind
|
||||||
| TETRIOUserInfoV1
|
| TETRIOUserInfoV1
|
||||||
| TETRIORankDataV1
|
| TETRIORankDataV1
|
||||||
| TOPInfo
|
| TOPInfoV1
|
||||||
| TOSInfo
|
| TOSInfoV1
|
||||||
| TETRIOUserInfoV2
|
|
||||||
| TETRIOUserListV2
|
|
||||||
| TETRIORecordSprint
|
|
||||||
| TETRIORecordBlitz
|
|
||||||
| TETRIORankDataV2
|
| TETRIORankDataV2
|
||||||
| TETRIORankDetailData,
|
| TETRIORankDetailDataV2
|
||||||
|
| TETRIORecordBlitzV2
|
||||||
|
| TETRIORecordSprintV2
|
||||||
|
| TETRIOTetraLeagueDataV2
|
||||||
|
| TETRIOUserInfoV2
|
||||||
|
| TETRIOUserListV2,
|
||||||
) -> str:
|
) -> str:
|
||||||
if PYDANTIC_V2:
|
if PYDANTIC_V2:
|
||||||
return await env.get_template('index.html').render_async(
|
return await env.get_template('index.html').render_async(
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
|
from datetime import datetime
|
||||||
from typing import Literal
|
from typing import Literal
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
from strenum import StrEnum
|
||||||
|
|
||||||
from ...typedefs import Number
|
from ...typedefs import Number
|
||||||
|
|
||||||
|
|
||||||
|
class Base(BaseModel):
|
||||||
|
_lang: Literal['zh-CN', 'en-US']
|
||||||
|
|
||||||
|
|
||||||
class Avatar(BaseModel):
|
class Avatar(BaseModel):
|
||||||
type: Literal['identicon']
|
type: Literal['identicon']
|
||||||
hash: str
|
hash: str
|
||||||
@@ -18,3 +24,14 @@ class People(BaseModel):
|
|||||||
class Ranking(BaseModel):
|
class Ranking(BaseModel):
|
||||||
rating: Number
|
rating: Number
|
||||||
rd: Number
|
rd: Number
|
||||||
|
|
||||||
|
|
||||||
|
class HistoryData(BaseModel):
|
||||||
|
score: Number
|
||||||
|
record_at: datetime
|
||||||
|
|
||||||
|
|
||||||
|
class Trending(StrEnum):
|
||||||
|
UP = 'up'
|
||||||
|
KEEP = 'keep'
|
||||||
|
DOWN = 'down'
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
from typing import Literal
|
from typing import Literal
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from .base import Base, People
|
||||||
|
|
||||||
from .base import People
|
|
||||||
|
|
||||||
|
|
||||||
class Bind(BaseModel):
|
class Bind(Base):
|
||||||
platform: Literal['TETR.IO', 'TOP', 'TOS']
|
platform: Literal['TETR.IO', 'TOP', 'TOS']
|
||||||
status: Literal['error', 'success', 'unknown', 'unlink', 'unverified']
|
type: Literal['success', 'unknown', 'unlink', 'unverified', 'error']
|
||||||
user: People
|
user: People
|
||||||
bot: People
|
bot: People
|
||||||
command: str
|
prompt: str
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from pydantic import BaseModel
|
|
||||||
|
|
||||||
from .....typedefs import Number
|
|
||||||
|
|
||||||
|
|
||||||
class TetraLeagueHistoryData(BaseModel):
|
|
||||||
record_at: datetime
|
|
||||||
tr: Number
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
from pydantic import BaseModel
|
|
||||||
|
|
||||||
from ......games.tetrio.api.typedefs import Rank
|
|
||||||
from .....typedefs import Number
|
|
||||||
from ...base import People, Ranking
|
|
||||||
from .base import TetraLeagueHistoryData
|
|
||||||
|
|
||||||
|
|
||||||
class User(People):
|
|
||||||
bio: str | None
|
|
||||||
|
|
||||||
|
|
||||||
class TetraLeague(BaseModel):
|
|
||||||
rank: Rank
|
|
||||||
tr: Number
|
|
||||||
global_rank: Number
|
|
||||||
pps: Number
|
|
||||||
lpm: Number
|
|
||||||
apm: Number
|
|
||||||
apl: Number
|
|
||||||
vs: Number
|
|
||||||
adpm: Number
|
|
||||||
adpl: Number
|
|
||||||
|
|
||||||
|
|
||||||
class TetraLeagueHistory(BaseModel):
|
|
||||||
data: list[TetraLeagueHistoryData]
|
|
||||||
split_interval: Number
|
|
||||||
min_tr: Number
|
|
||||||
max_tr: Number
|
|
||||||
offset: Number
|
|
||||||
|
|
||||||
|
|
||||||
class Radar(BaseModel):
|
|
||||||
app: Number
|
|
||||||
dsps: Number
|
|
||||||
dspp: Number
|
|
||||||
ci: Number
|
|
||||||
ge: Number
|
|
||||||
|
|
||||||
|
|
||||||
class Info(BaseModel):
|
|
||||||
user: User
|
|
||||||
ranking: Ranking
|
|
||||||
tetra_league: TetraLeague
|
|
||||||
tetra_league_history: TetraLeagueHistory
|
|
||||||
radar: Radar
|
|
||||||
sprint: str
|
|
||||||
blitz: str
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
from pydantic import BaseModel
|
|
||||||
|
|
||||||
from ...typedefs import Number
|
|
||||||
from .base import People
|
|
||||||
|
|
||||||
|
|
||||||
class Data(BaseModel):
|
|
||||||
pps: Number
|
|
||||||
lpm: Number
|
|
||||||
apm: Number
|
|
||||||
apl: Number
|
|
||||||
|
|
||||||
|
|
||||||
class Info(BaseModel):
|
|
||||||
user: People
|
|
||||||
today: Data
|
|
||||||
history: Data
|
|
||||||
12
nonebot_plugin_tetris_stats/utils/render/schemas/v1/base.py
Normal file
12
nonebot_plugin_tetris_stats/utils/render/schemas/v1/base.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
from ....typedefs import Number
|
||||||
|
from ..base import HistoryData
|
||||||
|
|
||||||
|
|
||||||
|
class History(BaseModel):
|
||||||
|
data: list[HistoryData]
|
||||||
|
split_interval: Number
|
||||||
|
min_tr: Number
|
||||||
|
max_tr: Number
|
||||||
|
offset: Number
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
from .......games.tetrio.api.typedefs import Rank
|
||||||
|
from ......typedefs import Number
|
||||||
|
from ....base import Base, People, Trending
|
||||||
|
from ...base import History
|
||||||
|
|
||||||
|
|
||||||
|
class User(People):
|
||||||
|
bio: str | None
|
||||||
|
|
||||||
|
|
||||||
|
class Multiplayer(BaseModel):
|
||||||
|
glicko: str
|
||||||
|
rd: Number
|
||||||
|
rank: Rank
|
||||||
|
tr: str
|
||||||
|
global_rank: Number
|
||||||
|
|
||||||
|
history: History
|
||||||
|
|
||||||
|
lpm: Number
|
||||||
|
pps: Number
|
||||||
|
lpm_trending: Trending
|
||||||
|
|
||||||
|
apm: Number
|
||||||
|
apl: Number
|
||||||
|
apm_trending: Trending
|
||||||
|
|
||||||
|
adpm: Number
|
||||||
|
vs: Number
|
||||||
|
adpl: Number
|
||||||
|
adpm_trending: Trending
|
||||||
|
|
||||||
|
app: Number
|
||||||
|
ci: Number
|
||||||
|
dspp: Number
|
||||||
|
dsps: Number
|
||||||
|
ge: Number
|
||||||
|
|
||||||
|
|
||||||
|
class Singleplayer(BaseModel):
|
||||||
|
sprint: str
|
||||||
|
blitz: str
|
||||||
|
|
||||||
|
|
||||||
|
class Info(Base):
|
||||||
|
user: User
|
||||||
|
multiplayer: Multiplayer
|
||||||
|
singleplayer: Singleplayer
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
from .....typedefs import Number
|
||||||
|
from ...base import Base, People, Trending
|
||||||
|
|
||||||
|
|
||||||
|
class Data(BaseModel):
|
||||||
|
pps: Number
|
||||||
|
lpm: Number
|
||||||
|
lpm_trending: Trending
|
||||||
|
apm: Number
|
||||||
|
apl: Number
|
||||||
|
apm_trending: Trending
|
||||||
|
|
||||||
|
|
||||||
|
class Info(Base):
|
||||||
|
user: People
|
||||||
|
today: Data
|
||||||
|
historical: Data
|
||||||
@@ -1,32 +1,40 @@
|
|||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
from ...typedefs import Number
|
from .....typedefs import Number
|
||||||
from .base import People, Ranking
|
from ...base import People, Trending
|
||||||
|
from ..base import History
|
||||||
|
|
||||||
|
|
||||||
class Multiplayer(BaseModel):
|
class Multiplayer(BaseModel):
|
||||||
pps: Number
|
history: History
|
||||||
|
|
||||||
lpm: Number
|
lpm: Number
|
||||||
|
pps: Number
|
||||||
|
lpm_trending: Trending
|
||||||
|
|
||||||
apm: Number
|
apm: Number
|
||||||
apl: Number
|
apl: Number
|
||||||
vs: Number
|
apm_trending: Trending
|
||||||
|
|
||||||
adpm: Number
|
adpm: Number
|
||||||
|
vs: Number
|
||||||
adpl: Number
|
adpl: Number
|
||||||
|
adpm_trending: Trending
|
||||||
|
|
||||||
|
|
||||||
class Radar(BaseModel):
|
|
||||||
app: Number
|
app: Number
|
||||||
OR: Number = Field(serialization_alias='or')
|
|
||||||
dspp: Number
|
|
||||||
ci: Number
|
ci: Number
|
||||||
|
dspp: Number
|
||||||
|
or_: Number = Field(serialization_alias='or')
|
||||||
ge: Number
|
ge: Number
|
||||||
|
|
||||||
|
|
||||||
|
class Singleplayer(BaseModel):
|
||||||
|
sprint: str
|
||||||
|
challenge: str
|
||||||
|
marathon: str
|
||||||
|
|
||||||
|
|
||||||
class Info(BaseModel):
|
class Info(BaseModel):
|
||||||
user: People
|
user: People
|
||||||
ranking: Ranking
|
|
||||||
multiplayer: Multiplayer
|
multiplayer: Multiplayer
|
||||||
radar: Radar
|
singleplayer: Singleplayer
|
||||||
sprint: str
|
|
||||||
challenge: str
|
|
||||||
marathon: str
|
|
||||||
@@ -2,22 +2,23 @@ from datetime import datetime
|
|||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from ......games.tetrio.api.typedefs import ValidRank
|
from .......games.tetrio.api.typedefs import ValidRank
|
||||||
|
from ......typedefs import Number
|
||||||
|
|
||||||
|
|
||||||
class AverageData(BaseModel):
|
class AverageData(BaseModel):
|
||||||
pps: float
|
pps: Number
|
||||||
apm: float
|
apm: Number
|
||||||
apl: float
|
apl: Number
|
||||||
vs: float
|
vs: Number
|
||||||
adpl: float
|
adpl: Number
|
||||||
|
|
||||||
|
|
||||||
class ItemData(BaseModel):
|
class ItemData(BaseModel):
|
||||||
require_tr: float
|
require_tr: Number
|
||||||
trending: float
|
trending: Number
|
||||||
average_data: AverageData
|
average_data: AverageData
|
||||||
players: int
|
players: Number
|
||||||
|
|
||||||
|
|
||||||
class Data(BaseModel):
|
class Data(BaseModel):
|
||||||
@@ -2,17 +2,18 @@ from datetime import datetime
|
|||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from ......games.tetrio.api.typedefs import ValidRank
|
from .......games.tetrio.api.typedefs import ValidRank
|
||||||
|
from ......typedefs import Number
|
||||||
|
|
||||||
|
|
||||||
class SpecialData(BaseModel):
|
class SpecialData(BaseModel):
|
||||||
apm: float
|
apm: Number
|
||||||
pps: float
|
pps: Number
|
||||||
lpm: float
|
lpm: Number
|
||||||
vs: float
|
vs: Number
|
||||||
adpm: float
|
adpm: Number
|
||||||
apl: float | None = None
|
apl: Number | None = None
|
||||||
adpl: float | None = None
|
adpl: Number | None = None
|
||||||
apm_holder: str | None = None
|
apm_holder: str | None = None
|
||||||
pps_holder: str | None = None
|
pps_holder: str | None = None
|
||||||
vs_holder: str | None = None
|
vs_holder: str | None = None
|
||||||
@@ -20,9 +21,9 @@ class SpecialData(BaseModel):
|
|||||||
|
|
||||||
class Data(BaseModel):
|
class Data(BaseModel):
|
||||||
name: ValidRank
|
name: ValidRank
|
||||||
trending: float
|
trending: Number
|
||||||
require_tr: float
|
require_tr: Number
|
||||||
players: int
|
players: Number
|
||||||
|
|
||||||
minimum_data: SpecialData
|
minimum_data: SpecialData
|
||||||
average_data: SpecialData
|
average_data: SpecialData
|
||||||
@@ -3,7 +3,7 @@ from typing import Literal
|
|||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from ...base import People
|
from ....base import People
|
||||||
|
|
||||||
|
|
||||||
class User(People):
|
class User(People):
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
from .....typedefs import Number
|
||||||
|
|
||||||
|
|
||||||
|
class StatisticalData(BaseModel):
|
||||||
|
pps: Number
|
||||||
|
apm: Number
|
||||||
|
apl: Number
|
||||||
|
vs: Number
|
||||||
|
adpl: Number
|
||||||
|
|
||||||
|
|
||||||
|
class User(BaseModel):
|
||||||
|
id: str
|
||||||
|
name: str
|
||||||
|
|
||||||
|
|
||||||
|
class Handling(BaseModel):
|
||||||
|
arr: Number
|
||||||
|
das: Number
|
||||||
|
sdf: Number
|
||||||
|
|
||||||
|
|
||||||
|
class Game(BaseModel):
|
||||||
|
user: User
|
||||||
|
points: Number
|
||||||
|
average_data: StatisticalData
|
||||||
|
data: list[StatisticalData]
|
||||||
|
handling: Handling
|
||||||
|
|
||||||
|
|
||||||
|
class Data(BaseModel):
|
||||||
|
replay_id: str
|
||||||
|
games: list[Game]
|
||||||
|
play_at: datetime
|
||||||
@@ -3,10 +3,9 @@ from typing import Literal
|
|||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from ......games.tetrio.api.typedefs import Rank
|
from .......games.tetrio.api.typedefs import Rank
|
||||||
from .....typedefs import Number
|
from ......typedefs import Number
|
||||||
from ...base import Avatar
|
from ....base import Avatar, HistoryData
|
||||||
from .base import TetraLeagueHistoryData
|
|
||||||
|
|
||||||
|
|
||||||
class Badge(BaseModel):
|
class Badge(BaseModel):
|
||||||
@@ -22,6 +21,7 @@ class User(BaseModel):
|
|||||||
country: str | None
|
country: str | None
|
||||||
|
|
||||||
role: Literal['anon', 'user', 'bot', 'halfmod', 'mod', 'admin', 'sysop', 'hidden', 'banned']
|
role: Literal['anon', 'user', 'bot', 'halfmod', 'mod', 'admin', 'sysop', 'hidden', 'banned']
|
||||||
|
botmaster: str | None
|
||||||
|
|
||||||
avatar: str | Avatar
|
avatar: str | Avatar
|
||||||
banner: str | None
|
banner: str | None
|
||||||
@@ -36,6 +36,9 @@ class User(BaseModel):
|
|||||||
badges: list[Badge]
|
badges: list[Badge]
|
||||||
xp: Number
|
xp: Number
|
||||||
|
|
||||||
|
ar: Number
|
||||||
|
achievements: list[Number]
|
||||||
|
|
||||||
playtime: str | None
|
playtime: str | None
|
||||||
join_at: datetime | None
|
join_at: datetime | None
|
||||||
|
|
||||||
@@ -74,18 +77,20 @@ class TetraLeague(BaseModel):
|
|||||||
|
|
||||||
decaying: bool
|
decaying: bool
|
||||||
|
|
||||||
history: list[TetraLeagueHistoryData] | None
|
history: list[HistoryData] | None
|
||||||
|
|
||||||
|
|
||||||
class Sprint(BaseModel):
|
class Sprint(BaseModel):
|
||||||
time: str
|
time: str
|
||||||
global_rank: int | None
|
global_rank: Number | None
|
||||||
|
country_rank: Number | None
|
||||||
play_at: datetime
|
play_at: datetime
|
||||||
|
|
||||||
|
|
||||||
class Blitz(BaseModel):
|
class Blitz(BaseModel):
|
||||||
score: int
|
score: Number
|
||||||
global_rank: int | None
|
global_rank: int | None
|
||||||
|
country_rank: int | None
|
||||||
play_at: datetime
|
play_at: datetime
|
||||||
|
|
||||||
|
|
||||||
@@ -94,9 +99,29 @@ class Zen(BaseModel):
|
|||||||
score: int
|
score: int
|
||||||
|
|
||||||
|
|
||||||
|
class Week(BaseModel):
|
||||||
|
altitude: int
|
||||||
|
global_rank: int | None
|
||||||
|
country_rank: int | None
|
||||||
|
play_at: datetime
|
||||||
|
|
||||||
|
|
||||||
|
class Best(BaseModel):
|
||||||
|
altitude: int
|
||||||
|
global_rank: int | None
|
||||||
|
play_at: datetime
|
||||||
|
|
||||||
|
|
||||||
|
class Zenith(BaseModel):
|
||||||
|
week: Week
|
||||||
|
best: Best
|
||||||
|
|
||||||
|
|
||||||
class Info(BaseModel):
|
class Info(BaseModel):
|
||||||
user: User
|
user: User
|
||||||
tetra_league: TetraLeague | None
|
tetra_league: TetraLeague | None
|
||||||
|
zenith: Zenith | None
|
||||||
|
zenithex: Zenith | None
|
||||||
statistic: Statistic | None
|
statistic: Statistic | None
|
||||||
sprint: Sprint | None
|
sprint: Sprint | None
|
||||||
blitz: Blitz | None
|
blitz: Blitz | None
|
||||||
@@ -1,24 +1,23 @@
|
|||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from ......games.tetrio.api.typedefs import Rank
|
from .......games.tetrio.api.typedefs import Rank
|
||||||
from .....typedefs import Number
|
from ......typedefs import Number
|
||||||
from ...base import Avatar
|
from ....base import Avatar
|
||||||
|
|
||||||
|
|
||||||
class TetraLeague(BaseModel):
|
class TetraLeague(BaseModel):
|
||||||
|
pps: Number
|
||||||
|
apm: Number
|
||||||
|
apl: Number
|
||||||
|
vs: Number | None
|
||||||
|
adpl: Number | None
|
||||||
|
|
||||||
rank: Rank
|
rank: Rank
|
||||||
tr: Number
|
tr: Number
|
||||||
|
|
||||||
glicko: Number | None
|
glicko: Number | None
|
||||||
rd: Number | None
|
rd: Number | None
|
||||||
decaying: bool
|
decaying: bool
|
||||||
pps: Number
|
|
||||||
apm: Number
|
|
||||||
apl: Number
|
|
||||||
vs: Number | None
|
|
||||||
adpl: Number | None
|
|
||||||
|
|
||||||
|
|
||||||
class User(BaseModel):
|
class User(BaseModel):
|
||||||
@@ -26,11 +25,14 @@ class User(BaseModel):
|
|||||||
name: str
|
name: str
|
||||||
avatar: str | Avatar
|
avatar: str | Avatar
|
||||||
country: str | None
|
country: str | None
|
||||||
tetra_league: TetraLeague
|
|
||||||
xp: Number
|
xp: Number
|
||||||
join_at: datetime | None
|
|
||||||
|
|
||||||
|
class Data(BaseModel):
|
||||||
|
user: User
|
||||||
|
tetra_league: TetraLeague
|
||||||
|
|
||||||
|
|
||||||
class List(BaseModel):
|
class List(BaseModel):
|
||||||
show_index: bool
|
show_index: bool
|
||||||
users: list[User]
|
data: list[Data]
|
||||||
Reference in New Issue
Block a user