feat: 添加命令监听与外接回调功能 #1

Merged
zhilv merged 8 commits from test/command-listener into main 2026-05-02 21:39:18 +08:00
Owner

Summary

  • 新增命令监听功能:匹配 #命令名 格式的 QQ 消息,转发到外部回调 URL 并自动回复
  • 命令名支持中文、数字、字母等任意非空白字符,长度范围可通过 COMMAND_LENGTH_MIN / COMMAND_LENGTH_MAX 配置(默认 2~4)
  • 回调响应自动引用原消息回复到 QQ,支持纯文本和批量消息段(文本/图片/视频/文件)
  • 群聊默认 @发送者,可通过 at_sender 字段关闭
  • 支持无参数命令触发(如 #测试命令#测试命令 参数 均可)

新增配置项

环境变量 默认值 说明
COMMAND_PREFIX # 命令前缀
COMMAND_LENGTH_MIN 2 命令名最小字符数
COMMAND_LENGTH_MAX 4 命令名最大字符数
COMMAND_CALLBACK_URL 外部回调地址

Test plan

  • 发送 #测试命令 验证无参数命令触发
  • 发送 #测试命令 你好 验证带参数命令触发
  • 发送 #1a / #abc 验证数字字母命令名
  • 验证回调响应能引用原消息并回复
  • 验证 at_sender: false 时群聊不 @发送者
## Summary - 新增命令监听功能:匹配 `#命令名` 格式的 QQ 消息,转发到外部回调 URL 并自动回复 - 命令名支持中文、数字、字母等任意非空白字符,长度范围可通过 `COMMAND_LENGTH_MIN` / `COMMAND_LENGTH_MAX` 配置(默认 2~4) - 回调响应自动引用原消息回复到 QQ,支持纯文本和批量消息段(文本/图片/视频/文件) - 群聊默认 @发送者,可通过 `at_sender` 字段关闭 - 支持无参数命令触发(如 `#测试命令` 和 `#测试命令 参数` 均可) ## 新增配置项 | 环境变量 | 默认值 | 说明 | |---|---|---| | `COMMAND_PREFIX` | `#` | 命令前缀 | | `COMMAND_LENGTH_MIN` | `2` | 命令名最小字符数 | | `COMMAND_LENGTH_MAX` | `4` | 命令名最大字符数 | | `COMMAND_CALLBACK_URL` | 空 | 外部回调地址 | ## Test plan - [ ] 发送 `#测试命令` 验证无参数命令触发 - [ ] 发送 `#测试命令 你好` 验证带参数命令触发 - [ ] 发送 `#1a` / `#abc` 验证数字字母命令名 - [ ] 验证回调响应能引用原消息并回复 - [ ] 验证 `at_sender: false` 时群聊不 @发送者
zhilv added 8 commits 2026-05-02 21:39:03 +08:00
- 新增 `#四个中文字+空格` 消息匹配规则,可配置前缀和长度
- 匹配成功后 POST 到 COMMAND_CALLBACK_URL,携带命令名、内容、用户信息
- 使用 EventMixin.events() 订阅消息流,on_close 自动取消监听
- 新增配置项:COMMAND_PREFIX、COMMAND_LENGTH、COMMAND_CALLBACK_URL
- 更新 .env.example 和 README 文档
- 回调服务器可返回 reply 或 messages 字段,插件自动回复到原消息来源
- reply 为纯文本回复,messages 格式同 /webhook 接口
- 支持通过 group_id/user_id 覆盖回复目标
- 无需回复时返回空 JSON 即可
- 更新 README 文档说明回调响应格式
- 使用 event.reply() 替代手动调用 send_group/private_text
- 自动引用触发命令的原消息,回复带引用效果
- 群聊默认 @发送者,可通过 at_sender=false 关闭
- events() 返回的是 Event(data=GroupMessageEvent) 包装对象
- 改用 event.data(消息事件实体)构建回复
- 手动构建 MessageArray + add_reply 实现引用回复
- 群聊默认 @发送者,at_sender=false 可关闭
- 正则改为允许命令后无空格和内容,如 `#测试命令` 也可触发
- 命令内容为空时 content 返回空字符串而非匹配失败
- 将 COMMAND_LENGTH 拆分为 COMMAND_LENGTH_MIN 和 COMMAND_LENGTH_MAX
- 正则匹配支持 2~4 个中文字,范围通过 .env 配置
- 默认最小 2 字、最大 4 字
- 导入改为 COMMAND_LENGTH_MIN / COMMAND_LENGTH_MAX
- 启动日志适配范围格式 %d~%d
- 正则从仅匹配中文改为匹配任意非空白字符(\S)
- 中文、数字、字母、其他字符均按 1 个字符计数
- 长度范围仍由 COMMAND_LENGTH_MIN/MAX 控制
zhilv merged commit fa5d61dbfa into main 2026-05-02 21:39:18 +08:00
zhilv deleted branch test/command-listener 2026-05-02 21:48:38 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ncatbot/webhook#1