对于自定义开发QQ机器人的需求
之前写项目的时候有一个需求,就是要保持数据库中和QQ群中人员一致,也就是说从数据库里面删人的时候,QQ群里面也要对应踢出群聊。
听到这个需求,我一下子就想到了我从初中就开始接触的QQ机器人。
第三方QQ机器人环境变化
当年酷Q的机器人是非常好用的,我也用过一些点歌插件、自动回复插件以及一些管理群的插件。这些第三方的机器人功能非常强大,不知道比现在QQ官方的机器人功能多到那里去了,而且还能根据自己的需求开发。
只可惜,前几个月TX对这些第三方机器人进行封杀,不仅是酷Q,其它很多机器人框架都凉了。
选择了go-cqhttp
在这种环境背景下,我调查了很多现有机器人,其中有很多都是使用的小栗子框架。然而这个框架新版收费,老版功能虽说也很强大,但是不满足我的需求。于是,我看向了cqhttp。
简单易上手的初步配置
本来以为这种框架没个一两天搞不会,没想到不到1个小时就测试好了,确实轻量好用!
官网的教程也写的非常清楚:go-cqhttp 帮助中心
windows环境下就更加简单了,直接下载打开,改配置文件,再打开就能用了,
下面讲一下Linux环境下的使用:
1.到github下载对应的release包。我下载的是go-cqhttp_linux_amd64.tar.gz
2.找一个合适的地方解压缩。这东西下载好之后用FTP工具传上去,然后在SSH中输入命令解压就行了。
tar -xjf go-cqhttp_linux_amd64.tar.gz
3.解压之后cd到对应路径,然后直接运行go-cqhttp即可
./go-cqhttp
之后和windows一样,写配置文件,再进入。
要注意的是,如果要允许外面访问服务器的话,需要把host改为0.0.0.0 端口不要和现有端口冲突
然后在宝塔面板、阿里云安全组等地方把这个端口放行,这样就能随时随地访问了。
还有一点,直接这样运行的,ssh会话关闭时程序也会关闭,于是可以使用nohup命令,让它在后台运行
nohup ./go-cqhttp
这样关闭SSH会话,go-cqhttp也能处于一直运行的状态。
关闭后台应用的方法:
[root@nyan]# ps -aux | grep go-cqhttp
root 13812 0.0 1.3 730020 50556 ? Sl Jul17 3:15 ./go-cqhttp
root 21397 0.0 0.0 112816 968 pts/0 S+ 09:13 0:00 grep --color=auto go-cqhttp
[root@nyan]# kill 13812
使用Python完善功能
看标题应该直到,我是使用Python进行自定义开发的。
cqhttp是基于http协议的,也就是说所有的指令都通过http来进行传输。
这样,我使用了requests模块,来实现我的指令。
比如:
url = 'host:port/send_private_msg?user_id=1066168689&message=好欸'
requests.get(url)
这样我的机器人就给我发了一个好欸。
靠这种方法,我简单实现了一个根据群名片自动踢人。
用到了两个指令,一个是获取群成员列表,可以通过这个列表获取到群里每一个成员的群名片(cart)和qq号(user_id)对应的信息,第二个就是从群里踢人的命令,这个命令必须使用qq号进行操作。
于是,我就很顺利的完成了这个功能。
POST消息上报
cqhttp的POST上报采用json格式,包括收到消息、心跳等类型。
可以在cqhttp的配置文件里面这样写:
# 连接服务列表 servers: # 添加方式,同一连接方式可添加多个,具体配置说明请查看文档 #- http: # http 通信 #- ws: # 正向 Websocket #- ws-reverse: # 反向 Websocket #- pprof: #性能分析服务器 # HTTP 通信设置 - http: # 服务端监听地址 host: 0.0.0.0 # 服务端监听端口 port: 端口号 # 反向HTTP超时时间, 单位秒 # 最小值为5,小于5将会忽略本项设置 timeout: 10 middlewares: <<: *default # 引用默认中间件 # 反向HTTP POST地址列表 post: - url: 'https://你机器人会上报的地址' # 地址 # secret: '' # 密钥 #- url: 127.0.0.1:2223 # 地址 # secret: '' # 密钥
我打印了一下Django收到的请求的body,得到了以下结果:
b'{"font":0,"message":"\xe5\x96\xb5","message_id":-1338703603,"message_type":"private","post_type":"message","raw_message":"\xe5\x96\xb5","self_id":2473457354,"sender":{"age":0,"nickname":"\xe8\xb5\xb5\xe8\x8b\xa6\xe7\x93\x9c","sex":"unknown","user_id":1066168689},"sub_type":"friend","target_id":2473457354,"time":1631032386,"user_id":1066168689}\n'
可以看到是一段二进制文本。
可以先将其使用utf-8解码,然后去掉尾部的换行符,得到json文本。
再使用json库的loads方法转换成dict就可以直接使用了。
{ "font":0, "message":"喵", "message_id":-1338703603, "message_type":"private", "post_type":"message", "raw_message":"喵", "self_id":2473457354, "sender":{ "age":0, "nickname":"赵苦瓜", "sex":"unknown", "user_id":1066168689 }, "sub_type":"friend", "target_id":2473457354, "time":1631032386, "user_id":1066168689 }
详细开发进行中。。。
本文地址:https://blog.jixiaob.cn/?post=62
版权声明:若无注明,本文皆为“赵苦瓜のBlog~”原创,转载请保留文章出处。