AstrBot 消息撤回取消插件
作者: 木有知
仓库: https://github.com/muyouzhi6/astrbot_plugin_recall_cancel
版本: v1.2.0
标签: 消息管理 | 撤回处理 | LLM控制 | 用户体验 | 自动化
📋 功能说明
当用户撤回触发 LLM 回应的消息时,如果 LLM 的回复还没发送出去,插件会自动取消发送。
解决场景:
- 🚫 用户发错消息后撤回,但机器人仍然回复
- 🛡️ 防止恶意用户发送大量消息后撤回导致的资源浪费
- ⚡ 提升用户体验,避免无效回复
🔧 工作原理
- 📝 跟踪 LLM 请求:监听 LLM 请求开始,记录消息 ID 和相关信息
- 👂 监听撤回事件:实时监听 QQ 平台的消息撤回通知事件
- ❌ 智能取消:检测到原消息被撤回时,如果 LLM 响应还未发送则取消
- 🧹 自动清理:定期清理过期记录,防止内存泄漏
🔌 支持平台
| 平台 | 状态 | 说明 |
|---|---|---|
| QQ (OneBot V11/NapCat) | ✅ 支持 | 完整支持群聊和私聊撤回检测 |
| Telegram | ❌ 不支持 | Telegram 撤回消息后无法获得原消息 ID |
| QQ 官方 | ❌ 不支持 | 官方 API 暂不提供撤回事件通知 |
⚙️ 配置
本插件开箱即用,无需任何配置,安装后自动生效。
🧪 调试与测试
状态查询指令
- 发送
recall_status或撤回状态:查看插件运行状态 - 显示信息:待处理 LLM 请求数量、已撤回消息数量、清理任务状态
功能测试步骤
- 环境确认:确保 QQ 客户端(如 NapCat)已正确连接
- 触发测试:发送能触发 LLM 回复的消息(如
你好) - 执行撤回:在 LLM 回复发送前快速撤回原消息
- 观察结果:确认 AstrBot 停止发送回复
- 状态验证:使用
recall_status查看插件工作状态
🔬 技术细节
实现架构
- 事件钩子:使用
on_llm_request和on_llm_response跟踪 LLM 处理流程 - 平台适配:专门处理 aiocqhttp 平台的 OneBot V11 撤回事件
- 多层检测:在响应、装饰、发送多个阶段进行撤回检查
- 高优先级:确保撤回事件能及时处理,避免竞争条件
性能优化
- 内存管理:定期清理过期记录(LLM 请求 10 分钟,撤回记录 1000 条限制)
- 异步处理:所有操作均为异步,不阻塞主流程
- 智能清理:仅在必要时进行清理,减少系统开销
📚 版本历史
v1.0.0 (2025-09-03)
- 🎉 初始发布:完整的消息撤回取消功能
- ✅ QQ 支持:支持 OneBot V11 标准的群聊和私聊撤回检测
- 🔄 智能取消:多层检测机制确保 LLM 响应准确取消
- 🧹 自动清理:内置内存管理,防止长期运行内存泄漏
- 🛠️ 调试功能:提供状态查询指令便于故障排查
💡 提示:插件遵循 AstrBot 开发规范,代码经过严格测试,可放心使用。