使用 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_configenabled 设为 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机器人,但是简单配置也可以直接使用。

  1. 检测环境

在仓库根目录有一个 test_environment.pypython3 test_environment.py 来检测环境是否包含了全部所需包。嘛,暂时没有考虑啥自动化的依赖配置,所以通过这个只有 import 的脚本来检查环境是否符合吧。

  1. 首次运行

一些文件在仓库中是不存在的,需要通过首次运行自动生成。通过 python3 main.py 来运行小白。

  1. 配置

首次运行后你会发现多出一个 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 hostportaccess_token 对应go-cqhttp的 access_token 。 其他四个中 threadsprocesses 保持默认即可, log_levelconsole_log_level 为日志等级,其分级和 logging 模块的分级一模一样,前者是日志文件的等级,后者是终端打印的等级。

config.json 中 haku_config 则和小白运行本身有关, index 是命令前缀,另外两个 admin_qqadmin_group 是某些情况下出现致命错误时,错误上报接口发送信息的 qq 和 qq群 目标。

完成这部分,大部分功能应该可以正常运行了。

  1. 定时任务

以 rss 为例。

rss订阅需要定时任务的支持,在 files 下的 csv 目录下应该可以看到 meta_event.regular_commands.csv 文件,第一行是“command,interval”,第二行添加“.rss send,15”,其中“interval”是以分钟为单位的,不允许低于1。

  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

偷偷放上一个学长的文章

posted @ 2020-08-09 21:14  桜風の狐  阅读(6324)  评论(0编辑  收藏  举报