From 3e75a4b4e2ab56c289766d6b0ce60a1d6f5b39c3 Mon Sep 17 00:00:00 2001 From: shoucandanghehe Date: Sun, 16 Jun 2024 08:09:31 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E9=80=82=E9=85=8D=20TETR.IO=20reco?= =?UTF-8?q?rd=20=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../utils/render/__init__.py | 22 +++--- .../render/schemas/tetrio_record_base.py | 58 ++++++++++++++++ .../render/schemas/tetrio_record_blitz.py | 22 ++++++ .../render/schemas/tetrio_record_sprint.py | 68 +------------------ 4 files changed, 97 insertions(+), 73 deletions(-) create mode 100644 nonebot_plugin_tetris_stats/utils/render/schemas/tetrio_record_base.py create mode 100644 nonebot_plugin_tetris_stats/utils/render/schemas/tetrio_record_blitz.py diff --git a/nonebot_plugin_tetris_stats/utils/render/__init__.py b/nonebot_plugin_tetris_stats/utils/render/__init__.py index ef9b143..bbe5e9b 100644 --- a/nonebot_plugin_tetris_stats/utils/render/__init__.py +++ b/nonebot_plugin_tetris_stats/utils/render/__init__.py @@ -7,6 +7,7 @@ from ..templates import templates_dir from .schemas.bind import Bind from .schemas.tetrio_info import Info as TETRIOInfo from .schemas.tetrio_info_v2 import Info as TETRIOInfoV2 +from .schemas.tetrio_record_blitz import Record as TETRIORecordBlitz from .schemas.tetrio_record_sprint import Record as TETRIORecordSprint from .schemas.top_info import Info as TOPInfo from .schemas.tos_info import Info as TOSInfo @@ -24,6 +25,14 @@ async def render(render_type: Literal['v1/binding'], data: Bind) -> str: ... async def render(render_type: Literal['v1/tetrio/info'], data: TETRIOInfo) -> str: ... +@overload +async def render(render_type: Literal['v1/top/info'], data: TOPInfo) -> str: ... + + +@overload +async def render(render_type: Literal['v1/tos/info'], data: TOSInfo) -> str: ... + + @overload async def render(render_type: Literal['v2/tetrio/info'], data: TETRIOInfoV2) -> str: ... @@ -33,23 +42,20 @@ async def render(render_type: Literal['v2/tetrio/record/40l'], data: TETRIORecor @overload -async def render(render_type: Literal['v1/top/info'], data: TOPInfo) -> str: ... - - -@overload -async def render(render_type: Literal['v1/tos/info'], data: TOSInfo) -> str: ... +async def render(render_type: Literal['v2/tetrio/record/blitz'], data: TETRIORecordBlitz) -> str: ... async def render( render_type: Literal[ 'v1/binding', 'v1/tetrio/info', - 'v2/tetrio/info', 'v1/top/info', 'v1/tos/info', + 'v2/tetrio/info', 'v2/tetrio/record/40l', + 'v2/tetrio/record/blitz', ], - data: Bind | TETRIOInfo | TETRIOInfoV2 | TETRIORecordSprint | TOPInfo | TOSInfo, + data: Bind | TETRIOInfo | TOPInfo | TOSInfo | TETRIOInfoV2 | TETRIORecordSprint | TETRIORecordBlitz, ) -> str: if PYDANTIC_V2: return await env.get_template('index.html').render_async( @@ -58,4 +64,4 @@ async def render( return await env.get_template('index.html').render_async(path=render_type, data=data.json(by_alias=True)) -__all__ = ['render', 'Bind'] +__all__ = ['render'] diff --git a/nonebot_plugin_tetris_stats/utils/render/schemas/tetrio_record_base.py b/nonebot_plugin_tetris_stats/utils/render/schemas/tetrio_record_base.py new file mode 100644 index 0000000..8308d9b --- /dev/null +++ b/nonebot_plugin_tetris_stats/utils/render/schemas/tetrio_record_base.py @@ -0,0 +1,58 @@ +from pydantic import BaseModel + +from .base import People + + +class User(People): + id: str + + +class Max(BaseModel): + combo: int + btb: int + + +class Mini(BaseModel): + total: int + single: int + double: int + + +class Tspins(BaseModel): + total: int + single: int + double: int + triple: int + + mini: Mini + + +class Finesse(BaseModel): + faults: int + accuracy: float + + +class RecordStatistic(BaseModel): + keys: int + kpp: float + kps: float + + max: Max + + pieces: int + pps: float + lines: int + lpm: float + holds: int | None + score: int + + single: int + double: int + triple: int + quad: int + + tspins: Tspins + + all_clear: int + + finesse: Finesse diff --git a/nonebot_plugin_tetris_stats/utils/render/schemas/tetrio_record_blitz.py b/nonebot_plugin_tetris_stats/utils/render/schemas/tetrio_record_blitz.py new file mode 100644 index 0000000..d584b2c --- /dev/null +++ b/nonebot_plugin_tetris_stats/utils/render/schemas/tetrio_record_blitz.py @@ -0,0 +1,22 @@ +from datetime import datetime + +from pydantic import BaseModel + +from .tetrio_record_base import RecordStatistic, User + + +class Statistic(RecordStatistic): + spp: float + + level: int + + +class Record(BaseModel): + user: User + + replay_id: str + rank: int | None + + statistic: Statistic + + play_at: datetime diff --git a/nonebot_plugin_tetris_stats/utils/render/schemas/tetrio_record_sprint.py b/nonebot_plugin_tetris_stats/utils/render/schemas/tetrio_record_sprint.py index 9442ae8..57af55f 100644 --- a/nonebot_plugin_tetris_stats/utils/render/schemas/tetrio_record_sprint.py +++ b/nonebot_plugin_tetris_stats/utils/render/schemas/tetrio_record_sprint.py @@ -2,77 +2,15 @@ from datetime import datetime from pydantic import BaseModel -from ....games.tetrio.api.typing import Rank -from .base import Avatar - - -class TetraLeague(BaseModel): - rank: Rank - tr: float - - -class User(BaseModel): - id: str - name: str - avatar: Avatar | str - tetra_league: TetraLeague | None - - -class Max(BaseModel): - combo: int - btb: int - - -class Mini(BaseModel): - total: int - single: int - double: int - - -class Tspins(BaseModel): - total: int - single: int - double: int - triple: int - - mini: Mini - - -class Finesse(BaseModel): - faults: int - accuracy: float - - -class Statistic(BaseModel): - keys: int - kpp: float - kps: float - - max: Max - - pieces: int - pps: float - lines: int - lpm: float - holds: int | None - score: int - - single: int - double: int - triple: int - quad: int - - tspins: Tspins - - all_clear: int - - finesse: Finesse +from .tetrio_record_base import RecordStatistic as Statistic +from .tetrio_record_base import User class Record(BaseModel): user: User time: str + replay_id: str rank: int | None statistic: Statistic