admin管理员组文章数量:1640519
很多时候别人消息撤回了,我们就看不到别人有意思的消息了所以,我们来写一个防撤回接口,让群里的消息无处遁寻
1 首先我们看到api接口,这个重要!!!!
2 我们在去查看消息体
*私人聊天撤回
{"post_type":"notice","notice_type":"friend_recall","time":1676811122,"self_id":2673893724,"message_id":-319033038,"user_id":3096407768}
* 群聊天撤回
{"post_type":"notice","notice_type":"group_recall","time":1676809270,"self_id":2673893724
group_id":682671449,"user_id":3096407768,"operator_id":3096407768,"message_id":-1460439864}
我们发现私人消息和群聊消息的notice_typ不同,operator_id和user_id相同时就是群成员自己撤回的消息,如果不同,就是管理员撤回的,operator_id就是操作者的id,因此在群聊operator_id和user_id相同就是群成员自己撤回的,
if (notice_type === "group_recall" && operator_id === user_id)
私人聊天
else if (notice_type === "friend_recall")
所以我们群成员撤回的消息时我们需要把message_id拿到
3.我们封装一个函数请求/get_msg接口,拿到消息
//此函数是根据message_id获取消息,用于撤回消息查询
exports.getmessage = async (types, message_id, id) => {
try {
const res = axios({
url: "http://127.0.0.1:5000/get_msg",
method: "get",
params: {
message_id
}
})
return res
} catch (e) {
await Sendmessage.SendMessage(types, `获取撤回消息出错了:${e}`, id)
return ""
}
}
4 /get_msg接口 需要我们的message_id,就是我们每条消息id,我们需要获取每条消息,我们拿到message_id就可以拿到撤回的数据、
开始写逻辑
传入 notice_type, operator_id, message_id, user_id, group_id四个参数
//防撤回
exports.banrecall = async ({notice_type, operator_id, message_id, user_id, group_id}) => {
if (notice_type === "group_recall" && operator_id === user_id) {
const message1 = await getmessage.getmessage("group", message_id, user_id)
await SendMessage.SendMessage("group", `[CQ:at,qq=${user_id}]撤回消息:\n ${message1.data.data.message}`, user_id)
} else if (notice_type === "friend_recall") {
const message2 = await getmessage.getmessage("private", message_id, user_id)
await SendMessage.SendMessage("private", `[CQ:at,qq=${user_id}]撤回消息:\n${message2.data.data.message}`, user_id)
}
}
结果如下:
成功啦
版权声明:本文标题:QQ消息防撤回(基于go-cqhttp) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1729305800a1195044.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论