mirror of
https://github.com/A-Minos/nonebot-plugin-tetris-stats.git
synced 2026-03-05 05:36:54 +08:00
💩 迅速的适配第二赛季
This commit is contained in:
@@ -24,6 +24,7 @@ from .schemas.summaries import (
|
|||||||
SoloSuccessModel as SummariesSoloSuccessModel,
|
SoloSuccessModel as SummariesSoloSuccessModel,
|
||||||
)
|
)
|
||||||
from .schemas.summaries.base import User as SummariesUser
|
from .schemas.summaries.base import User as SummariesUser
|
||||||
|
from .schemas.summaries.league import LeagueSuccessModel
|
||||||
from .schemas.user import User
|
from .schemas.user import User
|
||||||
from .schemas.user_info import UserInfo, UserInfoSuccess
|
from .schemas.user_info import UserInfo, UserInfoSuccess
|
||||||
from .typing import Records, Summaries
|
from .typing import Records, Summaries
|
||||||
@@ -55,6 +56,7 @@ class Player:
|
|||||||
'blitz': SummariesSoloSuccessModel,
|
'blitz': SummariesSoloSuccessModel,
|
||||||
'zenith': ZenithSuccessModel,
|
'zenith': ZenithSuccessModel,
|
||||||
'zenithex': ZenithSuccessModel,
|
'zenithex': ZenithSuccessModel,
|
||||||
|
'league': LeagueSuccessModel,
|
||||||
'zen': ZenSuccessModel,
|
'zen': ZenSuccessModel,
|
||||||
'achievements': AchievementsSuccessModel,
|
'achievements': AchievementsSuccessModel,
|
||||||
}
|
}
|
||||||
@@ -138,6 +140,8 @@ class Player:
|
|||||||
@overload
|
@overload
|
||||||
async def get_summaries(self, summaries_type: Literal['zen']) -> ZenSuccessModel: ...
|
async def get_summaries(self, summaries_type: Literal['zen']) -> ZenSuccessModel: ...
|
||||||
@overload
|
@overload
|
||||||
|
async def get_summaries(self, summaries_type: Literal['league']) -> LeagueSuccessModel: ...
|
||||||
|
@overload
|
||||||
async def get_summaries(self, summaries_type: Literal['achievements']) -> AchievementsSuccessModel: ...
|
async def get_summaries(self, summaries_type: Literal['achievements']) -> AchievementsSuccessModel: ...
|
||||||
|
|
||||||
async def get_summaries(self, summaries_type: Summaries) -> SummariesModel:
|
async def get_summaries(self, summaries_type: Summaries) -> SummariesModel:
|
||||||
@@ -164,20 +168,21 @@ class Player:
|
|||||||
return self._summaries[summaries_type]
|
return self._summaries[summaries_type]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@alru_cache
|
|
||||||
async def sprint(self) -> SummariesSoloSuccessModel:
|
async def sprint(self) -> SummariesSoloSuccessModel:
|
||||||
return await self.get_summaries('40l')
|
return await self.get_summaries('40l')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@alru_cache
|
|
||||||
async def blitz(self) -> SummariesSoloSuccessModel:
|
async def blitz(self) -> SummariesSoloSuccessModel:
|
||||||
return await self.get_summaries('blitz')
|
return await self.get_summaries('blitz')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@alru_cache
|
|
||||||
async def zen(self) -> ZenSuccessModel:
|
async def zen(self) -> ZenSuccessModel:
|
||||||
return await self.get_summaries('zen')
|
return await self.get_summaries('zen')
|
||||||
|
|
||||||
|
@property
|
||||||
|
async def league(self) -> LeagueSuccessModel:
|
||||||
|
return await self.get_summaries('league')
|
||||||
|
|
||||||
async def _get_local_summaries_user(self) -> SummariesUser | None:
|
async def _get_local_summaries_user(self) -> SummariesUser | None:
|
||||||
allow_summaries: set[Literal['40l', 'blitz', 'zenith', 'zenithex']] = {
|
allow_summaries: set[Literal['40l', 'blitz', 'zenith', 'zenithex']] = {
|
||||||
'40l',
|
'40l',
|
||||||
|
|||||||
@@ -1,19 +1,21 @@
|
|||||||
from .achievements import Achievements, AchievementsSuccessModel
|
from .achievements import Achievements, AchievementsSuccessModel
|
||||||
|
from .league import LeagueSuccessModel
|
||||||
from .solo import Solo, SoloSuccessModel
|
from .solo import Solo, SoloSuccessModel
|
||||||
from .zen import Zen, ZenSuccessModel
|
from .zen import Zen, ZenSuccessModel
|
||||||
from .zenith import Zenith, ZenithEx, ZenithSuccessModel
|
from .zenith import Zenith, ZenithEx, ZenithSuccessModel
|
||||||
|
|
||||||
SummariesModel = AchievementsSuccessModel | SoloSuccessModel | ZenSuccessModel | ZenithSuccessModel
|
SummariesModel = AchievementsSuccessModel | SoloSuccessModel | ZenSuccessModel | LeagueSuccessModel | ZenithSuccessModel
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'Achievements',
|
'Achievements',
|
||||||
'AchievementsSuccessModel',
|
'AchievementsSuccessModel',
|
||||||
|
'LeagueSuccessModel',
|
||||||
'Solo',
|
'Solo',
|
||||||
'SoloSuccessModel',
|
'SoloSuccessModel',
|
||||||
|
'SummariesModel',
|
||||||
'Zen',
|
'Zen',
|
||||||
'ZenSuccessModel',
|
|
||||||
'Zenith',
|
'Zenith',
|
||||||
'ZenithEx',
|
'ZenithEx',
|
||||||
'ZenithSuccessModel',
|
'ZenithSuccessModel',
|
||||||
'SummariesModel',
|
'ZenSuccessModel',
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -7,5 +7,5 @@ class User(BaseModel):
|
|||||||
avatar_revision: int | None
|
avatar_revision: int | None
|
||||||
banner_revision: int | None
|
banner_revision: int | None
|
||||||
country: str | None
|
country: str | None
|
||||||
verified: int
|
verified: int | None = None
|
||||||
supporter: int
|
supporter: int
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ class Data(BaseModel):
|
|||||||
badstanding: bool | None = None
|
badstanding: bool | None = None
|
||||||
supporter: bool | None = None # osk说是必有, 但实际上不是 fkosk
|
supporter: bool | None = None # osk说是必有, 但实际上不是 fkosk
|
||||||
supporter_tier: int
|
supporter_tier: int
|
||||||
verified: bool
|
verified: bool | None = None
|
||||||
avatar_revision: int | None = None
|
avatar_revision: int | None = None
|
||||||
"""This user's avatar ID. Get their avatar at
|
"""This user's avatar ID. Get their avatar at
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from typing import Literal
|
from typing import Literal
|
||||||
|
|
||||||
ValidRank = Literal[
|
S1ValidRank = Literal[
|
||||||
|
'x+',
|
||||||
'x',
|
'x',
|
||||||
'u',
|
'u',
|
||||||
'ss',
|
'ss',
|
||||||
@@ -19,7 +20,9 @@ ValidRank = Literal[
|
|||||||
'd+',
|
'd+',
|
||||||
'd',
|
'd',
|
||||||
]
|
]
|
||||||
|
S1Rank = S1ValidRank | Literal['z']
|
||||||
|
|
||||||
|
ValidRank = Literal['x+'] | S1ValidRank
|
||||||
Rank = ValidRank | Literal['z'] # 未定级
|
Rank = ValidRank | Literal['z'] # 未定级
|
||||||
|
|
||||||
Summaries = Literal[
|
Summaries = Literal[
|
||||||
@@ -27,7 +30,7 @@ Summaries = Literal[
|
|||||||
'blitz',
|
'blitz',
|
||||||
'zenith',
|
'zenith',
|
||||||
'zenithex',
|
'zenithex',
|
||||||
# 'league', # 等待正式赛季开始
|
'league',
|
||||||
'zen',
|
'zen',
|
||||||
'achievements',
|
'achievements',
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -19,9 +19,18 @@ from sqlalchemy import select
|
|||||||
|
|
||||||
from ...db import query_bind_info, trigger
|
from ...db import query_bind_info, trigger
|
||||||
from ...utils.host import HostPage, get_self_netloc
|
from ...utils.host import HostPage, get_self_netloc
|
||||||
|
from ...utils.metrics import get_metrics
|
||||||
from ...utils.render import render
|
from ...utils.render import render
|
||||||
from ...utils.render.schemas.base import Avatar
|
from ...utils.render.schemas.base import Avatar
|
||||||
from ...utils.render.schemas.tetrio.user.info_v2 import Badge, Blitz, Sprint, Statistic, Zen
|
from ...utils.render.schemas.tetrio.user.info_v2 import (
|
||||||
|
Badge,
|
||||||
|
Blitz,
|
||||||
|
Sprint,
|
||||||
|
Statistic,
|
||||||
|
TetraLeague,
|
||||||
|
TetraLeagueStatistic,
|
||||||
|
Zen,
|
||||||
|
)
|
||||||
from ...utils.render.schemas.tetrio.user.info_v2 import Info as V2TemplateInfo
|
from ...utils.render.schemas.tetrio.user.info_v2 import Info as V2TemplateInfo
|
||||||
from ...utils.render.schemas.tetrio.user.info_v2 import User as V2TemplateUser
|
from ...utils.render.schemas.tetrio.user.info_v2 import User as V2TemplateUser
|
||||||
from ...utils.screenshot import screenshot
|
from ...utils.screenshot import screenshot
|
||||||
@@ -36,6 +45,7 @@ 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
|
||||||
|
|
||||||
@@ -146,15 +156,17 @@ def handling_special_value(value: N) -> N | None:
|
|||||||
async def make_query_image_v2(player: Player) -> bytes:
|
async def make_query_image_v2(player: Player) -> bytes:
|
||||||
user: User
|
user: User
|
||||||
user_info: UserInfoSuccess
|
user_info: UserInfoSuccess
|
||||||
|
league: LeagueSuccessModel
|
||||||
sprint: SoloSuccessModel
|
sprint: SoloSuccessModel
|
||||||
blitz: SoloSuccessModel
|
blitz: SoloSuccessModel
|
||||||
zen: ZenSuccessModel
|
zen: ZenSuccessModel
|
||||||
avatar_revision: int | None
|
avatar_revision: int | None
|
||||||
banner_revision: int | None
|
banner_revision: int | None
|
||||||
# TODO)) 有没有什么办法能让这类型推导成功)
|
# TODO)) 有没有什么办法能让这类型推导成功)
|
||||||
user, user_info, sprint, blitz, zen, avatar_revision, banner_revision = await gather( # type: ignore[assignment]
|
user, user_info, league, sprint, blitz, zen, avatar_revision, banner_revision = await gather( # type: ignore[assignment]
|
||||||
player.user,
|
player.user,
|
||||||
player.get_info(),
|
player.get_info(),
|
||||||
|
player.league,
|
||||||
player.sprint,
|
player.sprint,
|
||||||
player.blitz,
|
player.blitz,
|
||||||
player.zen,
|
player.zen,
|
||||||
@@ -211,11 +223,27 @@ async def make_query_image_v2(player: Player) -> bytes:
|
|||||||
friend_count=user_info.data.friend_count,
|
friend_count=user_info.data.friend_count,
|
||||||
supporter_tier=user_info.data.supporter_tier,
|
supporter_tier=user_info.data.supporter_tier,
|
||||||
bad_standing=user_info.data.badstanding or False,
|
bad_standing=user_info.data.badstanding or False,
|
||||||
verified=user_info.data.verified,
|
verified=user_info.data.verified or False,
|
||||||
playtime=play_time,
|
playtime=play_time,
|
||||||
join_at=user_info.data.ts,
|
join_at=user_info.data.ts,
|
||||||
),
|
),
|
||||||
tetra_league=None,
|
tetra_league=TetraLeague(
|
||||||
|
rank=league.data.rank,
|
||||||
|
highest_rank=league.data.bestrank,
|
||||||
|
tr=round(league.data.tr, 2),
|
||||||
|
glicko=round(league.data.glicko, 2),
|
||||||
|
rd=round(league.data.rd, 2),
|
||||||
|
global_rank=league.data.standing,
|
||||||
|
country_rank=league.data.standing_local,
|
||||||
|
pps=(metrics := get_metrics(pps=league.data.pps, apm=league.data.apm, vs=league.data.vs)).pps,
|
||||||
|
apm=metrics.apm,
|
||||||
|
apl=metrics.apl,
|
||||||
|
vs=metrics.vs,
|
||||||
|
adpl=metrics.adpl,
|
||||||
|
statistic=TetraLeagueStatistic(total=league.data.gamesplayed, wins=league.data.gameswon),
|
||||||
|
decaying=league.data.decaying,
|
||||||
|
history=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),
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = 'nonebot-plugin-tetris-stats'
|
name = 'nonebot-plugin-tetris-stats'
|
||||||
version = '1.4.8'
|
version = '1.4.9'
|
||||||
description = '一款基于 NoneBot2 的用于查询 Tetris 相关游戏数据的插件'
|
description = '一款基于 NoneBot2 的用于查询 Tetris 相关游戏数据的插件'
|
||||||
authors = ['scdhh <wallfjjd@gmail.com>']
|
authors = ['scdhh <wallfjjd@gmail.com>']
|
||||||
readme = 'README.md'
|
readme = 'README.md'
|
||||||
|
|||||||
Reference in New Issue
Block a user