使用 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

偷偷放上一個學長的文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM