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)
    } 
}

结果如下:

成功啦

本文标签: 消息qqcqhttp