打造属于自己的QQ群机器人

0x00 前言

8月4号最新更新:

最近没鼓捣Q群机器人,也没在意它的运行情况,今天鼓捣了一下发现连不上酷Q接口…

百度了一下,原来是腾讯为了推广自己的机器人,封杀了其他第三方机器人。。。酷Q也不幸遇难。唉!


最近对机器人产生了挺大的兴趣(主要因为两部galgame),偶然间也在一个QQ群里看到一个较为智能的机器人,所以我也想拥有一个QQ机器人,也就有了这篇博文。

#ATRI天下第一!

[宇宙没有永恒的事物,所以哀叹事物的终结也毫无意义,在迎来终结之前,怎样度过这段时间才是最重要的]

0x01 信息搜集

一番Google以后得知,由于QQ的消息都是会经过加密的,所以除非搞清楚QQ的某些协议和加密算法,不然自己去实现获取QQ的消息是有很大难度的。

又得知目前的QQ机器人大部分都是用一款名为酷Q的软件来实现的,主要是因为它通过神奇的方式搞清楚了QQ的协议。

在网页QQ(webqq,于19年3月去世)还在世的时候,它采用的是webqq协议,据说比较容易获取和发送消息。

而现在QQ采用的是smartqq协议,具体是怎样的我也不清楚,或者说即便知道了也很难理解。

既然存在有酷Q这个软件,那么就可以利用这个软件当做一个跳板来制作属于自己的机器人了。

目前的酷Q有 酷Q air酷Q pro

air版本目前免费,但是相对应的,功能就比pro少,比如一些发图片、发语音的功能就需要pro版才可以实现。

酷Q可以在Mac、Linux、Windows平台上运行,在Windows上主要是运行其exe文件,而在Mac和Linux上,则可以用docker的形式来运行酷Q,这也就意味着,酷Q可以挂到服务器上24小时运行

酷Q有它自己的社区,在社区里面可以下载到各种酷Q使用者自己开发的插件,当然有些高质量插件也是要收费的,不过还是免费、开源的插件居多。

0x02 安装酷Q

由于我打算把酷Q挂到服务器上,所以这里我下载的docker版本。

由于酷Q docker还是挺大的,我用docker的默认镜像下了许久也才下载了一小部分,所以这里先用一下docker的加速器。

使用docker镜像加速器

可以选用的加速器有网易的、阿里云的、七牛云的 等等等等…

1
2
3
4
5
网易:https://hub-mirror.c.163.com/

阿里云:https://<你的ID>.mirror.aliyuncs.com

七牛云加速器:https://reg-mirror.qiniu.com

阿里云镜像加速地址

获取到加速器地址以后修改配置文件。

1
vi /etc/docker/daemon.json

这里以使用网易加速器为例

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hub-mirror.c.163.com/"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

保存退出

重启docker服务

1
service docker restart

拉取并安装酷Q docker

1
docker pull coolq/wine-coolq #拉取酷Qdocker,时间可能会久一些

拉取成功以后输入docker images可以看到coolq/wine-coolq的实例

1
mkdir /root/coolq-data # 任意路径均可,创建一个文件夹用于存放酷Q数据

然后运行酷Q镜像,由于要安装到服务器上,所以选择后台运行的方式。

1
docker run --name=coolq -d -p 8080:9000 -p 5700:5700 -v /root/coolq-data:/home/user/coolq -e VNC_PASSWD=12345678 -e COOLQ_ACCOUNT=123456 coolq/wine-coolq
参数作用
-p 8080:9000把8080改到任意端口,用于使用浏览器连接docker的桌面
-p 5700:5700把前一个5700改成任意端口,用于连接酷Q的HTTP API
-v /root/coolq-data改成之前新建的文件夹,用于做文件夹储存位置的映射
VNC_PASSWD=12345678可以自己设置密码,用于连接docker的远程桌面
COOLQ_ACCOUNT=123456登录的机器人的QQ号

运行命令以后,当看到[CQDaemon] Started CoolQ即为运行成功。

这时候访问http://你的服务器IP:你的端口即可看到noVNC登陆,输入刚刚设置的VNC密码即可登陆VNC看到docker远程桌面。如果访问不成功的话, 可以看后面的 0x04常见问题:

然后就是登陆你的机器人QQ了

待会可能会出现这个提示

选择拒绝本次网页验证即可

登上以后可以看到自己机器人QQ的头像,会以悬浮窗的形式出现。

