SK-415 / HarukaBot

将 B 站的动态和直播信息推送至 QQ,基于 NoneBot2 开发
https://haruka-bot.sk415.icu
GNU Affero General Public License v3.0
831 stars 109 forks source link

【功能建议】使机器人自己发送的消息也能触发功能 #343

Closed Dradows closed 1 year ago

Dradows commented 1 year ago

HarukaBot 版本

v1.5.3.post2

功能建议

已经打开了go-cqhttp的report-self-message,harukabot的日志里也接收到了消息,但并不会处理。虽然这应该是出于安全考虑,为了避免死循环做出的选择,如果能指出怎么修改代码或配置能让机器人自己发送的消息也能触发功能的话感激不尽

这是go-cqhttp的日志 [2023-03-27 05:58:39] [INFO]: 收到群 XXX 内 用户1(xxx)的消息: 帮助 (-294283545) [2023-03-27 05:58:42] [INFO]: 收到群 XXX 内 BOT(xxxx) 的消息: 帮助 (8124363)

这是harukabot的日志 03-27 05:58:39 [SUCCESS] nonebot | OneBot V11 xxxx| [message.group.normal]: Message -294283545 from 用户1@[群:XXX] '帮助' 03-27 05:58:42 [SUCCESS] nonebot | OneBot V11 xxxx| [message_sent]: {'time': 1679867922, 'self_id': xxxx, 'post_type': 'message_sent', 'raw_message': '帮助', 'message_id': 8124363, 'user_id': xxxx, 'group_id': XXX, 'anonymous': None, 'sub_type': 'normal', 'sender': {'age': 0, 'area': '', 'card': '', 'level': '', 'nickname': 'BOT', 'role': 'admin', 'sex': 'unknown', 'title': '', 'user_id': xxxx}, 'font': 0, 'message_seq': 1433, 'message_type': 'group', 'message': '帮助'}

额外信息(可选)

No response

SK-415 commented 1 year ago

从你的日志和 go-cqhttp 文档中都能看到。正常的消息上报类型都是 message,而 gocq 自身的消息上报类型是 message_sent,这不是一个 OneBot11 的标准上报类型。这也是 gocq 出于安全考虑故意设计的,这样标准的 Onebot11 适配器会自动忽略自身上报消息,避免 bot 没有适配导致混乱。我个人也比较反感人机一体自问自答,所以没做适配。

如果要解决,可能需要把 hb 用到的所有消息事件如 GroupMessageEventPrivateMessageEvent 等,全部做一个 post_typemessage_sent 的版本然后放入 hb matcher 的 handler 里确保能匹配到自身上报事件。或者通过 Nonebot2 的 钩子函数 对接收到的事件进行预处理,替换成符合 OneBot11 标准的事件后再分发。

这个要适配还是比较麻烦的,这也是 hb 没适配的原因之一。上面这些仅做抛砖引玉,如果想自己魔改的话可以查阅上面提到的框架和协议的文档以及源码。我群里面也有人魔改了这个功能,也可以加群找他探讨。