Python 定制QQ机器人
前两天见有同学写QQ机器人用于每天代为疫情打卡,感觉是挺方便的,但有违学校规定,后被迫停止了,遂自己写了脚本挂服务器,然后感觉这个机器人挺有趣,小小研究了下
安装 酷Q on Docker
酷Q原是Windows上的项目,不过官方基于Docker和Wine技术,也推出了酷Q Docker版
下载镜像
1 | docker pull coolq/wine-coolq |
下载后,在任意目录创建一个空文件夹,用于持久化存放 酷Q 数据
1 | mkdir /root/coolq-data |
运行 酷Q 镜像,后面要登录的QQ帐号和VNC密码自行设置
1 | docker run --name=coolq -d -p 8080:9000 -v /root/coolq-data:/home/user/coolq -e VNC_PASSWD=password -e COOLQ_ACCOUNT=username coolq/wine-coolq |

访问vps服务所在端口,输入之前设置的密码

登录QQ小号,提示收到交互式网页验证码,但又看不见验证码,点拒绝,多尝试几次登录就OK了

Python实现交互
用到插件coolq-http-api,其通过 HTTP 或 WebSocket 对酷 Q 的事件进行上报以及接收请求来调用酷 Q 的 DLL 接口,从而可以使用其它语言编写酷 Q 插件。支持 Windows 7 和 Windows Server 2008 及更新版本,也可以运行在 Wine、Docker
还有CQHTTP Python SDK,其为 CQHTTP 插件的 Python SDK,封装了 web server 相关的代码,让使用 Python 的开发者能方便地开发插件
安装CoolQ HTTP API 插件
直接到 Releases 下载最新的 cpk 文件放到 酷Q 的 app 文件夹

重载应用后启用CQHTTP

然后讲道理这里应该会有日志回显的,但是没有,不明原因

那么直接在宿主机测试该插件是否生效

发现5700端口的确开放,说明插件已经正在运行了,测试下发送消息的api,user_id为QQ号
1 | curl "http://172.17.0.2:5700/send_private_msg?user_id=1729888211&message=test" |


能收到消息表明已经正常工作了
目前能用http -api发送消息,还需要接收酷Q收到的消息才行,配置文件在 酷Q 的 data\app\io.github.richardchien.coolqhttpapi\config
文件夹中,文件名为 <user_id>.json
(<user_id>
为登录的 QQ 号)

酷Q 收到的消息、事件会被 POST 到配置文件中指定的 post_url
,为空则不上报
那么修改post_url,暂时我先设置为宿主机的内网ip,端口5701

重启下应用,宿主机监听5701端口,然后发给机器人一条消息


5701端口收到POST传递过来的消息即说明功能正常

CQHTTP Python SDK
我打算也安装在Docker中
下载Python镜像
~~docker pull python~~~
突然想起来 酷Q on Docker 中就有Python环境,那还是放在一起好了
进入VNC右键桌面打开控制台

安装pip先
1 | wget https://bootstrap.pypa.io/get-pip.py |
emm,报错

解决方法
1 | apt-get install python3-distutils |

提示权限不够,可我也不知root的密码,那在宿主机进入docker并修改密码
1 | docker exec -ti d6c bash |

进入VNC切换为root用户并安装python3-distutils,然后就可以安装pip了
1 | su root |
接着直接用pip安装cqhttp
包
1 | python3 -m pip install cqhttp |
然后新建 Python 文件,运行 bot
1 | from cqhttp import CQHttp |
之前已经将docker和宿主机的/root/coolq-data目录挂载了,python文件传到这里就可


还要修改下CoolQ HTTP API 配置并重启应用

测试如下
