迁移到新模板 (#536)
Some checks are pending
Code Coverage / Test (macos-latest, 3.10) (push) Waiting to run
Code Coverage / Test (macos-latest, 3.11) (push) Waiting to run
Code Coverage / Test (macos-latest, 3.12) (push) Waiting to run
Code Coverage / Test (ubuntu-latest, 3.10) (push) Waiting to run
Code Coverage / Test (ubuntu-latest, 3.11) (push) Waiting to run
Code Coverage / Test (ubuntu-latest, 3.12) (push) Waiting to run
Code Coverage / Test (windows-latest, 3.10) (push) Waiting to run
Code Coverage / Test (windows-latest, 3.11) (push) Waiting to run
Code Coverage / Test (windows-latest, 3.12) (push) Waiting to run
Code Coverage / check (push) Blocked by required conditions
TypeCheck / TypeCheck (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run

*  添加依赖 strenum

* 🐛 优化等待逻辑,修复截图爆炸

*  使用新模板

* ️ 关闭自动转译

*  同步新模板 schemas

* 🌐 添加模板语言的映射

*  适配 bind

*  更新模板

*  全部适配

* 🚨 make mypy happy

* Update nonebot_plugin_tetris_stats/games/tos/query.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

*  使用用户设置语言

* 🚨 auto fix by pre-commit hooks

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
呵呵です
2025-04-23 19:25:50 +08:00
committed by GitHub
parent 0ac917f95e
commit ff3eb79967
52 changed files with 2415 additions and 1888 deletions

View File

@@ -1,8 +1,14 @@
from datetime import datetime
from typing import Literal
from pydantic import BaseModel
from strenum import StrEnum
from ...typedefs import Number
from ...typedefs import Lang, Number
class Base(BaseModel):
_lang: Lang
class Avatar(BaseModel):
@@ -18,3 +24,14 @@ class People(BaseModel):
class Ranking(BaseModel):
rating: Number
rd: Number
class HistoryData(BaseModel):
score: Number
record_at: datetime
class Trending(StrEnum):
UP = 'up'
KEEP = 'keep'
DOWN = 'down'

View File

@@ -1,13 +1,11 @@
from typing import Literal
from pydantic import BaseModel
from .base import People
from .base import Base, People
class Bind(BaseModel):
class Bind(Base):
platform: Literal['TETR.IO', 'TOP', 'TOS']
status: Literal['error', 'success', 'unknown', 'unlink', 'unverified']
type: Literal['success', 'unknown', 'unlink', 'unverified', 'error']
user: People
bot: People
command: str
prompt: str

View File

@@ -1,31 +0,0 @@
from datetime import datetime
from pydantic import BaseModel
from ......games.tetrio.api.typedefs import ValidRank
class SpecialData(BaseModel):
apm: float
pps: float
lpm: float
vs: float
adpm: float
apl: float | None = None
adpl: float | None = None
apm_holder: str | None = None
pps_holder: str | None = None
vs_holder: str | None = None
class Data(BaseModel):
name: ValidRank
trending: float
require_tr: float
players: int
minimum_data: SpecialData
average_data: SpecialData
maximum_data: SpecialData
updated_at: datetime

View File

@@ -1,25 +0,0 @@
from datetime import datetime
from pydantic import BaseModel
from ......games.tetrio.api.typedefs import ValidRank
class AverageData(BaseModel):
pps: float
apm: float
apl: float
vs: float
adpl: float
class ItemData(BaseModel):
require_tr: float
trending: float
average_data: AverageData
players: int
class Data(BaseModel):
items: dict[ValidRank, ItemData]
updated_at: datetime

View File

@@ -1,10 +0,0 @@
from datetime import datetime
from pydantic import BaseModel
from .....typedefs import Number
class TetraLeagueHistoryData(BaseModel):
record_at: datetime
tr: Number

View File

@@ -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

View File

@@ -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

View File

@@ -1,32 +0,0 @@
from pydantic import BaseModel, Field
from ...typedefs import Number
from .base import People, Ranking
class Multiplayer(BaseModel):
pps: Number
lpm: Number
apm: Number
apl: Number
vs: Number
adpm: Number
adpl: Number
class Radar(BaseModel):
app: Number
OR: Number = Field(serialization_alias='or')
dspp: Number
ci: Number
ge: Number
class Info(BaseModel):
user: People
ranking: Ranking
multiplayer: Multiplayer
radar: Radar
sprint: str
challenge: str
marathon: str

View 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_value: Number
max_value: Number
offset: Number

View File

@@ -3,6 +3,7 @@ from datetime import datetime
from pydantic import BaseModel
from ......games.tetrio.api.typedefs import ValidRank
from ...base import Base
class ItemData(BaseModel):
@@ -11,6 +12,6 @@ class ItemData(BaseModel):
players: int
class Data(BaseModel):
class Data(Base):
items: dict[ValidRank, ItemData]
updated_at: datetime

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,42 @@
from pydantic import BaseModel, Field
from .....typedefs import Number
from ...base import Base, People, Trending
from ..base import History
class Multiplayer(BaseModel):
history: History
rating: Number
rd: Number
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
or_: Number = Field(serialization_alias='or')
ge: Number
class Singleplayer(BaseModel):
sprint: str
challenge: str
marathon: str
class Info(Base):
user: People
multiplayer: Multiplayer
singleplayer: Singleplayer

View File

@@ -0,0 +1,27 @@
from datetime import datetime
from pydantic import BaseModel
from .......games.tetrio.api.typedefs import ValidRank
from ......typedefs import Number
from ....base import Base
class AverageData(BaseModel):
pps: Number
apm: Number
apl: Number
vs: Number
adpl: Number
class ItemData(BaseModel):
require_tr: Number
trending: Number
average_data: AverageData
players: Number
class Data(Base):
items: dict[ValidRank, ItemData]
updated_at: datetime

View File

@@ -0,0 +1,33 @@
from datetime import datetime
from pydantic import BaseModel
from .......games.tetrio.api.typedefs import ValidRank
from ......typedefs import Number
from ....base import Base
class SpecialData(BaseModel):
apm: Number
pps: Number
lpm: Number
vs: Number
adpm: Number
apl: Number | None = None
adpl: Number | None = None
apm_holder: str | None = None
pps_holder: str | None = None
vs_holder: str | None = None
class Data(Base):
name: ValidRank
trending: Number
require_tr: Number
players: Number
minimum_data: SpecialData
average_data: SpecialData
maximum_data: SpecialData
updated_at: datetime

View File

@@ -3,7 +3,7 @@ from typing import Literal
from pydantic import BaseModel
from ...base import People
from ....base import Base, People
class User(People):
@@ -61,7 +61,7 @@ class Statistic(BaseModel):
finesse: Finesse
class Record(BaseModel):
class Record(Base):
type: Literal['best', 'personal_best', 'recent', 'disputed']
user: User

View File

@@ -0,0 +1,39 @@
from datetime import datetime
from pydantic import BaseModel
from .....typedefs import Number
from ...base import Base
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(Base):
replay_id: str
games: list[Game]
play_at: datetime

View File

@@ -3,10 +3,9 @@ from typing import Literal
from pydantic import BaseModel
from ......games.tetrio.api.typedefs import Rank
from .....typedefs import Number
from ...base import Avatar
from .base import TetraLeagueHistoryData
from .......games.tetrio.api.typedefs import Rank
from ......typedefs import Number
from ....base import Avatar, Base, HistoryData
class Badge(BaseModel):
@@ -22,6 +21,7 @@ class User(BaseModel):
country: str | None
role: Literal['anon', 'user', 'bot', 'halfmod', 'mod', 'admin', 'sysop', 'hidden', 'banned']
botmaster: str | None
avatar: str | Avatar
banner: str | None
@@ -36,6 +36,9 @@ class User(BaseModel):
badges: list[Badge]
xp: Number
ar: Number
achievements: list[int]
playtime: str | None
join_at: datetime | None
@@ -74,18 +77,20 @@ class TetraLeague(BaseModel):
decaying: bool
history: list[TetraLeagueHistoryData] | None
history: list[HistoryData] | None
class Sprint(BaseModel):
time: str
global_rank: int | None
global_rank: Number | None
country_rank: Number | None
play_at: datetime
class Blitz(BaseModel):
score: int
score: Number
global_rank: int | None
country_rank: int | None
play_at: datetime
@@ -94,9 +99,29 @@ class Zen(BaseModel):
score: int
class Info(BaseModel):
class Week(BaseModel):
altitude: Number
global_rank: int | None
country_rank: int | None
play_at: datetime
class Best(BaseModel):
altitude: Number
global_rank: int | None
play_at: datetime
class Zenith(BaseModel):
week: Week | None
best: Best | None
class Info(Base):
user: User
tetra_league: TetraLeague | None
zenith: Zenith | None
zenithex: Zenith | None
statistic: Statistic | None
sprint: Sprint | None
blitz: Blitz | None

View File

@@ -1,24 +1,23 @@
from datetime import datetime
from pydantic import BaseModel
from ......games.tetrio.api.typedefs import Rank
from .....typedefs import Number
from ...base import Avatar
from .......games.tetrio.api.typedefs import Rank
from ......typedefs import Number
from ....base import Avatar, Base
class TetraLeague(BaseModel):
pps: Number
apm: Number
apl: Number
vs: Number | None
adpl: Number | None
rank: Rank
tr: Number
glicko: Number | None
rd: Number | None
decaying: bool
pps: Number
apm: Number
apl: Number
vs: Number | None
adpl: Number | None
class User(BaseModel):
@@ -26,11 +25,14 @@ class User(BaseModel):
name: str
avatar: str | Avatar
country: str | None
tetra_league: TetraLeague
xp: Number
join_at: datetime | None
class List(BaseModel):
class Data(BaseModel):
user: User
tetra_league: TetraLeague
class List(Base):
show_index: bool
users: list[User]
data: list[Data]