mirror of
https://github.com/A-Minos/nonebot-plugin-tetris-stats.git
synced 2026-03-05 05:36:54 +08:00
* 🔧 启用一些 ruff 的新规则 * ➕ 添加开发依赖 nonebot-adapter-qq * ➕ 添加依赖 nonebot-plugin-session * ➕ 添加依赖 nonebot-plugin-session-orm * 🔧 忽略 ruff 规则 ISC001 format 冲突风险 * 🚨 修复 ruff 警报 * ♻️ 重构! * ♻️ 恢复定时获取 TetraLeague 数据的功能 * ✨ 统一处理需要捕获的错误 * ✨ 记录用户触发的指令
78 lines
1.5 KiB
Python
78 lines
1.5 KiB
Python
from datetime import datetime
|
|
from typing import Annotated, ClassVar
|
|
|
|
from nonebot.compat import PYDANTIC_V2
|
|
from pydantic import BaseModel
|
|
|
|
from ....game_data_processor.io_data_processor.api.typing import Rank
|
|
from ...typing import Number
|
|
from .base import People
|
|
|
|
if PYDANTIC_V2:
|
|
from pydantic import PlainSerializer
|
|
|
|
|
|
def format_datetime_to_timestamp(dt: datetime) -> int:
|
|
return int(dt.timestamp() * 1000)
|
|
|
|
|
|
class User(People):
|
|
bio: str | None
|
|
|
|
|
|
class Ranking(BaseModel):
|
|
rating: Number
|
|
rd: Number
|
|
|
|
|
|
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 Data(BaseModel):
|
|
if PYDANTIC_V2:
|
|
record_at: Annotated[datetime, PlainSerializer(format_datetime_to_timestamp, return_type=int)]
|
|
else:
|
|
record_at: datetime # type: ignore[no-redef]
|
|
tr: Number
|
|
|
|
|
|
class TetraLeagueHistory(BaseModel):
|
|
data: list[Data]
|
|
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 TETRIOInfo(BaseModel):
|
|
user: User
|
|
ranking: Ranking
|
|
tetra_league: TetraLeague
|
|
tetra_league_history: TetraLeagueHistory
|
|
radar: Radar
|
|
sprint: str
|
|
blitz: str
|
|
|
|
if not PYDANTIC_V2:
|
|
|
|
class Config:
|
|
json_encoders: ClassVar[dict] = {datetime: format_datetime_to_timestamp}
|