feat(command): 添加监听范围过滤和回复 @控制

- 新增 COMMAND_SCOPE 配置,支持 all/group/private 过滤消息来源
- 新增 COMMAND_ALLOWED_GROUPS 群号白名单,逗号分隔,留空不限制
- 新增 COMMAND_ALLOWED_USERS QQ 号白名单,逗号分隔,留空不限制
- 新增 COMMAND_AT_SENDER 配置,控制回复时是否 @发送者(默认 true)
- 回调响应中 at_sender 字段可覆盖全局配置
- 更新 .env.example 和 README.md 文档
This commit is contained in:
2026-05-03 00:01:10 +08:00
parent 84f671741b
commit ed6e27f162
5 changed files with 98 additions and 17 deletions

View File

@@ -4,7 +4,7 @@ import re
import aiohttp
from ..config import COMMAND_CALLBACK_TIMEOUT, COMMAND_CALLBACK_URL, COMMAND_LENGTH_MAX, COMMAND_LENGTH_MIN, COMMAND_PREFIX, UPLOAD_DIR
from ..config import COMMAND_AT_SENDER, COMMAND_CALLBACK_TIMEOUT, COMMAND_CALLBACK_URL, COMMAND_LENGTH_MAX, COMMAND_LENGTH_MIN, COMMAND_PREFIX, UPLOAD_DIR
from ..handlers.message import _resolve_url
@@ -50,7 +50,7 @@ async def send_command_callback(data: dict, event, api, logger) -> None:
{"type": "file", "url": "..."},
{"type": "video", "url": "..."}
],
"at_sender": true // 是否 @发送者(默认 true,仅群聊)
"at_sender": true // 是否 @发送者(默认取 COMMAND_AT_SENDER 配置,仅群聊)
}
所有字段均为可选,无回复内容时返回空 JSON 即可。
@@ -92,7 +92,8 @@ async def send_command_callback(data: dict, event, api, logger) -> None:
async def _handle_reply(result: dict, msg_event, api, logger) -> None:
"""处理回调响应引用原消息自动回复。msg_event 是 GroupMessageEvent / PrivateMessageEvent。"""
at_sender = result.get("at_sender", True)
# at_sender: 回调响应中的值优先,未指定则使用全局配置
at_sender = result.get("at_sender", COMMAND_AT_SENDER)
messages = result.get("messages")
reply = result.get("reply")
group_id = getattr(msg_event, "group_id", None)