使用chatgpt-mirai-qq-bot在服务器部署go-cqhttp chatGPT机器人

日之朝矣

准备工作

本文在涉及到路径时,一般都会使用绝对路径,方便大家确定位置

一个空闲的QQ小号

一个ChatGPT账号的Access Token或者API key

AccessToken获取方式:首先需要自己手动登录ChatGPT,然后打开下面的链接http://chat.openai.com/api/auth/session
倒数第二个字段对应的便是accessToken
同时也要注意一下expires字段,是accessToken的过期时间,过期后需要重新登录,获取,到服务器中更改,更改方式会在下面单独列出

三个项目

https://github.com/Mrs4s/go-cqhttp qq机器人

https://github.com/fuqiuluo/unidbg-fetch-qsign 登录签名

https://chatgpt-qq.lss233.com/ ChatGPT for Bot

unidbg-fetch-qsign需要系统安装jdk或者jre,版本1.8或以上(仅1.0.3及更高版本,老版本要求jdk11)。如果报错找不到类,请尝试1.8或略靠近1.8的版本,注意环境变量的配置

ChatGPT for Bot 使用Docker-compose部署,go-cqhttp也在里面,因此go-cqhttp不用自己再部署了

根据go-cqhttp文档配置信息的sing-server部分 中可以得知,unidbg-fetch-qsign需要选择1.1.0版本(如果go-cqhttp这部分文档更新了,请按最新的文档来)

在服务器找好位置,东西放一起

1
2
3
cd /opt
mkdir qq_bot
cd qq_bot

下载地址:unidbg-fetch-qsign-1.1.0

将其解压到qq_bot文件夹中

1
unzip unidbg-fetch-qsign-1.1.0.zip -d /opt/qqbot/

配置使用 ChatGPT for Bot

打开ChatGPT for Bot 的release界面,选一个维护性更新的版本

https://github.com/lss233/chatgpt-mirai-qq-bot/releases

我们使用go-cqhttp版本的

复制一键部署命令,这里我放的是v2.5.3 - 维护性更新 的一键部署命令

1
bash -c "$(wget -O- https://gist.githubusercontent.com/lss233/2fdd75be3f0724739368d0dcd9d1367d/raw/62a790da4a391af096074b3355c2c2b7ecab3c28/chatgpt-mirai-installer-gocqhttp.sh)"

如果你的服务器有代理的话,记得开一下代理,不然容易因为网络原因导致出错

注意下,将linux的当前目录调整到准备工作中创建的qq_bot文件中,然后执行上面的一键部署命令

按照提示一步一步进行,填写作为bot的qq账号与密码,管理员qq号,以及ChatGPT的accessToken,成功后会显示如下信息

1
2
3
4
5
6
7
8
9
10
11
12
程序已被安装在 ./chatgpt-qq 下,                                                                     
以下是一些维护的注意事项:
1. 你需要先 cd ./chatgpt-qq 才能进入到程序的安装目录。
2. 你可以输入docker-compose logs -f --tail=100 来观察运行日志。
3. 修改配置文件后,使用 docker-compose restart 重启程序。
4. 使用 docker-compose pull && docker-compose up -d 命令来更新程序
如果你记不住的话,可以把上面这段文字保存到一个文件里面,需要的时候再看。
如果您遇到问题可以在这里寻找答案:
https://chatgpt-qq.lss233.com/
如果您觉得此脚本对你有帮助的话,欢迎您在爱发电支持作者。
https://afdian.net/a/lss233
再见。

出错后二次执行,会提示你需要删除一个文件夹,删掉后再次执行

为chatGPT配置代理

在服务器上搭建代理的方式我就不讲了,网上很多,我这里随便拉一个Clash Linux服务器安装详细教程

1
2
3
4
5
cd /opt/qq_bot/chatgpt-qq
vim config.cfg

# 在[[openai.accounts]]下添加自己的代理
proxy="http://127.0.0.1:1080"

注意,chatGPT-qq在Docker下运行,而代理在宿主机上搭建,这里的代理地址需要填写公网ip与端口,记得在防火墙限制下来源ip

查看日志,观察执行情况

如果当前在/opt/qq_bot目录下,需要 cd ./chatgpt-qq进入程序的安装目录,使用docker-compose logs -f --tail=100观察日志

一般情况下会在日志中看到一个链接来让你手动打开去进行滑块认证,自己打开认证后继续观察日志,如果发现

1
2
3
4
5
6
登录需要滑条验证码, 请验证后重试. 
请选择提交滑块ticket方式:
1. 自动提交
2. 手动抓取提交
请输入(1 - 2):
请前往该地址验证 -> https://captcha.go-cqhttp.org/captcha?id=.............

复制下地址,去粘贴到浏览器手动验证一下

一般到这一步仍然不行,会出现如下提示信息:

