TETR.IO 默认模板可配置

This commit is contained in:
2024-06-10 11:57:01 +08:00
parent 7b3ca9eb2a
commit 607a0927bc
3 changed files with 46 additions and 6 deletions

View File

@@ -62,13 +62,22 @@ alc.command.add(
Args(Arg('rank', ValidRank, notice='TETR.IO 段位')),
help_text='查询 TETR.IO 段位信息',
),
Subcommand(
'config',
Option(
'--default-template',
Arg('template', Template),
alias=['-DT', 'DefaultTemplate'],
),
),
dest='TETRIO',
help_text='TETR.IO 游戏相关指令',
)
)
alc.shortcut('(?i:io)(?i:绑|绑|bind)', {'command': 'tstats TETR.IO bind', 'humanized': 'io绑定'})
alc.shortcut('(?i:io)(?i:查|查|query|stats)', {'command': 'tstats TETR.IO query', 'humanized': 'io查'})
alc.shortcut('(?i:io)(?i:绑|绑|bind)', {'command': 'tstats TETR.IO bind', 'humanized': 'io绑定'})
alc.shortcut('(?i:io)(?i:查|查|query|stats)', {'command': 'tstats TETR.IO query', 'humanized': 'io查'})
alc.shortcut('(?i:io)(?i:配置|配|config)', {'command': 'tstats TETR.IO config', 'humanized': 'io配置'})
alc.shortcut(
'fkosk', {'command': 'tstats TETR.IO query', 'args': [''], 'fuzzy': False, 'humanized': 'An Easter egg!'}
@@ -76,4 +85,4 @@ alc.shortcut(
add_block_handlers(alc.assign('TETRIO.query'))
from . import bind, query, rank # noqa: F401, E402
from . import bind, config, query, rank # noqa: F401, E402

View File

@@ -0,0 +1,20 @@
from nonebot_plugin_alconna.uniseg import UniMessage
from nonebot_plugin_orm import async_scoped_session
from nonebot_plugin_user import User # type: ignore[import-untyped]
from sqlalchemy import select
from . import alc
from .models import TETRIOUserConfig
from .typing import Template
@alc.assign('TETRIO.config')
async def _(user: User, session: async_scoped_session, template: Template):
config = (await session.scalars(select(TETRIOUserConfig).where(TETRIOUserConfig.id == user.id))).one_or_none()
if config is None:
config = TETRIOUserConfig(id=user.id, query_template=template)
session.add(config)
else:
config.query_template = template
await session.commit()
await UniMessage('配置成功').finish()

View File

@@ -19,6 +19,7 @@ from nonebot_plugin_localstore import get_data_file # type: ignore[import-untyp
from nonebot_plugin_orm import get_session
from nonebot_plugin_session import EventSession # type: ignore[import-untyped]
from nonebot_plugin_session_orm import get_session_persist_id # type: ignore[import-untyped]
from nonebot_plugin_user import User as NBUser # type: ignore[import-untyped]
from nonebot_plugin_user import get_user # type: ignore[import-untyped]
from sqlalchemy import select
from zstandard import ZstdDecompressor
@@ -46,7 +47,7 @@ from .api.schemas.tetra_league import TetraLeagueSuccess
from .api.schemas.user_info import NeverPlayedLeague, NeverRatedLeague, RatedLeague
from .api.schemas.user_records import SoloModeRecord, UserRecordsSuccess
from .constant import GAME_TYPE, TR_MAX, TR_MIN
from .models import IORank
from .models import IORank, TETRIOUserConfig
from .typing import Template
UTC = timezone.utc
@@ -55,7 +56,8 @@ driver = get_driver()
@alc.assign('TETRIO.query')
async def _(
async def _( # noqa: PLR0913
user: NBUser,
event: Event,
matcher: Matcher,
target: At | Me,
@@ -76,6 +78,10 @@ async def _(
),
game_platform=GAME_TYPE,
)
if template is None:
template = await session.scalar(
select(TETRIOUserConfig.query_template).where(TETRIOUserConfig.id == user.id)
)
if bind is None:
await matcher.finish('未查询到绑定信息')
message = UniMessage(CANT_VERIFY_MESSAGE)
@@ -84,13 +90,18 @@ async def _(
@alc.assign('TETRIO.query')
async def _(account: Player, event_session: EventSession, template: Template | None = None):
async def _(user: NBUser, account: Player, event_session: EventSession, template: Template | None = None):
async with trigger(
session_persist_id=await get_session_persist_id(event_session),
game_platform=GAME_TYPE,
command_type='query',
command_args=[],
):
async with get_session() as session:
if template is None:
template = await session.scalar(
select(TETRIOUserConfig.query_template).where(TETRIOUserConfig.id == user.id)
)
await (await make_query_result(account, template or 'v1')).finish()