From 2283605068e77d3378f066c7d72d3612dd7fa74e Mon Sep 17 00:00:00 2001 From: shoucandanghehe Date: Sat, 3 May 2025 04:36:12 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E2=9C=A8=20=E5=AE=8C=E5=96=84Achievement?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/schemas/summaries/achievements.py | 86 +++++++++++++++++-- 1 file changed, 77 insertions(+), 9 deletions(-) diff --git a/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/summaries/achievements.py b/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/summaries/achievements.py index 166c5285..bfe04321 100644 --- a/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/summaries/achievements.py +++ b/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/summaries/achievements.py @@ -1,25 +1,93 @@ -from typing import TypeAlias +from datetime import datetime +from enum import IntEnum +from typing import Literal, TypeAlias -from pydantic import BaseModel +from pydantic import BaseModel, Field from ..base import FailedModel, SuccessModel +class Rt(IntEnum): + PERCENTILE = 1 + ISSUE = 2 + ZENITH = 3 + PERCENTILELAX = 4 + PERCENTILEVLAX = 5 + PERCENTILEMLAX = 6 + + +class Vt(IntEnum): + NONE = 0 + NUMBER = 1 + TIME = 2 + TIME_INV = 3 + FLOOR = 4 + ISSUE = 5 + NUMBER_INV = 6 + + +class Art(IntEnum): + UNRANKED = 0 + RANKED = 1 + COMPETITIVE = 2 + + +class Rank(IntEnum): + NONE = 0 + BRONZE = 1 + SILVER = 2 + GOLD = 3 + PLATINUM = 4 + DIAMOND = 5 + ISSUED = 100 + + +class Ally(BaseModel): + id: str = Field(alias='_id') + username: str + role: Literal['anon', 'user', 'bot', 'halfmod', 'mod', 'admin', 'sysop', 'hidden', 'banned'] + country: str | None = None + supporter: bool + avatar_revision: int | None = None + + +class X(BaseModel): + ally: Ally | None = None + + class Achievement(BaseModel): # 这**都是些啥 k: int + category: str + name: str + object: str + desc: str o: int - rt: int - vt: int + rt: Rt + vt: Vt + art: Art min: int deci: int - name: str - object: str - category: str hidden: bool - desc: str + nolb: bool + event: str | None = None + event_past: bool | None = None + disabled: bool | None = None + pair: str | None = None + v: float | None = None + a: float | None = None + t: datetime | None = None + pos: int | None = None + total: int | None = None + rank: Rank | None = None + x: X | None = None n: str - stub: bool + + tiebreak: int + notifypb: bool + id: str | None = Field(None, alias='_id') + progress: float | None = None + stub: bool | None = None class AchievementsSuccessModel(SuccessModel): From 8ee0fa77c2c68d130ccaa213acdfc31b68d331fe Mon Sep 17 00:00:00 2001 From: shoucandanghehe Date: Tue, 6 May 2025 01:21:57 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E2=9C=A8=20=E6=B7=BB=E5=8A=A0=E4=B8=80?= =?UTF-8?q?=E4=BA=9Balias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/schemas/summaries/achievements.py | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/summaries/achievements.py b/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/summaries/achievements.py index bfe04321..9f1128ba 100644 --- a/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/summaries/achievements.py +++ b/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/summaries/achievements.py @@ -7,7 +7,7 @@ from ..base import FailedModel, SuccessModel -class Rt(IntEnum): +class RankType(IntEnum): PERCENTILE = 1 ISSUE = 2 ZENITH = 3 @@ -16,7 +16,7 @@ class Rt(IntEnum): PERCENTILEMLAX = 6 -class Vt(IntEnum): +class ValueType(IntEnum): NONE = 0 NUMBER = 1 TIME = 2 @@ -26,7 +26,7 @@ class Vt(IntEnum): NUMBER_INV = 6 -class Art(IntEnum): +class ArType(IntEnum): UNRANKED = 0 RANKED = 1 COMPETITIVE = 2 @@ -57,15 +57,15 @@ class X(BaseModel): class Achievement(BaseModel): # 这**都是些啥 - k: int + achievement_id: int = Field(alias='k') category: str - name: str - object: str - desc: str - o: int - rt: Rt - vt: Vt - art: Art + primary_name: str = Field(alias='name') + objective: str = Field(alias='object') + flavor_text: str = Field(alias='desc') + order: int = Field(alias='o') + rank_type: RankType = Field(alias='rt') + value_type: ValueType = Field(alias='vt') + ar_type: ArType = Field(alias='art') min: int deci: int hidden: bool @@ -74,7 +74,7 @@ class Achievement(BaseModel): event_past: bool | None = None disabled: bool | None = None pair: str | None = None - v: float | None = None + achieved_score: float | None = Field(None, alias='v') a: float | None = None t: datetime | None = None pos: int | None = None From 69d177715c405848a8cdde2d8863ebd16f28fab3 Mon Sep 17 00:00:00 2001 From: shoucandanghehe Date: Tue, 6 May 2025 01:23:17 +0800 Subject: [PATCH 3/4] =?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 389b239a..a2a199f8 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.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 @@ 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 086404c4..65f03ff5 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 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 From 98caddf57071ff8ce2d77d643cd5d3feb65cb89d Mon Sep 17 00:00:00 2001 From: shoucandanghehe Date: Wed, 7 May 2025 20:40:50 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../games/tetrio/api/schemas/summaries/achievements.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/summaries/achievements.py b/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/summaries/achievements.py index 9f1128ba..7a13ee71 100644 --- a/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/summaries/achievements.py +++ b/nonebot_plugin_tetris_stats/games/tetrio/api/schemas/summaries/achievements.py @@ -73,7 +73,7 @@ class Achievement(BaseModel): event: str | None = None event_past: bool | None = None disabled: bool | None = None - pair: str | None = None + pair: bool | None = None achieved_score: float | None = Field(None, alias='v') a: float | None = None t: datetime | None = None