"""`/bft` 及全部别名:命令注册 + 结果发送。""" from nonebot import on_command from nonebot.adapters import Event, Message from nonebot.log import logger from nonebot.matcher import Matcher from nonebot.params import CommandArg from nonebot.rule import to_me from nonebot_plugin_alconna import UniMessage from hexi.core.cooldown import cooldown from ..services.query import run_query # 群冷却 10s(全群共享,私聊退化为按用户);显式 name 保证热重载后 CD 不重置 query = cooldown( 10, scope="group", name="bf_query", hint="查询太频繁了,{secs} 秒后再试", )( on_command( "bft", rule=to_me(), aliases={"bf3", "bf4", "bfv", "bf1", "bf2042", "bf6"}, block=True, ) ) @query.handle() async def handle_query(matcher: Matcher, event: Event, msg: Message = CommandArg()): # 实际输入的游戏别名(去掉 COMMAND_START 后的首段)决定走哪个游戏分支 prefix = matcher.state.get("_prefix") or {} cmd = (prefix.get("command") or ["bft"])[0] input_text = msg.extract_plain_text().strip() user_id = event.get_user_id() logger.info(f"BF查询:cmd={cmd!r}, input={input_text!r}") async def notify(text: str) -> None: await UniMessage.text(text).send() reply = await run_query( cmd=cmd, input_text=input_text, qq_id=user_id, notify=notify ) if reply.image is not None: await ( UniMessage.image(raw=reply.image) .at(user_id=user_id) .text(reply.text) .send() ) else: await UniMessage.at(user_id=user_id).text(reply.text).send()