54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
"""`/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()
|