前言
前段時間QQ進(jìn)行了更新,所以導(dǎo)致了非手表協(xié)議掃碼登陸報錯的問題,不過好在大佬已經(jīng)推出rc5版本的go-cqhttp,解決了這一頭疼的問題
在開始之前,我需要說明一下,本文章是針對沒有經(jīng)驗(yàn)和基礎(chǔ)的用戶,所以說篇幅可能會長一點(diǎn)
開始
1.準(zhǔn)備
你需要準(zhǔn)備的東西有:
- python3.8及以上版本
- 虛擬環(huán)境(可選)
- nonebot框架
- go-cqhttp客戶端
- 機(jī)器人賬戶
- 一定的python基礎(chǔ)
如果你有python的基礎(chǔ),那么你一定知道pypi,pypi其實(shí)可以說是python的官方應(yīng)用商店,里面有許多第三方模塊可供下載,而我們的主角 Nonebot便是其中的一個第三方模塊
2.安裝nonebot
安裝官方手腳架:nb-cli
這里我推薦沒有經(jīng)驗(yàn)的人使用官方的手腳架來安裝nonebot及適配器,如果你有經(jīng)驗(yàn),那當(dāng)我沒說。個人還是覺得官方手腳架用起來會方便一點(diǎn)
手腳架安裝命令:pip install nb-cli
安裝截圖
安裝成功截圖
如果你按照我的步驟來,那么應(yīng)該已經(jīng)成功安裝了手腳架,接下來就是如何去使用手腳架了
使用手腳架安裝框架
首先我們需要安裝驅(qū)動器
我們先使用命令查看驅(qū)動器列表,命令如下
nb driver list
終端輸出如下
可以看到有很多驅(qū)動器,這里我們選擇httpx,同樣的輸入下列命令進(jìn)行安裝
nb driver
終端輸出結(jié)果
我們選擇第三個“安裝驅(qū)動器到當(dāng)前項(xiàng)目”,此處可以用鍵盤上下方向鍵進(jìn)行選擇,我們移到第三個回車,并且輸入httpx
終端輸出
如上圖所示我們已經(jīng)成功安裝了httpx驅(qū)動器,接下來就是安裝適配器了
輸入下列命令查看適配器列表
nb adapter list
輸出如圖所示
本次教程是搭建qq機(jī)器人,如果你想要在微信或者其他平臺搭建機(jī)器人的話請自行嘗試。
我們選擇的適配器是 OneBot V11,V12因?yàn)椴┲饕矝]試過,所以不敢給你們推薦
輸入如下命令安裝適配器
nb adapter
這里我們選擇“安裝適配器”到當(dāng)前項(xiàng)目,同樣的鍵盤上下鍵選擇并回車
終端輸出如圖所示
我們再次輸入 pip list
輸出如圖所示:
可以看到我們成功安裝了適配器和框架本身,如果結(jié)果跟博主一樣的話,恭喜你,至此你已經(jīng)完成了框架及適配器的安裝
3.創(chuàng)建項(xiàng)目
那么我們已經(jīng)完成了框架的安裝,接下來就是創(chuàng)建項(xiàng)目了,前文我們已經(jīng)安裝了官方手腳架,所以我們可以通過手腳架來創(chuàng)建項(xiàng)目
命令如下
nb create
注意,這里我們要記得cd到項(xiàng)目文件夾
例如我要把項(xiàng)目建在D盤的python開發(fā)目錄下,那么我就要cd到該目錄再執(zhí)行命令
如上圖,這里因?yàn)槲冶容^熟悉simple,所以我們選用simple模板
項(xiàng)目名稱你們自己起,最好是英文。
驅(qū)動器我們選擇FastAPI
適配器我們選擇OneBot V11
這里我們選擇再src目錄下存放插件
是否立即安裝依賴填y,創(chuàng)建虛擬環(huán)境可選
如圖所示你就已經(jīng)成功創(chuàng)建了一個bot項(xiàng)目了??
項(xiàng)目結(jié)構(gòu)如下
?? AweSome-Bot
├── ?? awesome_bot # 或是 src
│ └── ?? plugins
├── ?? .env # 可選的
├── ?? .env.dev # 可選的
├── ?? .env.prod # 可選的
├── ?? .gitignore
├── ?? bot.py
├── ?? docker-compose.yml
├── ?? Dockerfile
├── ?? pyproject.toml
└── ?? README.md
資源管理器截圖
如果你的結(jié)構(gòu)跟我一樣,那么恭喜你,已經(jīng)成功的創(chuàng)建好一個項(xiàng)目了,接下來就是配置了
配置
.env文件內(nèi)容修改為
ENVIRONMENT=prod
.env.dev文件內(nèi)容修改為
HOST=127.0.0.1
PORT=8080
LOG_LEVEL=DEBUG
FASTAPI_RELOAD=true
需要注意的是,如果你是Linux環(huán)境,請修改.env.dev文件
FASTAPI_RELOAD=false
除FASTAPI_RELOAD=false外其余均保持默認(rèn)
4.安裝go-cqhttp
go-cqhttp你可以理解為一個qq客戶端
下載地址:Releases · Mrs4s/go-cqhttp (github.com)
截止本文寫成之時go-cqhttp最新版本為rc5
本次教程針對win系統(tǒng),所以我們下載紅框框起來的安裝包
下載后雙擊運(yùn)行生成bat文件
可以看到,在目錄下生成了一個bat文件
在后續(xù)使用過程我們都需要使用bat文件而不是運(yùn)行本體,雙擊運(yùn)行bat文件
這里我們選擇 3 反向 Websocket 通信
可以看到提示我們修改配置文件再重啟
config.yml默認(rèn)配置
# go-cqhttp 默認(rèn)配置文件
account: # 賬號相關(guān)
uin: 1233456 # QQ賬號
password: '' # 密碼為空時使用掃碼登錄
encrypt: false # 是否開啟密碼加密
status: 0 # 在線狀態(tài) 請參考 https://docs.go-cqhttp.org/guide/config.html#在線狀態(tài)
relogin: # 重連設(shè)置
delay: 3 # 首次重連延遲, 單位秒
interval: 3 # 重連間隔
max-times: 0 # 最大重連次數(shù), 0為無限制
# 是否使用服務(wù)器下發(fā)的新地址進(jìn)行重連
# 注意, 此設(shè)置可能導(dǎo)致在海外服務(wù)器上連接情況更差
use-sso-address: true
# 是否允許發(fā)送臨時會話消息
allow-temp-session: false
# 是否禁用協(xié)議更新
disable-protocol-update: false
heartbeat:
# 心跳頻率, 單位秒
# -1 為關(guān)閉心跳
interval: 5
message:
# 上報數(shù)據(jù)類型
# 可選: string,array
post-format: string
# 是否忽略無效的CQ碼, 如果為假將原樣發(fā)送
ignore-invalid-cqcode: false
# 是否強(qiáng)制分片發(fā)送消息
# 分片發(fā)送將會帶來更快的速度
# 但是兼容性會有些問題
force-fragment: false
# 是否將url分片發(fā)送
fix-url: false
# 下載圖片等請求網(wǎng)絡(luò)代理
proxy-rewrite: ''
# 是否上報自身消息
report-self-message: false
# 移除服務(wù)端的Reply附帶的At
remove-reply-at: false
# 為Reply附加更多信息
extra-reply-data: false
# 跳過 Mime 掃描, 忽略錯誤數(shù)據(jù)
skip-mime-scan: false
# 是否自動轉(zhuǎn)換 WebP 圖片
convert-webp-image: false
output:
# 日志等級 trace,debug,info,warn,error
log-level: warn
# 日志時效 單位天. 超過這個時間之前的日志將會被自動刪除. 設(shè)置為 0 表示永久保留.
log-aging: 15
# 是否在每次啟動時強(qiáng)制創(chuàng)建全新的文件儲存日志. 為 false 的情況下將會在上次啟動時創(chuàng)建的日志文件續(xù)寫
log-force-new: true
# 是否啟用日志顏色
log-colorful: true
# 是否啟用 DEBUG
debug: false # 開啟調(diào)試模式
# 默認(rèn)中間件錨點(diǎn)
default-middlewares: &default
# 訪問密鑰, 強(qiáng)烈推薦在公網(wǎng)的服務(wù)器設(shè)置
access-token: ''
# 事件過濾器文件目錄
filter: ''
# API限速設(shè)置
# 該設(shè)置為全局生效
# 原 cqhttp 雖然啟用了 rate_limit 后綴, 但是基本沒插件適配
# 目前該限速設(shè)置為令牌桶算法, 請參考:
# 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 # 令牌回復(fù)頻率, 單位秒
bucket: 1 # 令牌桶大小
database: # 數(shù)據(jù)庫相關(guān)設(shè)置
leveldb:
# 是否啟用內(nèi)置leveldb數(shù)據(jù)庫
# 啟用將會增加10-20MB的內(nèi)存占用和一定的磁盤空間
# 關(guān)閉將無法使用 撤回 回復(fù) get_msg 等上下文相關(guān)功能
enable: true
sqlite3:
# 是否啟用內(nèi)置sqlite3數(shù)據(jù)庫
# 啟用將會增加一定的內(nèi)存占用和一定的磁盤空間
# 關(guān)閉將無法使用 撤回 回復(fù) get_msg 等上下文相關(guān)功能
enable: false
cachettl: 3600000000000 # 1h
# 連接服務(wù)列表
servers:
# 添加方式,同一連接方式可添加多個,具體配置說明請查看文檔
#- http: # http 通信
#- ws: # 正向 Websocket
#- ws-reverse: # 反向 Websocket
#- pprof: #性能分析服務(wù)器
# 反向WS設(shè)置
- ws-reverse:
# 反向WS Universal 地址
# 注意 設(shè)置了此項(xiàng)地址后下面兩項(xiàng)將會被忽略
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 # 引用默認(rèn)中間件
這里我們需要配置qq號以及密碼,還有反向服務(wù)器地址
還記得上一步我們配置的.env.dev嗎,是不是端口為8080,所以 universal
參數(shù)應(yīng)該這樣配置,如果你自行配置了端口號,那么請自行修改一下哦
universal: ws://127.0.0.1:8080/onebot/v11/ws/
config.yml完整配置(這里賬密沒有配置,記得自行配置一下哦)
# go-cqhttp 默認(rèn)配置文件
account: # 賬號相關(guān)
uin: # QQ賬號
password: # 密碼為空時使用掃碼登錄
encrypt: false # 是否開啟密碼加密
status: 0 # 在線狀態(tài) 請參考 https://github.com/Mrs4s/go-cqhttp/blob/dev/docs/config.md#在線狀態(tài)
relogin: # 重連設(shè)置
disabled: false
delay: 3 # 重連延遲, 單位秒
interval: 0 # 重連間隔
max-times: 0 # 最大重連次數(shù), 0為無限制
# 是否使用服務(wù)器下發(fā)的新地址進(jìn)行重連
# 注意, 此設(shè)置可能導(dǎo)致在海外服務(wù)器上連接情況更差
use-sso-address: true
heartbeat:
disabled: false # 是否開啟心跳事件上報
# 心跳頻率, 單位秒
# -1 為關(guān)閉心跳
interval: 5
message:
# 上報數(shù)據(jù)類型
# 可選: string,array
post-format: string
# 是否忽略無效的CQ碼, 如果為假將原樣發(fā)送
ignore-invalid-cqcode: false
# 是否強(qiáng)制分片發(fā)送消息
# 分片發(fā)送將會帶來更快的速度
# 但是兼容性會有些問題
force-fragment: false
# 是否將url分片發(fā)送
fix-url: false
# 下載圖片等請求網(wǎng)絡(luò)代理
proxy-rewrite: ''
# 是否上報自身消息
report-self-message: false
# 移除服務(wù)端的Reply附帶的At
remove-reply-at: false
# 為Reply附加更多信息
extra-reply-data: false
output:
# 日志等級 trace,debug,info,warn,error
log-level: warn
# 是否啟用 DEBUG
debug: false # 開啟調(diào)試模式
# 默認(rèn)中間件錨點(diǎn)
default-middlewares: &default
# 訪問密鑰, 強(qiáng)烈推薦在公網(wǎng)的服務(wù)器設(shè)置
access-token: ''
# 事件過濾器文件目錄
filter: ''
# API限速設(shè)置
# 該設(shè)置為全局生效
# 原 cqhttp 雖然啟用了 rate_limit 后綴, 但是基本沒插件適配
# 目前該限速設(shè)置為令牌桶算法, 請參考:
# 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 # 令牌回復(fù)頻率, 單位秒
bucket: 1 # 令牌桶大小
servers:
# HTTP 通信設(shè)置
- http:
# 是否關(guān)閉正向HTTP服務(wù)器
disabled: false
# 服務(wù)端監(jiān)聽地址
host: 127.0.0.1
# 服務(wù)端監(jiān)聽端口
port: 5701
# 反向HTTP超時時間, 單位秒
# 最小值為5,小于5將會忽略本項(xiàng)設(shè)置
timeout: 5
middlewares:
<<: *default # 引用默認(rèn)中間件
# 反向HTTP POST地址列表
post:
#- url: '' # 地址
# secret: '' # 密鑰
#- url: 127.0.0.1:5701 # 地址
# secret: '' # 密鑰
# 正向WS設(shè)置
- ws:
# 是否禁用正向WS服務(wù)器
disabled: false
# 正向WS服務(wù)器監(jiān)聽地址
host: 127.0.0.1
# 正向WS服務(wù)器監(jiān)聽端口
port: 6701
middlewares:
<<: *default # 引用默認(rèn)中間件
- ws-reverse:
# 是否禁用當(dāng)前反向WS服務(wù)
disabled: false
# 反向WS Universal 地址
# 注意 設(shè)置了此項(xiàng)地址后下面兩項(xiàng)將會被忽略
universal: ws://127.0.0.1:8080/onebot/v11/ws/
# 反向WS API 地址
api: ws://your_websocket_api.server
# 反向WS Event 地址
event: ws://your_websocket_event.server
# 重連間隔 單位毫秒
reconnect-interval: 3000
middlewares:
<<: *default # 引用默認(rèn)中間件
# pprof 性能分析服務(wù)器, 一般情況下不需要啟用.
# 如果遇到性能問題請上傳報告給開發(fā)者處理
# 注意: pprof服務(wù)不支持中間件、不支持鑒權(quán). 請不要開放到公網(wǎng)
- pprof:
# 是否禁用pprof性能分析服務(wù)器
disabled: true
# pprof服務(wù)器監(jiān)聽地址
host: 127.0.0.1
# pprof服務(wù)器監(jiān)聽端口
port: 7700
# 可添加更多
#- ws-reverse:
#- ws:
#- http:
#- pprof:
database: # 數(shù)據(jù)庫相關(guān)設(shè)置
leveldb:
# 是否啟用內(nèi)置leveldb數(shù)據(jù)庫
# 啟用將會增加10-20MB的內(nèi)存占用和一定的磁盤空間
# 關(guān)閉將無法使用 撤回 回復(fù) get_msg 等上下文相關(guān)功能
enable: true
賬戶密碼記得修改,修改完成后雙擊運(yùn)行bat按照終端輸出提示來完成登錄,這里就不作演示了
5.運(yùn)行?。?!成功!!
啟動nonebot
我們cd到之前第三步創(chuàng)建項(xiàng)目時的文件夾,例如我是yuan文件夾
輸入如下命令來運(yùn)行
nb run --reload
輸入命令回車后你應(yīng)該會看到如下結(jié)果
啟動go-cqhttp
在進(jìn)行這一步前,請確認(rèn)你已經(jīng)完成了對config.yml的配置,這里我默認(rèn)你已經(jīng)完成了配置
同樣的,雙擊運(yùn)行bat文件稍等幾秒后如果配置沒有問題,那么你將看到如下結(jié)果
前面的報錯不用管,那是因?yàn)槲蚁葐拥膅ocq,而nonebot框架是作為服務(wù)端,沒有啟動gocq自然連不上,所以報錯。而紅框框起部分就是啟動了nonebot的時候
如果你的輸出結(jié)果也是如此,那么太棒了,你成功搭建好了機(jī)器人,接下來我們安裝個簡單插件試試bot能不能正常運(yùn)行
拿我寫的一個插件為例子,輸入下列命令安裝
nb plugin install nonebot-plugin-yuanshen-notice
安裝完成后重新運(yùn)行 nb run --reload
,如果操作正確,你將看到下面的結(jié)果
看提示,是不是成功導(dǎo)入了nonebot-plugin-yuanshen-notice?再看最后一行,connection open,說明此時nonebot已經(jīng)和go-cq握手成功了,下面我們來測試一下
發(fā)送原神公告,如果操作無誤將看到下列結(jié)果
如果你也得到了這樣的反饋,那么恭喜你,成功搭建好了機(jī)器人,至此,搭建機(jī)器人的工作就圓滿結(jié)束了,本教程使用的是win系統(tǒng),后續(xù)考慮推出linux教程,還請各位多多支持文章來源:http://www.zghlxwxcb.cn/news/detail-417187.html
結(jié)尾
很高興你能看完本教程,怎么樣?你應(yīng)該也學(xué)會如何搭建機(jī)器人了吧,后續(xù)博主也會出視頻教程,插件編寫教程,讓我們盡情期待把!文章來源地址http://www.zghlxwxcb.cn/news/detail-417187.html
到了這里,關(guān)于新版nonebot,go-cqhttp搭建qq機(jī)器人保姆級教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!