基于go-cqhttp搭建的qq机器人

碎碎念:

最近想搭个机器人给自己发消息提醒的,本来想做微信的,结果尝试了好久,从itchat、wxpy到PyOfficeRobot(itchat和wxpy都是基于网页版微信进行登录的,现在已经被微信限制了,我说怎么按照别人的教程总是出问题呢,然后找到PyOfficeRobot就几行代码就能实现自动发送消息,但是问题总比办法多,PyOfficeRobot的微信机器人不支持mac的,原因:为什么 python-office自动化办公 不支持 mac 和 linux 系统?,哭泣!)算了,还是做qq的机器人吧

在做qq机器人的时候也遇到了很多问题,但是总算小阶段的成功了。这次做这个机器人完全是小白,全靠的搜索网上的教程一步步进行的,而且大部分教程都是基于windows的,mac的几乎找不到,其中也遇到了很多问题,以下纪录一下遇到的问题,希望能帮助到有需要的人,也算是复盘一下。

我是本地搭建,Mac的m1芯片。

1.下载go-cqhttp

Releases · Mrs4s/go-cqhttp · GitHub

在GitHub上下载对应的版本并解压,我下载的是 go-cqhttp_darwin_amd64.tar.gz(Intel和m1版可用)

2.运行go-cqhttp

2.1 生成配置

进入到解压后的go-cqhttp文件夹下,运行./go-cqhttp,选择通信方式,选0即可。(我已经生成了,就不会再生成了,截取的是别人教程里的图片)

运行后会生成config.yml文件。

2.2 修改配置

打开config.yml,有几处地方需要修改:

1.填写你的QQ号和密码,我这边直接填的密码,好像是扫码登录有问题

2.取消注释,其为用来监听消息的路由,后面我们使用flask,开启该路由,来使得qq的消息可以传入后台,使我们可以处理

3.填写签名服务器(好像现在的都需要签名服务器,不然会报登录45的错误)

可以自己搭建也可以使用线上别人搭建的,建议自己搭建,别人搭建的存在潜在风险,也可能容易被封号,而且使用他人搭建的会别人是能知道你的帐号给谁发了消息,什么时候发了什么消息。注重隐私!还是自己搭建吧!

ps:一般的教程就到这边重新运行./go-cqhttp了就可以顺利登录监听了,然而,我遇到了问题:

登录失败,code:45,你的账号被限制登录, 请配置 SignServer 后重试

这边就是因为签名服务器没有部署,当sign-server填的是http://127.0.0.1:8080时我们需要在本地搭建签名服务器。

3.搭建qsign签名服务器

3.1 下载qsign

下载地址:

https://github.com/fuqiuluo/unidbg-fetch-qsign/releases/download/1.1.0/unidbg-fetch-qsign-1.1.0.zip

或  https://ghproxy.com/github.com/fuqiuluo/unidbg-fetch-qsign/releases/download/1.1.0/unidbg-fetch-qsign-1.1.0.zip

解压后放到你想放的位置即可,注意版本,暂不支持最新版qsign服务(可用v1.1.0)

3.2 下载txlib

下载地址:

https://ghproxy.com/raw.githubusercontent.com/MoYoez/moyoez.github.io/main/txlib.zip 

下载后,解压放到qsign的文件里

3.3 启动程序

1.看看go-cqhttp的文件夹下有没有device.json,没有的话重新运行一下./go-cqhttp

2.打开device.json,找到android_id对应的值

3.运行,在qsign文件下,进入终端,输入:

./bin/unidbg-fetch-qsign --host=127.0.0.1 --port=8080  --count=1 --library=txlib/8.9.63  --android_id=xxx

其中:

xxx对应device.json的android_id的值,每个的id是不一样的;

txlib/8.9.63是txlib下的对应的版本,按照之前的链接下载就有8.9.63,可以对应版本调节;

count表示最大连接数。

不出意外的话就能够运行起qsin服务了。

注意:1.需要提前处理好java环境。2.对应好版本,否则可能会有问题。3.“/”和“\”在mac和windows上的区别,不要写反了

附上windows和Linux的搭建教程,均为搜索到的教程,未亲验。

1.windows

步骤与前面的相同,运行语句时有些不同

cmd 到qsign目录下

.\bin\unidbg-fetch-qsign.bat --host=127.0.0.1 --port=8080  --count=1 --library=txlib\8.9.63  --android_id=xxx

2.linux

安装和启动docker

# 下载docker安装脚本,一键安装
curl -fsSL https://get.docker.com -o get-docker.sh
bash get-docker.sh

# 启动docker服务
systemctl start docker

# 查看docker状态,是否正常启动
service docker status

实例化qsign的docker镜像

# 开放防火墙端口(用docker默认的8080)
firewall-cmd --permanent --add-port=8080/tcp
# 重载防火墙
firewall-cmd --reload

# 运行docker
docker run -d --restart=always --name qsign -p 8080:8080 -e ANDROID_ID=d9b3a88f3cd1f951 xzhouqd/qsign:8.9.63

# 检查运行是否成功,访问主机端口没有报错就行
curl localhost:8080

之前因为搜索不到mac的相关教程,我也有尝试使用docker的方式部署,但是不知道为什么一直启动失败然后一直在重启服务,由于本地打开docker比较占内存,我一直不太想使用这个方式部署qsign服务,后边也没有去看问题解决问题。

4.重新运行go-cqhttp

运行./go-cqhttp,这时候不出意外的话,go-cqhttp就能顺利运行起来了,注意启动qsign服务的窗口不要关闭。

5.接收发送的消息/主动发消息

这边使用的是python,下边的代码是接收消息

from flask import Flask, request
import api

app = Flask(__name__)
@app.route('/', methods=["POST"])
def post_data():
    '下面的request.get_json().get......是用来获取关键字的值用的,关键字参考上面代码段的数据格式'
    if request.get_json().get('message_type')=='private':# 如果是私聊信息
        uid = request.get_json().get('sender').get('user_id') # 获取信息发送者的 QQ号码
        message = request.get_json().get('raw_message') # 获取原始信息
        print("个人" + uid + "发送信息:" + message)

    if request.get_json().get('message_type')=='group':# 如果是群聊信息
        gid = request.get_json().get('group_id') # 获取群号
        uid = request.get_json().get('sender').get('user_id') # 获取信息发送者的 QQ号码
        message = request.get_json().get('raw_message') # 获取原始信息
        print("群聊" + gid + "的" + uid + "发送信息:" + message)

    return 'OK'

if __name__ == '__main__':
    app.run(debug=True, host='127.0.0.1', port=5701)# 此处的 host和 port对应上面 yml文件的设置

到目前为止,接管消息的机器人就小阶段的完成了,一路遇到的坑实在是太太多了,基本走一步就遇到好些问题,中途都想放弃不弄了,还好最后也基本能对接上了,当克服了种种问题之后弄出来后还是很开心的。后续可能也会有新改动导致其他的问题,目前至2023.09.27按照以上步骤操作还是能做出来的。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要用 Python 写一个基于 go-cqhttp 的 QQ 机器人,你可以使用第三方库,如 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进行通信,实现丰富的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值