From 69d177715c405848a8cdde2d8863ebd16f28fab3 Mon Sep 17 00:00:00 2001 From: shoucandanghehe Date: Tue, 6 May 2025 01:23:17 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E6=9B=B4=E6=96=B0=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=20schemas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../games/tetrio/query/v2.py | 19 +++++++++++++++++-- .../render/schemas/v2/tetrio/user/info.py | 16 +++++++++++++++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/nonebot_plugin_tetris_stats/games/tetrio/query/v2.py b/nonebot_plugin_tetris_stats/games/tetrio/query/v2.py index 389b239..a2a199f 100644 --- a/nonebot_plugin_tetris_stats/games/tetrio/query/v2.py +++ b/nonebot_plugin_tetris_stats/games/tetrio/query/v2.py @@ -11,6 +11,7 @@ from ....utils.metrics import get_metrics from ....utils.render import render from ....utils.render.schemas.base import Avatar from ....utils.render.schemas.v2.tetrio.user.info import ( + Achievement, Badge, Best, Blitz, @@ -33,7 +34,7 @@ from .tools import flow_to_history, handling_special_value async def make_query_image_v2(player: Player) -> bytes: ( (user, user_info, league, sprint, blitz, zen), - (avatar_revision, banner_revision, leagueflow, zenith, zenithex), + (avatar_revision, banner_revision, leagueflow, zenith, zenithex, achievements), ) = await gather( gather( player.user, @@ -49,6 +50,7 @@ async def make_query_image_v2(player: Player) -> bytes: player.get_leagueflow(), player.get_summaries('zenith'), player.get_summaries('zenithex'), + player.get_summaries('achievements'), ), ) if sprint.data.record is not None: @@ -110,7 +112,20 @@ async def make_query_image_v2(player: Player) -> bytes: ], xp=user_info.data.xp, ar=user_info.data.ar, - achievements=user_info.data.achievements, + achievements=[ + Achievement( + key=i.achievement_id, + rank_type=i.rank_type, + ar_type=i.ar_type, + stub=i.stub, + rank=i.rank, + achieved_score=i.achieved_score, + pos=i.pos, + progress=i.progress, + total=i.total, + ) + for i in achievements.data + ], playtime=play_time, join_at=user_info.data.ts, ), diff --git a/nonebot_plugin_tetris_stats/utils/render/schemas/v2/tetrio/user/info.py b/nonebot_plugin_tetris_stats/utils/render/schemas/v2/tetrio/user/info.py index 086404c..65f03ff 100644 --- a/nonebot_plugin_tetris_stats/utils/render/schemas/v2/tetrio/user/info.py +++ b/nonebot_plugin_tetris_stats/utils/render/schemas/v2/tetrio/user/info.py @@ -3,6 +3,8 @@ from typing import Literal from pydantic import BaseModel +from .......games.tetrio.api.schemas.summaries.achievements import ArType, RankType +from .......games.tetrio.api.schemas.summaries.achievements import Rank as AchievementRank from .......games.tetrio.api.typedefs import Rank from ......typedefs import Number from ....base import Avatar, Base, HistoryData @@ -15,6 +17,18 @@ class Badge(BaseModel): receive_at: datetime | None +class Achievement(BaseModel): + key: int + rank_type: RankType + ar_type: ArType + stub: bool | None + rank: AchievementRank | None + achieved_score: float | None + pos: int | None + progress: float | None + total: int | None + + class User(BaseModel): id: str name: str @@ -37,7 +51,7 @@ class User(BaseModel): xp: Number ar: Number - achievements: list[int] + achievements: list[Achievement] playtime: str | None join_at: datetime | None