右键悬浮窗以后就会有各种功能,悬浮窗默认显示消息速度,也可以自行设置显示什么。

如果不小心把这个显示悬浮窗的对勾给勾掉的话,也可以通过右键点击这个蓝色的圈来替代悬浮窗。

0x03 安装插件

社区里面下载到的插件大都是cpk文件。

将下载到的插件存放于/coolq/app/文件夹内即可。

我尝试了一下自带的图灵机器人插件,对话什么的体验都挺棒,可惜只能免费体验3天。

安装CQHTTP核心插件

有一个插件名为CQHTTP,这应该算是一个核心插件吧,有了它就可以自己开发各种插件了,它提供较为全面的API,包括私聊、群聊、加好友、群踢人、群禁言等等等等…

CQHTTP下载地址

将其放到/coolq/app/文件夹以后来到docker远程桌面进行启用。

右键悬浮窗-应用管理-找到HTTP API-启用。

启用以后会在/coolq/data/app/io.github.richardchien.coolqhttpapi/config/文件夹内生成你登陆的QQ号.json文件。

编辑该文件,在"post_url"一项后面填入http://127.0.0.1:你前面设置的HTTP API的端口(默认5700)

以我前面设置的 -p 5700:5700为例,那么我填好后的形式应该为"post_url": "http://127.0.0.1:5700"

填好以后保存退出。

其API文档如下:

HTTP API文档

可以写个py脚本测试一下。

1
2
3
4
5
6
7
8
9
10
11
12
#coding:utf-8
import requests

data = {
'user_id':1125214419,
'message':'hhhhh',
'auto_escape':False
}

api_url = 'http://127.0.0.1:5700/send_private_msg'

print requests.post(api_url,data)

发现返回<Response [200]>,而且我的大号收到了来自QQ机器人的hhhhh消息,这个应该是需要加了好友才行。

其他API也可以自行测试。

不过发群聊有可能会因为刚挂到服务器,算是异地登录而失败,即便返回的也是200状态码,但依然收不到消息。

其他插件

粗略逛了逛社区,发现几个还是挺不错的免费插件

smile娱乐 插件

PIXIV查询

关注早晚安

还有挺多宠物系统、还有一些游戏系统,自行发现吧。

0x04 常见问题

浏览器中访问docker远程桌面失败

问题描述:

访问http://你的服务器IP:你的端口失败,但是通过localhost是可以正常访问的

问题解决方案:

由于通过localhost可以正常访问,说明不是部署问题,那么考虑到应该是服务器的端口是禁止访问的。

以阿里云服务器为例:可以在控制台打开对应端口,具体操作看下面参考链接

参考链接

安装好的插件在docker远程桌面显示不全

问题描述:

安装好的插件,在docker远程桌面显示不全,总是缺右侧的一部分,导致许多插件无法正常使用(无法按到如 保存配置 等按钮),把插件往左拖拽依然显示不全。

比如 smile娱乐 插件:

只能显示到这样,拖拽到左侧也依然只能显示这些。

而完整的插件界面应该是这样的。

这样就导致这个插件无法保存、无法关闭(只能靠重启docker…555)而影响了插件的正常使用。

问题解决方案:

这个问题困扰我好几天了,各种Google也无果,酷Q社区的求助帖也看了好多,也没有对应症状。。。而且酷Q社区发求助帖需要权限…

直到昨天我突发灵感,会不会和docker远程桌面的分辨率有关呢?这个远程桌面分辨率确实有点小。

按照灵感,我通过命令行的形式设置了分辨率

在docker远程桌面启动命令行

通过命令xrandr查看支持的分辨率。

然后随便选一个吧,1024×768应该就可以,不需要太大。

由于1024×768是第一个,所以xrandr -s 11来选择第一个分辨率。

设置好分辨率以后,再打开那个插件的配置界面,就能完整显示了!

0x05 写在最后

杂谈

个人觉得开发一些插件用来完善自己的机器人是非常有趣的,可能我还是爱开发更多一点吧

虽然这只是一个QQ机器人,跟ATRI这种高性能机器人还差得远呢。

但ATRI有可能是有生之年系列,或者有生之年世上已经有这样的机器人被生产制造出来了,但我可能买不起555

科技飞速发展,谁又能预料到未来是什么模样的呢?

也正是这种未知与神秘,才让生活充满了乐趣吧。

ATRI 天下第一