Compare commits

..

9 Commits
1.3.2 ... 1.3.3

Author SHA1 Message Date
95d9b74cd7 🔖 1.3.3 2024-06-25 21:50:27 +08:00
4b5f0263e4 🐛 修正 TETR.IO records max 数据异常 2024-06-25 21:49:42 +08:00
7500640330 👷 添加 pre-commit hook 2024-06-25 09:50:50 +08:00
967a028235 🐛 修复 AlconnaMatcher 对 Alconna 的引用变成弱引用导致的问题 2024-06-25 09:24:39 +08:00
dependabot[bot]
abe5e30ede ⬆️ Bump nonebot-adapter-discord from 0.1.7 to 0.1.8 (#349)
Bumps [nonebot-adapter-discord](https://github.com/nonebot/adapter-discord) from 0.1.7 to 0.1.8.
- [Release notes](https://github.com/nonebot/adapter-discord/releases)
- [Commits](https://github.com/nonebot/adapter-discord/compare/v0.1.7...v0.1.8)

---
updated-dependencies:
- dependency-name: nonebot-adapter-discord
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-25 08:49:27 +08:00
dependabot[bot]
d9d3f63118 ⬆️ Bump aiofiles from 23.2.1 to 24.1.0 (#350)
Bumps [aiofiles](https://github.com/Tinche/aiofiles) from 23.2.1 to 24.1.0.
- [Release notes](https://github.com/Tinche/aiofiles/releases)
- [Commits](https://github.com/Tinche/aiofiles/compare/v23.2.1...v24.1.0)

---
updated-dependencies:
- dependency-name: aiofiles
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-25 08:49:09 +08:00
dependabot[bot]
4f864c54bc ⬆️ Bump types-aiofiles from 23.2.0.20240403 to 23.2.0.20240623 (#351)
Bumps [types-aiofiles](https://github.com/python/typeshed) from 23.2.0.20240403 to 23.2.0.20240623.
- [Commits](https://github.com/python/typeshed/commits)

---
updated-dependencies:
- dependency-name: types-aiofiles
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-25 08:49:00 +08:00
dependabot[bot]
2474f77291 ⬆️ Bump nonebot-plugin-alconna from 0.47.1 to 0.47.2 (#352)
Bumps [nonebot-plugin-alconna](https://github.com/nonebot/plugin-alconna) from 0.47.1 to 0.47.2.
- [Release notes](https://github.com/nonebot/plugin-alconna/releases)
- [Commits](https://github.com/nonebot/plugin-alconna/compare/v0.47.1...v0.47.2)

---
updated-dependencies:
- dependency-name: nonebot-plugin-alconna
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-25 08:48:51 +08:00
渣渣120
6291a2ba70 更新 TETR.IO 模板 (#348)
*  更新路径以匹配模板

*  添加历史数据

* 🎨 优化模板模型代码结构

---------

Co-authored-by: shoucandanghehe <wallfjjd@gmail.com>
2024-06-25 08:47:35 +08:00
18 changed files with 159 additions and 143 deletions

22
.pre-commit-config.yaml Normal file
View File

@@ -0,0 +1,22 @@
default_install_hook_types: [pre-commit, prepare-commit-msg]
ci:
autofix_commit_msg: ':rotating_light: auto fix by pre-commit hooks'
autofix_prs: true
autoupdate_branch: master
autoupdate_schedule: monthly
autoupdate_commit_msg: ':arrow_up: auto update by pre-commit hooks'
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.4.10
hooks:
- id: ruff
args: [--fix, --exit-non-zero-on-fix]
stages: [commit]
- id: ruff-format
stages: [commit]
- repo: https://github.com/nonebot/nonemoji
rev: v0.1.4
hooks:
- id: nonemoji
stages: [prepare-commit-msg]

View File

@@ -9,15 +9,17 @@ from nonebot_plugin_alconna import AlcMatches, Alconna, At, CommandMeta, on_alco
from .. import ns from .. import ns
from ..utils.exception import MessageFormatError, NeedCatchError from ..utils.exception import MessageFormatError, NeedCatchError
alc = on_alconna( command: Alconna = Alconna(
Alconna( ['tetris-stats', 'tstats'],
['tetris-stats', 'tstats'], namespace=ns,
namespace=ns, meta=CommandMeta(
meta=CommandMeta( description='俄罗斯方块相关游戏数据查询',
description='俄罗斯方块相关游戏数据查询', fuzzy_match=True,
fuzzy_match=True,
),
), ),
)
alc = on_alconna(
command=command,
skip_for_unmatch=False, skip_for_unmatch=False,
auto_send_output=True, auto_send_output=True,
use_origin=True, use_origin=True,

View File

@@ -3,7 +3,7 @@ from nonebot_plugin_alconna import At
from ...utils.exception import MessageFormatError from ...utils.exception import MessageFormatError
from ...utils.typing import Me from ...utils.typing import Me
from .. import add_block_handlers, alc from .. import add_block_handlers, alc, command
from .api import Player from .api import Player
from .api.typing import ValidRank from .api.typing import ValidRank
from .constant import USER_ID, USER_NAME from .constant import USER_ID, USER_NAME
@@ -18,7 +18,7 @@ def get_player(user_id_or_name: str) -> Player | MessageFormatError:
return MessageFormatError('用户名/ID不合法') return MessageFormatError('用户名/ID不合法')
alc.command.add( command.add(
Subcommand( Subcommand(
'TETR.IO', 'TETR.IO',
Subcommand( Subcommand(

View File

@@ -30,13 +30,13 @@ from ...utils.host import HostPage, get_self_netloc
from ...utils.metrics import TetrisMetricsProWithPPSVS, get_metrics from ...utils.metrics import TetrisMetricsProWithPPSVS, get_metrics
from ...utils.render import render from ...utils.render import render
from ...utils.render.schemas.base import Avatar, Ranking from ...utils.render.schemas.base import Avatar, Ranking
from ...utils.render.schemas.tetrio_info import Data, Radar, TetraLeague, TetraLeagueHistory from ...utils.render.schemas.tetrio.tetrio_info import Info as V1TemplateInfo
from ...utils.render.schemas.tetrio_info import Info as V1TemplateInfo from ...utils.render.schemas.tetrio.tetrio_info import Radar, TetraLeague, TetraLeagueHistory, TetraLeagueHistoryData
from ...utils.render.schemas.tetrio_info import User as V1TemplateUser from ...utils.render.schemas.tetrio.tetrio_info import User as V1TemplateUser
from ...utils.render.schemas.tetrio_info_v2 import Badge, Blitz, Sprint, Statistic, TetraLeagueStatistic from ...utils.render.schemas.tetrio.tetrio_user_info_v2 import Badge, Blitz, Sprint, Statistic, TetraLeagueStatistic
from ...utils.render.schemas.tetrio_info_v2 import Info as V2TemplateInfo from ...utils.render.schemas.tetrio.tetrio_user_info_v2 import Info as V2TemplateInfo
from ...utils.render.schemas.tetrio_info_v2 import TetraLeague as V2TemplateTetraLeague from ...utils.render.schemas.tetrio.tetrio_user_info_v2 import TetraLeague as V2TemplateTetraLeague
from ...utils.render.schemas.tetrio_info_v2 import User as V2TemplateUser from ...utils.render.schemas.tetrio.tetrio_user_info_v2 import User as V2TemplateUser
from ...utils.screenshot import screenshot from ...utils.screenshot import screenshot
from ...utils.typing import Me, Number from ...utils.typing import Me, Number
from ..constant import CANT_VERIFY_MESSAGE from ..constant import CANT_VERIFY_MESSAGE
@@ -129,10 +129,10 @@ def get_split(value_max: int, value_min: int) -> tuple[int, int]:
def get_specified_point( def get_specified_point(
previous_point: Data, previous_point: TetraLeagueHistoryData,
behind_point: Data, behind_point: TetraLeagueHistoryData,
point_time: datetime, point_time: datetime,
) -> Data: ) -> TetraLeagueHistoryData:
"""根据给出的 previous_point 和 behind_point, 推算 point_time 点处的数据 """根据给出的 previous_point 和 behind_point, 推算 point_time 点处的数据
Args: Args:
@@ -147,13 +147,13 @@ def get_specified_point(
slope = (behind_point.tr - previous_point.tr) / ( slope = (behind_point.tr - previous_point.tr) / (
datetime.timestamp(behind_point.record_at) - datetime.timestamp(previous_point.record_at) datetime.timestamp(behind_point.record_at) - datetime.timestamp(previous_point.record_at)
) )
return Data( return TetraLeagueHistoryData(
record_at=point_time, record_at=point_time,
tr=previous_point.tr + slope * (datetime.timestamp(point_time) - datetime.timestamp(previous_point.record_at)), tr=previous_point.tr + slope * (datetime.timestamp(point_time) - datetime.timestamp(previous_point.record_at)),
) )
async def query_historical_data(user: User, user_info: UserInfoSuccess) -> list[Data]: async def query_historical_data(user: User, user_info: UserInfoSuccess) -> list[TetraLeagueHistoryData]:
today = datetime.now(ZoneInfo('Asia/Shanghai')).replace(hour=0, minute=0, second=0, microsecond=0) today = datetime.now(ZoneInfo('Asia/Shanghai')).replace(hour=0, minute=0, second=0, microsecond=0)
forward = timedelta(days=9) forward = timedelta(days=9)
start_time = (today - forward).astimezone(UTC) start_time = (today - forward).astimezone(UTC)
@@ -183,11 +183,11 @@ async def query_historical_data(user: User, user_info: UserInfoSuccess) -> list[
full_export_data = FullExport.get_data(user.unique_identifier) full_export_data = FullExport.get_data(user.unique_identifier)
if not historical_data and not full_export_data: if not historical_data and not full_export_data:
return [ return [
Data(record_at=today - forward, tr=user_info.data.user.league.rating), TetraLeagueHistoryData(record_at=today - forward, tr=user_info.data.user.league.rating),
Data(record_at=today.replace(microsecond=1000), tr=user_info.data.user.league.rating), TetraLeagueHistoryData(record_at=today.replace(microsecond=1000), tr=user_info.data.user.league.rating),
] ]
histories = [ histories = [
Data( TetraLeagueHistoryData(
record_at=i.update_time.astimezone(ZoneInfo('Asia/Shanghai')), record_at=i.update_time.astimezone(ZoneInfo('Asia/Shanghai')),
tr=i.data.data.user.league.rating, tr=i.data.data.user.league.rating,
) )
@@ -208,7 +208,7 @@ async def query_historical_data(user: User, user_info: UserInfoSuccess) -> list[
histories.append( histories.append(
get_specified_point( get_specified_point(
histories[-1], histories[-1],
Data(record_at=user_info.cache.cached_at, tr=user_info.data.user.league.rating), TetraLeagueHistoryData(record_at=user_info.cache.cached_at, tr=user_info.data.user.league.rating),
today.replace(microsecond=1000), today.replace(microsecond=1000),
) )
) )
@@ -219,7 +219,7 @@ async def query_historical_data(user: User, user_info: UserInfoSuccess) -> list[
today - forward, today - forward,
) )
else: else:
histories.insert(0, Data(record_at=today - forward, tr=histories[0].tr)) histories.insert(0, TetraLeagueHistoryData(record_at=today - forward, tr=histories[0].tr))
return histories return histories
@@ -322,6 +322,7 @@ async def make_query_image_v2(player: Player) -> bytes:
player.user, player.get_info(), player.sprint, player.blitz, player.zen player.user, player.get_info(), player.sprint, player.blitz, player.zen
) )
league = get_league(user_info) league = get_league(user_info)
histories = await query_historical_data(user, user_info)
if sprint.record is not None: if sprint.record is not None:
duration = timedelta(milliseconds=sprint.record.endcontext.final_time).total_seconds() duration = timedelta(milliseconds=sprint.record.endcontext.final_time).total_seconds()
@@ -342,7 +343,7 @@ async def make_query_image_v2(player: Player) -> bytes:
netloc = get_self_netloc() netloc = get_self_netloc()
async with HostPage( async with HostPage(
await render( await render(
'v2/tetrio/info', 'v2/tetrio/user/info',
V2TemplateInfo( V2TemplateInfo(
user=V2TemplateUser( user=V2TemplateUser(
id=user.ID, id=user.ID,
@@ -397,6 +398,7 @@ async def make_query_image_v2(player: Player) -> bytes:
wins=league.gameswon, wins=league.gameswon,
), ),
decaying=league.decaying, decaying=league.decaying,
history=histories,
) )
if isinstance(league, RatedLeague) if isinstance(league, RatedLeague)
else None, else None,
@@ -510,8 +512,8 @@ class FullExport:
cls.latest_update = datetime.now(tz=ZoneInfo('Asia/Shanghai')).date() cls.latest_update = datetime.now(tz=ZoneInfo('Asia/Shanghai')).date()
@classmethod @classmethod
def get_data(cls, unique_identifier: str) -> list[Data]: def get_data(cls, unique_identifier: str) -> list[TetraLeagueHistoryData]:
return [Data(record_at=i[0], tr=i[1]) for i in cls.cache[unique_identifier]] return [TetraLeagueHistoryData(record_at=i[0], tr=i[1]) for i in cls.cache[unique_identifier]]
@classmethod @classmethod
def start_time(cls) -> datetime: def start_time(cls) -> datetime:

View File

@@ -17,8 +17,8 @@ from ....utils.host import HostPage, get_self_netloc
from ....utils.metrics import get_metrics 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_record_base import Finesse, Max, Mini, Tspins, User from ....utils.render.schemas.tetrio.tetrio_record_base import Finesse, Max, Mini, Tspins, User
from ....utils.render.schemas.tetrio_record_blitz import Record, Statistic from ....utils.render.schemas.tetrio.tetrio_record_blitz import Record, Statistic
from ....utils.screenshot import screenshot from ....utils.screenshot import screenshot
from ....utils.typing import Me from ....utils.typing import Me
from ...constant import CANT_VERIFY_MESSAGE from ...constant import CANT_VERIFY_MESSAGE
@@ -85,8 +85,8 @@ async def make_blitz_image(player: Player) -> bytes:
kpp=round(endcontext.inputs / endcontext.piecesplaced, 2), kpp=round(endcontext.inputs / endcontext.piecesplaced, 2),
kps=round(endcontext.inputs / duration, 2), kps=round(endcontext.inputs / duration, 2),
max=Max( max=Max(
combo=max((0, endcontext.combo - 1)), combo=max((0, endcontext.topcombo - 1)),
btb=max((0, endcontext.btb - 1)), btb=max((0, endcontext.topbtb - 1)),
), ),
pieces=endcontext.piecesplaced, pieces=endcontext.piecesplaced,
pps=metrics.pps, pps=metrics.pps,

View File

@@ -17,8 +17,8 @@ from ....utils.host import HostPage, get_self_netloc
from ....utils.metrics import get_metrics 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_record_base import Finesse, Max, Mini, Tspins, User from ....utils.render.schemas.tetrio.tetrio_record_base import Finesse, Max, Mini, Tspins, User
from ....utils.render.schemas.tetrio_record_sprint import Record, Statistic from ....utils.render.schemas.tetrio.tetrio_record_sprint import Record, Statistic
from ....utils.screenshot import screenshot from ....utils.screenshot import screenshot
from ....utils.typing import Me from ....utils.typing import Me
from ...constant import CANT_VERIFY_MESSAGE from ...constant import CANT_VERIFY_MESSAGE
@@ -87,8 +87,8 @@ async def make_sprint_image(player: Player) -> bytes:
kpp=round(endcontext.inputs / endcontext.piecesplaced, 2), kpp=round(endcontext.inputs / endcontext.piecesplaced, 2),
kps=round(endcontext.inputs / duration, 2), kps=round(endcontext.inputs / duration, 2),
max=Max( max=Max(
combo=max((0, endcontext.combo - 1)), combo=max((0, endcontext.topcombo - 1)),
btb=max((0, endcontext.btb - 1)), btb=max((0, endcontext.topbtb - 1)),
), ),
pieces=endcontext.piecesplaced, pieces=endcontext.piecesplaced,
pps=metrics.pps, pps=metrics.pps,

View File

@@ -3,7 +3,7 @@ from nonebot_plugin_alconna import At
from ...utils.exception import MessageFormatError from ...utils.exception import MessageFormatError
from ...utils.typing import Me from ...utils.typing import Me
from .. import add_block_handlers, alc from .. import add_block_handlers, alc, command
from .api import Player from .api import Player
from .constant import USER_NAME from .constant import USER_NAME
@@ -14,7 +14,7 @@ def get_player(name: str) -> Player | MessageFormatError:
return MessageFormatError('用户名/ID不合法') return MessageFormatError('用户名/ID不合法')
alc.command.add( command.add(
Subcommand( Subcommand(
'TOP', 'TOP',
Subcommand( Subcommand(

View File

@@ -3,7 +3,7 @@ from nonebot_plugin_alconna import At
from ...utils.exception import MessageFormatError from ...utils.exception import MessageFormatError
from ...utils.typing import Me from ...utils.typing import Me
from .. import add_block_handlers, alc from .. import add_block_handlers, alc, command
from .api import Player from .api import Player
from .constant import USER_NAME from .constant import USER_NAME
@@ -19,7 +19,7 @@ def get_player(teaid_or_name: str) -> Player | MessageFormatError:
return MessageFormatError('用户名/ID不合法') return MessageFormatError('用户名/ID不合法')
alc.command.add( command.add(
Subcommand( Subcommand(
'TOS', 'TOS',
Subcommand( Subcommand(

View File

@@ -5,10 +5,10 @@ from nonebot.compat import PYDANTIC_V2
from ..templates import templates_dir from ..templates import templates_dir
from .schemas.bind import Bind from .schemas.bind import Bind
from .schemas.tetrio_info import Info as TETRIOInfo from .schemas.tetrio.tetrio_info import Info as TETRIOInfo
from .schemas.tetrio_info_v2 import Info as TETRIOInfoV2 from .schemas.tetrio.tetrio_record_blitz import Record as TETRIORecordBlitz
from .schemas.tetrio_record_blitz import Record as TETRIORecordBlitz from .schemas.tetrio.tetrio_record_sprint import Record as TETRIORecordSprint
from .schemas.tetrio_record_sprint import Record as TETRIORecordSprint from .schemas.tetrio.tetrio_user_info_v2 import Info as TETRIOUserInfoV2
from .schemas.top_info import Info as TOPInfo from .schemas.top_info import Info as TOPInfo
from .schemas.tos_info import Info as TOSInfo from .schemas.tos_info import Info as TOSInfo
@@ -34,7 +34,7 @@ async def render(render_type: Literal['v1/tos/info'], data: TOSInfo) -> str: ...
@overload @overload
async def render(render_type: Literal['v2/tetrio/info'], data: TETRIOInfoV2) -> str: ... async def render(render_type: Literal['v2/tetrio/user/info'], data: TETRIOUserInfoV2) -> str: ...
@overload @overload
@@ -51,11 +51,11 @@ async def render(
'v1/tetrio/info', 'v1/tetrio/info',
'v1/top/info', 'v1/top/info',
'v1/tos/info', 'v1/tos/info',
'v2/tetrio/info', 'v2/tetrio/user/info',
'v2/tetrio/record/40l', 'v2/tetrio/record/40l',
'v2/tetrio/record/blitz', 'v2/tetrio/record/blitz',
], ],
data: Bind | TETRIOInfo | TOPInfo | TOSInfo | TETRIOInfoV2 | TETRIORecordSprint | TETRIORecordBlitz, data: Bind | TETRIOInfo | TOPInfo | TOSInfo | TETRIOUserInfoV2 | TETRIORecordSprint | TETRIORecordBlitz,
) -> str: ) -> str:
if PYDANTIC_V2: if PYDANTIC_V2:
return await env.get_template('index.html').render_async( return await env.get_template('index.html').render_async(

View File

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

View File

@@ -0,0 +1,49 @@
from pydantic import BaseModel
from .....games.tetrio.api.typing import Rank
from ....typing 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,6 +1,6 @@
from pydantic import BaseModel from pydantic import BaseModel
from .base import People from ..base import People
class User(People): class User(People):

View File

@@ -2,10 +2,11 @@ from datetime import datetime
from pydantic import BaseModel from pydantic import BaseModel
from ....games.tetrio.api.schemas.user_records import Zen from .....games.tetrio.api.schemas.user_records import Zen
from ....games.tetrio.api.typing import Rank from .....games.tetrio.api.typing import Rank
from ...typing import Number from ....typing import Number
from .base import Avatar from ..base import Avatar
from .base import TetraLeagueHistoryData
class Badge(BaseModel): class Badge(BaseModel):
@@ -72,6 +73,8 @@ class TetraLeague(BaseModel):
decaying: bool decaying: bool
history: list[TetraLeagueHistoryData]
class Sprint(BaseModel): class Sprint(BaseModel):
time: str time: str

View File

@@ -1,72 +0,0 @@
from datetime import datetime
from typing import Annotated, ClassVar
from nonebot.compat import PYDANTIC_V2
from pydantic import BaseModel
from ....games.tetrio.api.typing import Rank
from ...typing import Number
from .base import People, Ranking
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 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 Info(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}

30
poetry.lock generated
View File

@@ -32,13 +32,13 @@ pycares = ">=4.0.0"
[[package]] [[package]]
name = "aiofiles" name = "aiofiles"
version = "23.2.1" version = "24.1.0"
description = "File support for asyncio." description = "File support for asyncio."
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.8"
files = [ files = [
{file = "aiofiles-23.2.1-py3-none-any.whl", hash = "sha256:19297512c647d4b27a2cf7c34caa7e405c0d60b5560618a29a9fe027b18b0107"}, {file = "aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5"},
{file = "aiofiles-23.2.1.tar.gz", hash = "sha256:84ec2218d8419404abcb9f0c02df3f34c6e0a68ed41072acfb1cef5cbc29051a"}, {file = "aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c"},
] ]
[[package]] [[package]]
@@ -1677,13 +1677,13 @@ typing-extensions = ">=4.5.0"
[[package]] [[package]]
name = "nonebot-adapter-discord" name = "nonebot-adapter-discord"
version = "0.1.7" version = "0.1.8"
description = "Discord adapter for nonebot2" description = "Discord adapter for nonebot2"
optional = false optional = false
python-versions = "<4.0,>=3.8" python-versions = "<4.0,>=3.9"
files = [ files = [
{file = "nonebot_adapter_discord-0.1.7-py3-none-any.whl", hash = "sha256:045858cdd1c71724903e570cb89b39c57ffc91889708494c178aca0da11dc039"}, {file = "nonebot_adapter_discord-0.1.8-py3-none-any.whl", hash = "sha256:d063bf524f6a75c5c123f2d04227e0ec62c2433f56b28fb92fa5eb2aebef1c16"},
{file = "nonebot_adapter_discord-0.1.7.tar.gz", hash = "sha256:51ea251ea5db7b9e8a40b686f77a43d52b81e41d77de2dd9d6742552f1daabaa"}, {file = "nonebot_adapter_discord-0.1.8.tar.gz", hash = "sha256:5d3a7a8e0ab23b7ae84551b479c40c5d09733b15d09538d64765c5af54721781"},
] ]
[package.dependencies] [package.dependencies]
@@ -1754,13 +1754,13 @@ nonebot2 = ">=2.3.0"
[[package]] [[package]]
name = "nonebot-plugin-alconna" name = "nonebot-plugin-alconna"
version = "0.47.1" version = "0.47.2"
description = "Alconna Adapter for Nonebot" description = "Alconna Adapter for Nonebot"
optional = false optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
files = [ files = [
{file = "nonebot_plugin_alconna-0.47.1-py3-none-any.whl", hash = "sha256:767bd427e9bf80c0b9f5a0cc3d5da392849bf08e7ccda5e9d3c8428d2ff541ee"}, {file = "nonebot_plugin_alconna-0.47.2-py3-none-any.whl", hash = "sha256:ba46d6ed7438985b0322681c398cc98cf7dceab3713214a8eb7f2e65f6fc141a"},
{file = "nonebot_plugin_alconna-0.47.1.tar.gz", hash = "sha256:800139edec2250f36b3c5ec632eb6e3cacde417baeaf9a4c5365f1a283cc5410"}, {file = "nonebot_plugin_alconna-0.47.2.tar.gz", hash = "sha256:3bbe5df1b859b8720c648f4d6338d586dac2a78459b07894c62699a80196a0d6"},
] ]
[package.dependencies] [package.dependencies]
@@ -2968,13 +2968,13 @@ typing-extensions = ">=3.7.4.3"
[[package]] [[package]]
name = "types-aiofiles" name = "types-aiofiles"
version = "23.2.0.20240403" version = "23.2.0.20240623"
description = "Typing stubs for aiofiles" description = "Typing stubs for aiofiles"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
{file = "types-aiofiles-23.2.0.20240403.tar.gz", hash = "sha256:1ffcf8f5f72b81f71139f754ea2610ab0017f27ba4fd771e187b07840ee49c0f"}, {file = "types-aiofiles-23.2.0.20240623.tar.gz", hash = "sha256:d515b2fa46bf894aff45a364a704f050de3898344fd6c5994d58dc8b59ab71e6"},
{file = "types_aiofiles-23.2.0.20240403-py3-none-any.whl", hash = "sha256:adeeb4b999f19fda2dfe91c07857ff54701b6ee9b227b523a5a7be92125a2c5f"}, {file = "types_aiofiles-23.2.0.20240623-py3-none-any.whl", hash = "sha256:70597b29fc40c8583b6d755814b2cd5fcdb6785622e82d74ef499f9066316e08"},
] ]
[[package]] [[package]]
@@ -3694,4 +3694,4 @@ cffi = ["cffi (>=1.11)"]
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = "^3.10" python-versions = "^3.10"
content-hash = "0e3c340496e7ad1e8cdeade958bfcfe0f2e796f74bf0a3e7e1881f2931e58688" content-hash = "db00f0f674bdc7f0a88ae81cb2527eb5b1c18fd31fae67d3e43276f9575869f1"

View File

@@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = 'nonebot-plugin-tetris-stats' name = 'nonebot-plugin-tetris-stats'
version = '1.3.2' version = '1.3.3'
description = '一款基于 NoneBot2 的用于查询 Tetris 相关游戏数据的插件' description = '一款基于 NoneBot2 的用于查询 Tetris 相关游戏数据的插件'
authors = ['scdhh <wallfjjd@gmail.com>'] authors = ['scdhh <wallfjjd@gmail.com>']
readme = 'README.md' readme = 'README.md'
@@ -20,7 +20,7 @@ nonebot-plugin-session-orm = "^0.2.0"
nonebot-plugin-user = "^0.2.0" nonebot-plugin-user = "^0.2.0"
nonebot-plugin-userinfo = "^0.2.4" nonebot-plugin-userinfo = "^0.2.4"
aiocache = "^0.12.2" aiocache = "^0.12.2"
aiofiles = "^23.2.1" aiofiles = ">=23.2.1,<25.0.0"
httpx = "^0.27.0" httpx = "^0.27.0"
jinja2 = "^3.1.3" jinja2 = "^3.1.3"
lxml = '^5.1.0' lxml = '^5.1.0'