Files
nonebot-plugin-tetris-stats/nonebot_plugin_tetris_stats/games/tetrio/__init__.py

167 lines
4.2 KiB
Python

from arclet.alconna import Arg, ArgFlag, Args, Option, Subcommand
from nonebot_plugin_alconna import At
from ...utils.exception import MessageFormatError
from ...utils.typing import Me
from .. import add_block_handlers, alc
from .api import Player
from .api.typing import ValidRank
from .constant import USER_ID, USER_NAME
from .typing import Template
def get_player(user_id_or_name: str) -> Player | MessageFormatError:
if USER_ID.match(user_id_or_name):
return Player(user_id=user_id_or_name, trust=True)
if USER_NAME.match(user_id_or_name):
return Player(user_name=user_id_or_name, trust=True)
return MessageFormatError('用户名/ID不合法')
alc.command.add(
Subcommand(
'TETR.IO',
Subcommand(
'bind',
Args(
Arg(
'account',
get_player,
notice='TETR.IO 用户名 / ID',
flags=[ArgFlag.HIDDEN],
)
),
help_text='绑定 TETR.IO 账号',
),
Subcommand(
'query',
Args(
Arg(
'target',
At | Me,
notice='@想要查询的人 / 自己',
flags=[ArgFlag.HIDDEN, ArgFlag.OPTIONAL],
),
Arg(
'account',
get_player,
notice='TETR.IO 用户名 / ID',
flags=[ArgFlag.HIDDEN, ArgFlag.OPTIONAL],
),
),
Option(
'--template',
Arg('template', Template),
alias=['-T'],
help_text='要使用的查询模板',
),
help_text='查询 TETR.IO 游戏信息',
),
Subcommand(
'record',
Option(
'--40l',
dest='sprint',
),
Option(
'--blitz',
dest='blitz',
),
Args(
Arg(
'target',
At | Me,
notice='@想要查询的人 / 自己',
flags=[ArgFlag.HIDDEN, ArgFlag.OPTIONAL],
),
Arg(
'account',
get_player,
notice='TETR.IO 用户名 / ID',
flags=[ArgFlag.HIDDEN, ArgFlag.OPTIONAL],
),
),
),
Subcommand(
'rank',
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:记录|record)(?i:40l)',
{
'command': 'tstats TETR.IO record --40l',
'humanized': 'io记录40l',
},
)
alc.shortcut(
'(?i:io)(?i:记录|record)(?i:blitz)',
{
'command': 'tstats TETR.IO record --blitz',
'humanized': 'io记录blitz',
},
)
alc.shortcut(
'(?i:io)(?i:段位|段|rank)',
{
'command': 'tstats TETR.IO rank',
'humanized': 'iorank',
},
)
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!',
},
)
add_block_handlers(alc.assign('TETRIO.query'))
from . import bind, config, query, rank, record # noqa: E402
__all__ = [
'bind',
'config',
'query',
'rank',
'record',
]