基于go-cqhttp與Flask搭建定制機器人項目實戰(zhàn)示例
前言
許久之前用 Mirai 搭建了 QQ 機器人,不過因為云服務器到期了,QQ 機器人被 迫下線,現(xiàn)如今,可能是意猶未盡,今天就基于 go-cqhttp 與 Flask 搭建定制機器人;
安裝
1、前往 go-cqhttp 的下載地址,選擇自己需要的版本,下載的話,一般下載這兩個中的其中一個:
具體看自己的系統(tǒng)配置,可以通過 arch
指令進行查看:
博主這里是 x86_64
,所以選擇下載第一個,也就是 go-cqhttp_linux_amd64.tar.gz
;
x86_64,x64,AMD64 可看做是同一個東西;
x86
是 intel 開發(fā)的一種32位指令集;x86_64
是一種64位的指令集,x86_64
是x86
指令的超集,在x86
上可以運行的程序,在x86_64
上也可以運行,x86_64
是AMD
發(fā)明的,也叫AMD64
;
現(xiàn)在用的 intel/amd 的桌面級 CPU 基本上都是 x86_64
,與之相對的 arm
等都不是 x86_64
;
2、創(chuàng)建并打開 go-cqhttp 文件夾:
cd /opt && mkdir go-cqhttp
3、然后把自己下載好的壓縮包上傳到此處,或者直接通過 wget
指令將壓縮包下載到此處;
wget url
4、解壓壓縮包:
tar -zxvf go-cqhttp_linux_amd64.tar.gz
5、賦予 go-cqhttp
權限:
chmod 777 go-cqhttp
6、第一次運行,生成配置文件:
./go-cqhttp
7、修改配置文件,具體參考官方配置文檔;
# go-cqhttp 默認配置文件 account: # 賬號相關 uin: 1233456 # QQ賬號 password: '' # 密碼為空時使用掃碼登錄 encrypt: false # 是否開啟密碼加密 status: 0 # 在線狀態(tài) 請參考 https://docs.go-cqhttp.org/guide/config.html#在線狀態(tài) relogin: # 重連設置 delay: 3 # 首次重連延遲, 單位秒 interval: 3 # 重連間隔 max-times: 0 # 最大重連次數(shù), 0為無限制 # 是否使用服務器下發(fā)的新地址進行重連 # 注意, 此設置可能導致在海外服務器上連接情況更差 use-sso-address: true heartbeat: # 心跳頻率, 單位秒 # -1 為關閉心跳 interval: 5 message: # 上報數(shù)據(jù)類型 # 可選: string,array post-format: string # 是否忽略無效的CQ碼, 如果為假將原樣發(fā)送 ignore-invalid-cqcode: false # 是否強制分片發(fā)送消息 # 分片發(fā)送將會帶來更快的速度 # 但是兼容性會有些問題 force-fragment: false # 是否將url分片發(fā)送 fix-url: false # 下載圖片等請求網(wǎng)絡代理 proxy-rewrite: '' # 是否上報自身消息 report-self-message: false # 移除服務端的Reply附帶的At remove-reply-at: false # 為Reply附加更多信息 extra-reply-data: false # 跳過 Mime 掃描, 忽略錯誤數(shù)據(jù) skip-mime-scan: false output: # 日志等級 trace,debug,info,warn,error log-level: warn # 日志時效 單位天. 超過這個時間之前的日志將會被自動刪除. 設置為 0 表示永久保留. log-aging: 15 # 是否在每次啟動時強制創(chuàng)建全新的文件儲存日志. 為 false 的情況下將會在上次啟動時創(chuàng)建的日志文件續(xù)寫 log-force-new: true # 是否啟用 DEBUG debug: false # 開啟調(diào)試模式 # 默認中間件錨點 default-middlewares: &default # 訪問密鑰, 強烈推薦在公網(wǎng)的服務器設置 access-token: '' # 事件過濾器文件目錄 filter: '' # API限速設置 # 該設置為全局生效 # 原 cqhttp 雖然啟用了 rate_limit 后綴, 但是基本沒插件適配 # 目前該限速設置為令牌桶算法, 請參考: # https://baike.baidu.com/item/%E4%BB%A4%E7%89%8C%E6%A1%B6%E7%AE%97%E6%B3%95/6597000?fr=aladdin rate-limit: enabled: false # 是否啟用限速 frequency: 1 # 令牌回復頻率, 單位秒 bucket: 1 # 令牌桶大小 # 連接服務列表 servers: # HTTP 通信設置 - http: # 服務端監(jiān)聽地址 host: 127.0.0.1 # 服務端監(jiān)聽端口 port: 5700 # 反向HTTP超時時間, 單位秒 # 最小值為5,小于5將會忽略本項設置 timeout: 5 middlewares: <<: *default # 引用默認中間件 # 反向HTTP POST地址列表 post: #- url: '' # 地址 # secret: '' # 密鑰 #- url: 127.0.0.1:5701 # 地址 # secret: '' # 密鑰 # 正向WS設置 - ws: # 正向WS服務器監(jiān)聽地址 host: 127.0.0.1 # 正向WS服務器監(jiān)聽端口 port: 6700 middlewares: <<: *default # 引用默認中間件 - ws-reverse: # 反向WS Universal 地址 # 注意 設置了此項地址后下面兩項將會被忽略 universal: ws://your_websocket_universal.server # 反向WS API 地址 api: ws://your_websocket_api.server # 反向WS Event 地址 event: ws://your_websocket_event.server # 重連間隔 單位毫秒 reconnect-interval: 3000 middlewares: <<: *default # 引用默認中間件 # pprof 性能分析服務器, 一般情況下不需要啟用. # 如果遇到性能問題請上傳報告給開發(fā)者處理 # 注意: pprof服務不支持中間件、不支持鑒權. 請不要開放到公網(wǎng) - pprof: # pprof服務器監(jiān)聽地址 host: 127.0.0.1 # pprof服務器監(jiān)聽端口 port: 7700 # LambdaServer 配置 - lambda: type: scf # 可用 scf,aws (aws未經(jīng)過測試) middlewares: <<: *default # 引用默認中間件 # 可添加更多 #- ws-reverse: #- ws: #- http: database: # 數(shù)據(jù)庫相關設置 leveldb: # 是否啟用內(nèi)置leveldb數(shù)據(jù)庫 # 啟用將會增加10-20MB的內(nèi)存占用和一定的磁盤空間 # 關閉將無法使用 撤回 回復 get_msg 等上下文相關功能 enable: true
8、再次運行 ## go-cqhttp 掃碼綁定機器人;
9、另起會話 screen -S sid10t-bot
,將其在后臺掛起;
發(fā)送消息
access_token = '' url = f"http://127.0.0.1:port/send_private_msg?access_token={access_token}" msg = "Hello World! --sid10t." data = { "user_id": QQ Number, "message": msg } requests.post(url, data=data, timeout=5)
接收消息
這里的話不用別人的插件,自己寫 Flask 監(jiān)聽端口,別問為什么不用其他的框架,比如 SpringBoot 之類的,麻煩,每次更新都要重新編譯打包;
先寫個 app.py
構建基本的 Flask 框架,同時監(jiān)聽自己的 port:
from flask import Flask, request from api import keyword app = Flask(__name__) @app.route('/', methods=["POST", "GET"]) def get_data(): if request.get_json().get('message_type') == 'private': uid = request.get_json().get('sender').get('user_id') msg = request.get_json().get('raw_message') keyword(msg, uid) if request.get_json().get('message_type')=='group': gid = request.get_json().get('group_id') uid = request.get_json().get('sender').get('user_id') msg = request.get_json().get('raw_message') keyword(msg, uid, gid) return "OK" if __name__ =="__main__": app.run(debug=True, port=port)
然后再寫一個 api.py
處理收集到的信息:
def keyword(msg, uid, gid=None): person_send_hello(uid) def send_private_msg(uid): url = f"{BASEURL}/send_private_msg?access_token={ACCESS_TOKEN}" data = { "user_id": uid, "message": "Hello World! --sid10t." } try: requests.post(url, data=data, timeout=5) except: pass
后記
以上就是 基于 go-cqhttp 與 Flask 搭建定制機器人 的所有內(nèi)容了,之后可以根據(jù)自己的需求添加功能,這里就不贅述了,更多關于go cqhttp Flask搭建定制機器人的資料請關注腳本之家其它相關文章!
相關文章
golang通過node_exporter監(jiān)控GPU及cpu頻率、溫度的代碼
node_exporter這個開源組件是配合prometheus收集主機操作系統(tǒng)層的metrics的常用組件,但是官方?jīng)]有提供GPU卡的metrics的采集,今天通過本文給大家介紹golang通過node_exporter監(jiān)控GPU及cpu頻率、溫度的相關知識,感興趣的朋友一起看看吧2022-05-05go mutex互斥鎖使用Lock和Unlock方法占有釋放資源
Go號稱是為了高并發(fā)而生的,在高并發(fā)場景下,勢必會涉及到對公共資源的競爭,當對應場景發(fā)生時,我們經(jīng)常會使用 mutex 的 Lock() 和 Unlock() 方法來占有或釋放資源,雖然調(diào)用簡單,但 mutex 的內(nèi)部卻涉及挺多的,本文來好好研究一下2023-09-09解決Go語言中高頻次和高并發(fā)下隨機數(shù)重復的問題
在Golang中,獲取隨機數(shù)的方法一般會介紹有兩種,一種是基于math/rand的偽隨機,一種是基于crypto/rand的真隨機,math/rand由于其偽隨機的原理,經(jīng)常會出現(xiàn)重復的隨機數(shù),導致在需要進行隨機的業(yè)務出現(xiàn)較多的重復問題,所以本文給大家介紹了較好的解放方案2023-12-12