QQ消息防撤回(基于go-cqhttp)

很多时候别人消息撤回了,我们就看不到别人有意思的消息了所以,我们来写一个防撤回接口,让群里的消息无处遁寻

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

结果如下:

成功啦

### 回答1: 要用 Python 写一个基于 go-cqhttpQQ 机器人,你可以使用第三方库,如 CoolQ HTTP API 插件的 Python SDK,它封装了 go-cqhttp 提供的 HTTP API,使用起来更方便。 以下是一个简单的示例: ``` from cqhttp import CQHttp bot = CQHttp(api_root='http://127.0.0.1:5700/') @bot.on_message() def handle_msg(context): # 实现你的机器人逻辑 return {'reply': '你好,我是机器人!'} bot.run() ``` 这段代码中,我们定义了一个 handle_msg 函数来处理消息,并返回一个回复。运行这段代码后,你的机器人就会自动对收到的消息进行回复。 当然,你还可以根据需要添加更多的处理逻辑,例如:处理私聊消息,实现智能问答等。 ### 回答2: 基于go-cqhttp,使用Python编写QQ机器人可以通过与go-cqhttp插件的HTTP API进行交互来实现。 首先,将Python的requests库导入项目中,以便发送HTTP请求。 接下来,我们需要处理机器人收到的消息。通过模拟用户发送消息时,go-cqhttp发送的HTTP POST请求,我们可以使用Python的Flask框架来接收和处理这些消息。 在接收消息的路由上,我们可以使用Flask的`@app.route('/message')`来定义一个路由函数。在这个函数中,我们可以提取出消息中的关键信息,例如发送者QQ号码、发送的消息内容等。 接下来,我们可以使用条件语句对接收到的消息进行分类处理。例如,我们可以根据关键字回复不同的内容,或者调用外部API来进行一些其他操作。可以根据情况,编写不同的函数作为消息处理器。 在处理完消息后,我们需要将最终的回复发送给发送者。我们可以通过构造一个回复消息的字典,并将其转化为JSON格式,然后使用requests库发送POST请求到你自己的go-cqhttp插件上的HTTP API。 最后,我们可以利用go-cqhttp插件的事件上报功能,来处理一些其他的事件。例如好友申请、群聊消息等。 总结起来,基于go-cqhttp,用Python写一个QQ机器人可以通过与go-cqhttp插件的HTTP API进行交互,处理接收的消息和事件,并根据需要编写不同的函数作为消息处理器、事件处理器。最后,将回复消息发送给发送者。通过这些步骤,我们可以实现一个简单的QQ机器人。 ### 回答3: 基于go-cqhttp,我们可以使用Python来编写一个QQ机器人。首先,我们需要使用Python的 requests 库与go-cqhttp建立通信。 首先,我们需要在go-cqhttp的配置文件中开启HTTP、WS(WebSocket)接口。然后,我们可以使用python的requests库向go-cqhttp发送HTTP请求来完成一些操作,例如发送私聊消息: ```python import requests url = "http://127.0.0.1:5700/send_private_msg" data = { "user_id": 你的QQ号, "message": "Hello, World!" } response = requests.post(url, json=data) ``` 这将向你的QQ号发送私聊消息"Hello, World!"。 然后,我们可以使用Python来监听go-cqhttp发送给QQ机器人的消息,这里我们可以使用WebSocket连接进行实时通信。我们可以使用Python的websocket库来实现WebSocket通信: ```python import websocket def on_message(ws, message): print(message) def on_error(ws, error): print(error) def on_close(ws): print("连接已关闭") def on_open(ws): print("连接已打开") # 创建WebSocket连接对象 ws = websocket.WebSocketApp("ws://127.0.0.1:6700") # 绑定回调函数 ws.on_message = on_message ws.on_error = on_error ws.on_close = on_close ws.on_open = on_open # 开始监听消息 ws.run_forever() ``` 这将打开一个WebSocket连接,接收go-cqhttp发送给QQ机器人的消息,并将其打印出来。 当然,以上只是一个简单的例子,对于一个完整的QQ机器人,我们还可以做很多其他的操作,例如发送群聊消息、处理命令、响应事件等等。这些操作都可以通过向go-cqhttp发送HTTP请求来实现。 综上所述,使用Python编写一个基于go-cqhttpQQ机器人是十分可行的,我们可以利用Python提供的各种库与go-cqhttp进行通信,实现丰富的功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值