Compare commits

...

11 Commits

Author SHA1 Message Date
b8b6d5f6c8 🔖 1.4.15 2024-08-17 22:41:32 +08:00
7a44c0dca5 🐛 修 s1 没打的爆炸 2024-08-17 22:40:47 +08:00
4155d8eb42 🔖 1.4.14 2024-08-17 19:50:52 +08:00
4cc942d226 🐛 修 40l 无 hold 爆炸 2024-08-17 19:50:25 +08:00
996dd565d8 🔖 1.4.13 2024-08-17 18:43:11 +08:00
5b0660e45b 🐛 修第一赛季最后没有段位爆炸 2024-08-17 18:41:31 +08:00
8d1ebc06d1 🔖 1.4.12 2024-08-17 05:07:27 +08:00
c57aa48048 🐛 修没打过的爆炸 2024-08-17 05:06:59 +08:00
ad90562fdf 🐛 修国家为空爆炸 2024-08-17 04:45:06 +08:00
cbc96fc09e 🔖 1.4.11 2024-08-17 04:37:18 +08:00
8e10cfe0d0 🐛 修最佳段位为 z 爆炸 2024-08-17 04:31:14 +08:00
5 changed files with 68 additions and 19 deletions

View File

@@ -21,7 +21,7 @@ class Stats(BaseModel):
level_lines: int level_lines: int
level_lines_needed: int level_lines_needed: int
inputs: int inputs: int
holds: int holds: int = 0
time: Time | None = None # ?: 不知道是之后都没有了还是还会有 time: Time | None = None # ?: 不知道是之后都没有了还是还会有
score: int score: int
zenlevel: int zenlevel: int

View File

@@ -1,14 +1,16 @@
from typing import Literal
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from ...typing import Rank, S1Rank, S1ValidRank, ValidRank from ...typing import Rank, S1Rank, S1ValidRank
from ..base import SuccessModel from ..base import SuccessModel
class PastInner(BaseModel): class PastInner(BaseModel):
season: str season: str
username: str username: str
country: str country: str | None = None
placement: int placement: int | None = None
gamesplayed: int gamesplayed: int
gameswon: int gameswon: int
glicko: float glicko: float
@@ -24,10 +26,57 @@ class PastInner(BaseModel):
class Past(BaseModel): class Past(BaseModel):
first: PastInner = Field(..., alias='1') first: PastInner | None = Field(default=None, alias='1')
class Data(BaseModel): class BaseData(BaseModel):
decaying: bool
past: Past
class NeverPlayedData(BaseData):
gamesplayed: Literal[0]
gameswon: Literal[0]
glicko: Literal[-1]
rd: Literal[-1]
gxe: Literal[-1]
tr: Literal[-1]
rank: Literal['z']
apm: None = None
pps: None = None
vs: None = None
standing: Literal[-1]
standing_local: Literal[-1]
prev_rank: None
prev_at: Literal[-1]
next_rank: None
next_at: Literal[-1]
percentile: Literal[-1]
percentile_rank: Literal['z']
class NeverRatedData(BaseData):
gamesplayed: Literal[1, 2, 3, 4, 5, 6, 7, 8, 9]
gameswon: int
glicko: Literal[-1]
rd: Literal[-1]
gxe: Literal[-1]
tr: Literal[-1]
apm: float
pps: float
vs: float
rank: Literal['z']
standing: Literal[-1]
standing_local: Literal[-1]
prev_rank: None
prev_at: Literal[-1]
next_rank: None
next_at: Literal[-1]
percentile: Literal[-1]
percentile_rank: Literal['z']
class RatedData(BaseData):
gamesplayed: int gamesplayed: int
gameswon: int gameswon: int
glicko: float glicko: float
@@ -35,21 +84,19 @@ class Data(BaseModel):
gxe: float gxe: float
tr: float tr: float
rank: Rank rank: Rank
bestrank: ValidRank = Field('z') bestrank: Rank
standing: int
apm: float apm: float
pps: float pps: float
vs: float vs: float
decaying: bool
standing: int
standing_local: int standing_local: int
prev_rank: ValidRank | None = None prev_rank: Rank | None = None
prev_at: int prev_at: int
next_rank: ValidRank | None = None next_rank: Rank | None = None
next_at: int next_at: int
percentile: float percentile: float
percentile_rank: Rank percentile_rank: str
past: Past
class LeagueSuccessModel(SuccessModel): class LeagueSuccessModel(SuccessModel):
data: Data data: NeverPlayedData | NeverRatedData | RatedData

View File

@@ -39,13 +39,13 @@ from .. import add_block_handlers, alc
from ..constant import CANT_VERIFY_MESSAGE from ..constant import CANT_VERIFY_MESSAGE
from . import command, get_player from . import command, get_player
from .api import Player from .api import Player
from .api.schemas.summaries.league import LeagueSuccessModel, NeverPlayedData, NeverRatedData
from .constant import GAME_TYPE from .constant import GAME_TYPE
from .models import TETRIOUserConfig from .models import TETRIOUserConfig
from .typing import Template from .typing import Template
if TYPE_CHECKING: if TYPE_CHECKING:
from .api.schemas.summaries import SoloSuccessModel, ZenSuccessModel from .api.schemas.summaries import SoloSuccessModel, ZenSuccessModel
from .api.schemas.summaries.league import LeagueSuccessModel
from .api.schemas.user import User from .api.schemas.user import User
from .api.schemas.user_info import UserInfoSuccess from .api.schemas.user_info import UserInfoSuccess
@@ -229,7 +229,7 @@ async def make_query_image_v2(player: Player) -> bytes:
), ),
tetra_league=TetraLeague( tetra_league=TetraLeague(
rank=league.data.rank, rank=league.data.rank,
highest_rank=league.data.bestrank, highest_rank='z' if isinstance(league.data, NeverRatedData) else league.data.bestrank,
tr=round(league.data.tr, 2), tr=round(league.data.tr, 2),
glicko=round(league.data.glicko, 2), glicko=round(league.data.glicko, 2),
rd=round(league.data.rd, 2), rd=round(league.data.rd, 2),
@@ -243,7 +243,9 @@ async def make_query_image_v2(player: Player) -> bytes:
statistic=TetraLeagueStatistic(total=league.data.gamesplayed, wins=league.data.gameswon), statistic=TetraLeagueStatistic(total=league.data.gamesplayed, wins=league.data.gameswon),
decaying=league.data.decaying, decaying=league.data.decaying,
history=None, history=None,
), )
if not isinstance(league.data, NeverPlayedData)
else None,
statistic=Statistic( statistic=Statistic(
total=handling_special_value(user_info.data.gamesplayed), total=handling_special_value(user_info.data.gamesplayed),
wins=handling_special_value(user_info.data.gameswon), wins=handling_special_value(user_info.data.gameswon),

View File

@@ -53,7 +53,7 @@ class TetraLeagueStatistic(BaseModel):
class TetraLeague(BaseModel): class TetraLeague(BaseModel):
rank: Rank rank: Rank
highest_rank: ValidRank highest_rank: Rank
tr: Number tr: Number

View File

@@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = 'nonebot-plugin-tetris-stats' name = 'nonebot-plugin-tetris-stats'
version = '1.4.10' version = '1.4.15'
description = '一款基于 NoneBot2 的用于查询 Tetris 相关游戏数据的插件' description = '一款基于 NoneBot2 的用于查询 Tetris 相关游戏数据的插件'
authors = ['scdhh <wallfjjd@gmail.com>'] authors = ['scdhh <wallfjjd@gmail.com>']
readme = 'README.md' readme = 'README.md'