使用 go-cqhttp 在龙芯和其他平台搭建qq机器人
2021-04-02
写在前面
当无产阶级不再思考资产阶级本身的合理性,而将反对的目标局限于某几个资本家的时候,说明资本主义已经成功了。
在从 CoolQ 迁移的过程中,我第一次接触 python ,先写了最初的小白 hakuBot 来熟悉之,然后重构了它,不知道为了啥(可能希望和另一个练习 c 而编写的小白统一结构),最后还是决定走面向过程的道路。
现在我自己使用 py-hakuBot ,而 c-hakuBot 吃灰中。
py-hakuBot 除了命令外,实现了定时命令、定时消息,通过定时命令可以实现 rss 订阅等各种功能,也实现了简单的日志分级和插件权限。它其实不是一个 bot ,而是对不同 message_type 根据内容进行不同处理并返回结果或调用特定的模块。 qq 机器人只是一个应用。
使用go-cqhttp
go-cqhttp 居然都有官网了
MiraiGo 是一个移植于 Mirai 的 qq 协议 golang 实现,由于 api 非常原始(引自readme),推荐基于 go-cqhttp 开发。 go-cqhttp 则是一个兼容 OneBot-v11 绝大多数内容,并在其基础上做了扩展的 qq 第三方客户端。嘛,腾讯当然很好意思用那个 linuxqq 搪塞用户的。
部署几乎没啥技术含量,从release下载最新的适合自己平台的版本, chmod +x go-cqhttp
,然后直接运行即可。龙芯平台上需要自己编译最新版的 golang 然后编译 go-cqhttp,如果在别的机子上交叉编译:
git clone https://github.com/Mrs4s/go-cqhttp.git
cd go-cqhttp
export GOPROXY="https://goproxy.io"
CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build
关于文档,官方仓库的文档相对滞后,只附上官方仓库的文档链接。
关于配置文件,最初是json,之后改为hjson,在1.0.0-beta2改为yml。
它会自动生成配置文件,主要编辑 config.hjson
(最新改为yml), uin
是登陆的QQ号, password
是密码, access_token
是和 bot 框架通讯时的口令。我只用了http协议所以只要将 http_config
的 enabled
设为 true
即可。
另外似乎有一个引用的插件不支持mips64le,我没有太在意。
配置 hakuBot
hakuBot则只要配置 hakuCore/config.py
即可。 HOST
对应go-cqhttp "host"
; RECEIVEPORT
对应go-cqhttp "post_urls"
的端口; SENDPORT
对应go-cqhttp "port"
; TIKEN
对应go-cqhttp的 "access_token"
。
python3 main.py
运行,也可以通过脚本 ./haku.sh
运行。
配置 py-hakuBot
py-hakuBot 比较复杂,因为它并不是专职于qq机器人,但是简单配置也可以直接使用。
- 检测环境
在仓库根目录有一个 test_environment.py
, python3 test_environment.py
来检测环境是否包含了全部所需包。嘛,暂时没有考虑啥自动化的依赖配置,所以通过这个只有 import
的脚本来检查环境是否符合吧。
- 首次运行
一些文件在仓库中是不存在的,需要通过首次运行自动生成。通过 python3 main.py
来运行小白。
- 配置
首次运行后你会发现多出一个 files
目录。其中 keys.json 和 config.json 是两个初始的配置文件,其中 config.json 是必须编辑的, keys.json 可以按需要加入新值。 keys.json 的作用是:某些 api 可能需要密钥来访问,可以将密钥存在 keys.json 中,而不是直接写在 python 源码里。
config.json 中 server_config
的前四个配置字段和 go-cqhttp 的 http_config
部分互相对应: listen_host
对应go-cqhttp post_urls
的地址; listen_port
对应go-cqhttp post_urls
的端口; post_url
对应go-cqhttp host
和 port
; access_token
对应go-cqhttp的 access_token
。 其他四个中 threads
和 processes
保持默认即可, log_level
和 console_log_level
为日志等级,其分级和 logging 模块的分级一模一样,前者是日志文件的等级,后者是终端打印的等级。
config.json 中 haku_config
则和小白运行本身有关, index
是命令前缀,另外两个 admin_qq
和 admin_group
是某些情况下出现致命错误时,错误上报接口发送信息的 qq 和 qq群 目标。
完成这部分,大部分功能应该可以正常运行了。
- 定时任务
以 rss 为例。
rss订阅需要定时任务的支持,在 files 下的 csv 目录下应该可以看到 meta_event.regular_commands.csv 文件,第一行是“command,interval”,第二行添加“.rss send,15”,其中“interval”是以分钟为单位的,不允许低于1。
- 插件权限
插件权限文件在 files 下的 json 目录,以“plugins.message” 开头,前四个配置分别表示了qq号和群的白名单和黑名单,白名单和黑名单不能同时配置,否则每个id必须同时符合白名单和黑名单,可能出现奇怪的问题。 no_error_msg
的作用在于,如果插件调用被判断为“没有权限”,那么小白会转而调用一个特殊的插件 auth_failed.py
,这可以用来返回插件调用失败的信息,但是这个过程是被 no_error_msg
控制的。如果 no_error_msg
被设置为 true ,那么 auth_failed.py
将不会被调用。
其他
若在远程服务器上运行需要用 screen 等工具把两个程序挂在后台。
hakuBot依然非常不成熟,只有简单的多线程,你能想到的能提升性能的东西它都没有,只能在流量极小的环境将就玩玩。
py-hakuBot虽然更新了结构,优于hakuBot,但是依然非常不成熟。
版权声明:本文文字内容使用 CC BY-SA 4.0 协议发布
by SDUST weilinfox
本文地址 https://www.cnblogs.com/weilinfox/p/13466407.html
偷偷放上一个学长的文章