1
2
登录失败: 登录失败,请前往QQ官网im.qq.com下载最新版QQ后重试,或通过问题反馈与我们联系。 Code: 45 
你的账号被限制登录, 请配置 SignServer 后重试

这个时候我们就需要使用unidbg-fetch-qsign了

配置使用unidbg-fetch-qsign

unidbg-fetch-qsign在使用前需要准备一些东西

libQSec.so与libfekit.so

协议对应版本QQ的libQSec.solibfekit.so,go-cqhttp默认使用协议为Android Pad 8.9.63.11390

如果不去研究修改协议版本,请直接点击进入如下两个链接libfekit.so libQSec.so ,在右侧有一个小小的下载按钮,将其下载下来

需要修改的话,请参考unidbg-fetch-qsign-1.1.0

1
2
cd /opt/qq_bot/unidbg-fetch-qsign-1.1.0
mkdir -p txlib/8.9.63

将两个so文件放入txlib/8.9.63文件夹下

获取Android id

cat /opt/qq_bot/chatgpt-qq/gocqhttp/device.json

查看该文件中的android_id

1
{...,"android_id":"xxxxxxxxxxxxxxxxxxx",...}

随便找个地方记下,待会儿要用

创建启动脚本

紧接着我们在/opt/qq_bot/unidbg-fetch-qsign-1.1.0目录下创建一个启动脚本,方便自己启动

1
2
3
4
vim start.sh

## 下面是start.sh中的内容
nohup bash bin/unidbg-fetch-qsign --host=0.0.0.0 --port=8899 --count=2 --library=/opt/qq_bot/unidbg-fetch-qsign-1.1.0/txlib/8.9.63 --android_id=cb4772ac22d9ff97 >logs.log 2>&1 &
1
2
3
4
--host=监听地址
--port=你的端口
--count=unidbg实例数量 (建议等于核心数) 【数值越大并发能力越强,内存占用越大】
--library=存放核心so文件的文件夹绝对路径

执行

1
./start.sh

日志在该目录下的logs.log文件中

为go-cqhttp配置签名服务器

1
2
cd /opt/qq_bot/chatgpt-qq/gocqhttp 
vim config.yaml

在account下的sign-server下填写刚才配置的unidbg-fetch-qsign地址与端口

如果没有sign-server,可自行添加

1
2
3
4
5
6
7
8
9
10
account:
...
# 如果遇到 登录 45 错误, 或者发送信息风控的话需要填入一个服务器
# 示例:
# sign-server: 'http://127.0.0.1:8080' # 本地签名服务器
# sign-server: 'https://signserver.example.com' # 线上签名服务器
# 服务器可使用docker在本地搭建或者使用他人开放的服务
# 不建议使用公共服务器, 有封号风险
sign-server: '-'
...

如果是从前面开始按照本教程过来的,那么sign-server请填写服务器 公网ip:端口

配置签名服务器后启动ChatGPT for Bot

配置签名服务器后,重启gocqhttp的docker容器

1
2
3
4
cd /opt/qq_bot/chatgpt-qq
docker restart chatgpt-qq-gocqhttp-1
# 观察日志
docker-compose logs -f --tail=100

如果出现以下消息,请将链接复制一下,发送到手机qq,在qq消息内点击链接打开验证(浏览器不行)

1
2
3
4
5
6
账号已开启设备锁,请选择验证方式: 
1. 向手机 *********** 发送短信验证码
2. 使用手机QQ扫码验证.
请输入(1 - 2):
未检测到输入终端,自动选择2.
账号已开启设备锁,请前往 -> https://accounts.qq.com/safe/verify?........... <- 验证后重启Bot.

然后再次使用

1
2
3
docker restart chatgpt-qq-gocqhttp-1
# 观察日志
docker-compose logs -f --tail=100

重启后继续按照日志提示进行滑条验证码验证,或者其他验证,直到出现登录成功为止

如果出现

1
2
获取T544 sign时出现错误........................
获取sso sign时出现错误.............

检查下unidbg-fetch-qsign的配置和go-cqhttp的签名服务器的端口是否对应,ip是否为公网ip

你可能需要

chatGPT角色预设系统

请在部署成功后阅读ChatGPT for Bot使用文档 来发现更多好玩的东西

参考内容

  1. qsign 部署在Linux
  2. go-cqhttp帮助中心
  3. ChatGPT for Bot 使用文档
  • 标题: 使用chatgpt-mirai-qq-bot在服务器部署go-cqhttp chatGPT机器人
  • 作者: 日之朝矣
  • 创建于 : 2023-10-08 14:56:50
  • 更新于 : 2024-08-18 09:25:27
  • 链接: https://blog.rzzy.fun/2023/10/08/chatgpt-mirai-qq-bot-deploy/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论