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
偷偷放上一個學長的文章