NoneBot2 是一個(gè)現(xiàn)代、跨平臺(tái)、可擴(kuò)展的 Python 聊天機(jī)器人框架,它基于 Python 的類型注解和異步特性,能夠?yàn)槟愕男枨髮?shí)現(xiàn)提供便捷靈活的支持。
NoneBot2 具有豐富的插件生態(tài)系統(tǒng),可以實(shí)現(xiàn)多種功能,例如自動(dòng)回復(fù)、天氣查詢、消息推送等等。此外,它還提供了完善的文檔和示例代碼,方便用戶快速上手和開發(fā)自己的插件。
如果你是一名 Python 程序員,想要開發(fā)一個(gè)聊天機(jī)器人,那么 NoneBot2 絕對(duì)是你的不二之選。你可以在官方文檔中了解更多關(guān)于 NoneBot2 的詳細(xì)信息和使用方法。
首先,你需要明白的是NoneBot2的運(yùn)行是需要python運(yùn)行環(huán)境來支持,因此我們首先需要配置好python環(huán)境;再有,以QQ聊天機(jī)器人舉例,NoneBot2本身并不包含與QQ服務(wù)器通信的底層協(xié)議實(shí)現(xiàn),因此無法獨(dú)立搭建聊天機(jī)器人。與 QQ 服務(wù)器通信的底層協(xié)議實(shí)現(xiàn)可以有多種選擇,如 CoolQ HTTP API 協(xié)議、Mirai 協(xié)議、go-cqhttp 協(xié)議等。因此,在使用 nonebot 框架搭建 QQ 機(jī)器人時(shí),您還需要選擇一個(gè)底層協(xié)議實(shí)現(xiàn)來與 QQ 服務(wù)器通信,這里我們以go-cqhttp為例。
綜上所述,如果我們要搭建一個(gè)屬于自己的QQ機(jī)器人,需要進(jìn)行如下幾步:
- 要搭建一個(gè)安裝 Python 是作為 nonebot 運(yùn)行的基礎(chǔ)環(huán)境;
- 配置 go-cqhttp 是為了實(shí)現(xiàn)與 QQ 服務(wù)器的通信,并提供 QQ 機(jī)器人的服務(wù);
- 配置 nonebot 是將 go-cqhttp 和 Python 代碼連接起來,實(shí)現(xiàn)具體的 QQ 機(jī)器人功能。
下面將直接用云服務(wù)器進(jìn)行部署,畢竟如果你要開個(gè)機(jī)器人肯定是24小時(shí)一直服務(wù),因此,這里以騰訊云的Centos為例部署。
第一步,配置python
首先你得先按照Python,需要注意的是,NoneBot 僅支持 Python 3.7.3 以上版本,這里以安裝Python3.9.9為例:
由于CentOS7原本就安裝了Python2,而且這個(gè)Python2不能被刪除,因?yàn)橛泻芏嘞到y(tǒng)命令,比如yum都要用到。所以我們要額外安裝Python3,而且系統(tǒng)一般允許多個(gè)版本的python同時(shí)存在。
我們先來查看python安裝位置,一般是位于/usr/bin/python目錄下。
$ which python
>> /usr/bin/python
下面介紹安裝Python3的方法:
-
安裝依賴包(切記安裝)
yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
在安裝 Python 之前需要安裝必要的開發(fā)工具和庫。
當(dāng)您運(yùn)行第一個(gè)命令
yum -y groupinstall development tools
時(shí),它會(huì)安裝一組常用的開發(fā)工具,用于在 Linux 系統(tǒng)上構(gòu)建軟件。這些工具包括編譯器、鏈接器和其他用于構(gòu)建軟件的實(shí)用程序。接下來的命令
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
安裝 Python 所需的其他開發(fā)庫。這些庫提供了壓縮和加密功能、數(shù)據(jù)庫訪問支持以及 GUI 工具包(如 Tkinter)等功能。通過在安裝 Python 之前安裝這些工具和庫,您可以確保您的系統(tǒng)具備構(gòu)建和運(yùn)行 Python 程序所需的所有必要組件。
同時(shí),補(bǔ)充個(gè)小知識(shí)點(diǎn):在 yum 命令中,
-y
參數(shù)是指定在執(zhí)行安裝或卸載操作時(shí)不需要手動(dòng)確認(rèn)。如果沒有使用-y
參數(shù),則在安裝或卸載軟件包時(shí),yum 會(huì)提示您確認(rèn)操作,需要手動(dòng)輸入y
才能繼續(xù)執(zhí)行操作。使用
-y
參數(shù)可以使 yum 命令在執(zhí)行操作時(shí)自動(dòng)確認(rèn),避免了人工交互的過程,方便自動(dòng)化腳本和批量操作。但是,使用-y
參數(shù)也需要注意,因?yàn)檫@樣可能會(huì)導(dǎo)致不必要的安裝或卸載,所以在使用時(shí)需要謹(jǐn)慎。 -
下載Python3安裝包
大家可根據(jù)自己需求下載不同版本的Python3,我下載的是Python3.9.9wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tar.xz
-
新建python3存放目錄
mkdir /usr/local/python3
-
安裝Python3
解壓壓縮包,進(jìn)入解壓目錄,指定安裝目錄,安裝Python3。
tar -xvJf Python-3.9.9.tar.xz # 該命令將 Python 的源代碼文件(壓縮文件)解壓縮到當(dāng)前目錄中。 cd Python-3.9.9 # 將當(dāng)前工作目錄更改為 Python 源代碼所在的目錄,以便在這個(gè)目錄下執(zhí)行后續(xù)的命令。 ./configure --prefix=/usr/local/python3 # 運(yùn)行配置腳本,為 Python 的構(gòu)建過程設(shè)置參數(shù)。--prefix 選項(xiàng)指定 Python 的安裝目錄,這里設(shè)置為 /usr/local/python3。這意味著 Python 將被安裝到 /usr/local/python3 目錄中。 yum install libffi-devel -y # 這個(gè)命令會(huì)安裝 libffi-devel 開發(fā)包,該開發(fā)包是 Python 某些模塊的依賴項(xiàng)。在安裝 Python 的某些版本(如 Python 3.7 及以上版本)時(shí),需要先安裝此包。 make && make install # 這個(gè)命令會(huì)構(gòu)建和安裝 Python。make 命令編譯源代碼,并生成可執(zhí)行文件。make install 命令將編譯好的文件安裝到指定的目錄中(在這里是 /usr/local/python3)。這樣,Python 就已經(jīng)成功安裝到了系統(tǒng)中。
在 Python 3.4 及以后的版本中,pip 被包含在了 Python 的安裝包中,因此在安裝 Python 3.4 及以后的版本時(shí),pip 也會(huì)被一同安裝。
如果您使用的是 Python 3.4 及以后的版本,那么在安裝完成后,您可以通過在終端中輸入
pip
命令來驗(yàn)證 pip 是否已經(jīng)安裝成功。對(duì)于早期版本的 Python(例如 Python 2.x 系列和 Python 3.3 及以前的版本),pip 并不會(huì)自動(dòng)安裝。您需要手動(dòng)安裝 pip。
yum -y install python-pip
或yum -y install python3-pip
-
創(chuàng)建軟鏈接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3 ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
在 Linux 系統(tǒng)中,通常使用
python
和pip
命令來分別執(zhí)行 Python 解釋器和 pip 包管理器。在您安裝了多個(gè)版本的 Python 時(shí),可能會(huì)出現(xiàn)需要切換 Python 版本的情況。此時(shí),您可以使用軟鏈接來指定默認(rèn)版本。創(chuàng)建軟鏈接的命令是
ln -s 源文件 目標(biāo)文件
,其中-s
表示創(chuàng)建軟鏈接。在這里,/usr/local/python3/bin/python3
是您要?jiǎng)?chuàng)建軟鏈接的源文件,而/usr/bin/python3
是軟鏈接的目標(biāo)文件。這樣,當(dāng)您執(zhí)行python3
命令時(shí),實(shí)際上會(huì)調(diào)用/usr/local/python3/bin/python3
解釋器。同樣,
/usr/local/python3/bin/pip3
是源文件,/usr/bin/pip3
是目標(biāo)文件,執(zhí)行pip3
命令時(shí),實(shí)際上會(huì)調(diào)用/usr/local/python3/bin/pip3
包管理器。通過創(chuàng)建軟鏈接,您可以輕松地切換不同版本的 Python,并指定默認(rèn)版本。但是,需要注意的是,軟鏈接只是一個(gè)指向源文件的快捷方式,源文件被刪除或移動(dòng)時(shí),軟鏈接也將失效。
-
安裝完成,輸入python3測試
安裝成功
第二步,配置go-cqhttp
go-cqhttp 是一個(gè)基于 go 語言開發(fā)的,輕量、原生跨平臺(tái)、高效、可擴(kuò)展的 QQ 機(jī)器人框架,支持多種協(xié)議和多個(gè) QQ 用戶同時(shí)連接,可輕松實(shí)現(xiàn) QQ 消息收發(fā)、群消息管理、帳號(hào)管理、事件處理等功能。
以騰訊云輕量級(jí)服務(wù)器centos7為例,配置go-cqhttp的流程如下:
-
在github上下載最新的版本go-cqhttp,根據(jù)你的系統(tǒng)選擇下載安裝包,這里我們選擇arm64 Linux
系統(tǒng)類型 可執(zhí)行文件 壓縮文件 Intel 版 Macos Not available go-cqhttp_darwin_amd64.tar.gz M1 版 Macos Not available go-cqhttp_darwin_arm64.tar.gz 32 位 Linux Not available go-cqhttp_linux_386.tar.gz 64 位 Linux Not available go-cqhttp_linux_amd64.tar.gz arm64 Linux Not available go-cqhttp_linux_arm64.tar.gz armv7 Linux Not available go-cqhttp_linux_armv7.tar.gz 32 位 Windows go-cqhttp_windows_386.exe go-cqhttp_windows_386.zip 64 位 Windows go-cqhttp_windows_amd64.exe go-cqhttp_windows_amd64.zip arm64 Windows go-cqhttp_windows_arm64.exe go-cqhttp_windows_arm64.zip armv7 Windows go-cqhttp_windows_armv7.exe go-cqhttp_windows_armv7.zip wget https://github.com/Mrs4s/go-cqhttp/releases/download/v1.0.0-rc4/go-cqhttp_linux_amd64.tar.gz
(一定要注意你的安裝目錄)
-
解壓安裝設(shè)置并登錄機(jī)器人QQ
tar -xzvf go-cqhttp_linux_amd64.tar.gz
解壓后cd到解壓的目錄里執(zhí)行ssh命令
./go-cqhttp
,執(zhí)行這個(gè)命令會(huì)在當(dāng)前文件夾下生成幾個(gè)文件。重點(diǎn)關(guān)注config.yml
文件,你需要在這個(gè)文件中設(shè)置QQ(和 QQ密碼)# go-cqhttp 默認(rèn)配置文件 account: # 賬號(hào)相關(guān) uin: # QQ賬號(hào) password: '' # 密碼為空時(shí)使用掃碼登錄 encrypt: false # 是否開啟密碼加密 status: 0 # 在線狀態(tài) 請(qǐng)參考 https://docs.go-cqhttp.org/guide/config.html#在線狀態(tài) relogin: # 重連設(shè)置 delay: 3 # 首次重連延遲, 單位秒 interval: 3 # 重連間隔 max-times: 0 # 最大重連次數(shù), 0為無限制 ......
設(shè)置好后可以重啟go-cqhttp。
-
重啟后,第一次登錄因?yàn)楫惖匦枰?yàn)證,可以選擇掃碼登錄。
-
如果你的服務(wù)器和手機(jī)不在同一個(gè)局域網(wǎng)內(nèi),會(huì)提示網(wǎng)絡(luò)環(huán)境復(fù)雜
解決辦法:在本地電腦調(diào)試成功后,會(huì)在go-cqhttp所在的文件夾中生成session.token文件,將session.token文件傳到云服務(wù)器中g(shù)o-cqhttp所在的文件夾內(nèi)即可
-
提示登錄失敗: 密碼錯(cuò)誤或賬號(hào)被凍結(jié)
解決辦法:在運(yùn)行一次
go-cqhttp
后,可以發(fā)現(xiàn)其文件夾內(nèi)會(huì)生成一個(gè)device.json文件,將device.josn中的protocol=5改為protocol=2即可
這里你可能會(huì)出現(xiàn)其他bug,可以訪問其GitHub,查看issue,看看有無解決辦法。如下:
https://github.com/Mrs4s/go-cqhttp/issues
-
-
由于我們想要其24小時(shí)運(yùn)營,因此可以給它設(shè)置為后臺(tái)運(yùn)行,并進(jìn)行進(jìn)程守護(hù)
-
設(shè)置后臺(tái)運(yùn)行
nohup ./go-cqhttp
nohup ./go-cqhttp
是一個(gè)命令,它的作用是在后臺(tái)運(yùn)行 go-cqhttp。nohup
是 Linux 系統(tǒng)中一個(gè)命令,用于讓命令在后臺(tái)運(yùn)行,并且忽略掉 Hangup 信號(hào)。Hangup 信號(hào)通常是在用戶退出登錄時(shí)發(fā)送給當(dāng)前進(jìn)程的,如果沒有使用nohup
命令,當(dāng)用戶退出登錄時(shí),進(jìn)程也會(huì)被關(guān)閉。./go-cqhttp
則是一個(gè)運(yùn)行 go-cqhttp 的命令,其中./
表示在當(dāng)前目錄下執(zhí)行,go-cqhttp
是 go-cqhttp 的可執(zhí)行文件名。因此,nohup ./go-cqhttp
的作用是在后臺(tái)運(yùn)行 go-cqhttp,并且忽略掉 Hangup 信號(hào),這樣即使當(dāng)前用戶退出登錄,進(jìn)程也會(huì)繼續(xù)在后臺(tái)運(yùn)行。需要注意的是,在使用
nohup
命令運(yùn)行程序時(shí),程序的輸出信息將不再顯示在終端上,而是保存在當(dāng)前目錄下的 nohup.out 文件中,您可以使用tail -f nohup.out
命令來實(shí)時(shí)查看輸出信息。 -
進(jìn)程守護(hù):
pm2 start ./go-cqhttp --name="go-cqhttp" pm2 save pm2 startup
**
pm2
**是一個(gè)用于管理 Node.js 進(jìn)程的工具,它可以幫助我們輕松地啟動(dòng)、停止、重啟和監(jiān)控 Node.js 進(jìn)程。在這里,我們使用 **pm2
**來啟動(dòng) go-cqhttp 進(jìn)程,并將其命名為go-cqhttp
,方便我們后續(xù)管理進(jìn)程。使用 **pm2
啟動(dòng)進(jìn)程后,可以通過pm2 list
命令查看當(dāng)前運(yùn)行的進(jìn)程列表,也可以通過pm2 stop
、pm2 restart
、pm2 delete
**命令來停止、重啟、刪除進(jìn)程。
-
-
測試
接下來我們進(jìn)行http通信測試,首先需要在
config.yml
配置http通信如果你是本地服務(wù)器,配置IP地址以及端口號(hào)以127.0.0.1:5700為例,運(yùn)行g(shù)o-cqhttp。
-
瀏覽器訪問下面網(wǎng)址,測試使用機(jī)器人QQ發(fā)送消息給好友
http://127.0.0.1:5700/send_private_msg?user_id=接收消息的好友QQ號(hào)碼&message=這里輸入發(fā)送的信息內(nèi)容
執(zhí)行成功會(huì)返回一段響應(yīng)數(shù)據(jù)
{"data":{"message_id":xxxx},"retcode":0,"status":"ok"}
說明發(fā)送成功了 -
給qq群發(fā)送消息測試,成功同樣會(huì)返回上面一樣的數(shù)據(jù)"status":"ok”
http://127.0.0.1:5700/send_group_msg?group_id=接收消息QQ群號(hào)&message=這里輸入發(fā)送的信息內(nèi)容
-
更多詳情內(nèi)容,請(qǐng)?jiān)L問go-cqhttp相關(guān)文檔:https://docs.go-cqhttp.org/
第三步,配置NoneBot
直接進(jìn)入正題,根據(jù)以下步驟進(jìn)行None Bot的配置:
-
下載安裝機(jī)器人依賴
使用 pip 或 其他包管理工具 安裝 nb-cli,nonebot2 會(huì)作為其依賴被一起安裝
python3 -m pip install nb-cli
如果沒有安裝的話,可以執(zhí)行下面這段命令安裝nonebot2
python3 -m pip install nonebot2
-
安裝cqhttp適配器
python3 -m pip install nonebot-adapter-cqhttp
nonebot 是一個(gè)基于 Python 的 QQ 機(jī)器人開發(fā)框架,它本身只提供了一些高級(jí) API 和插件,方便開發(fā)者編寫 QQ 機(jī)器人的功能。但是,與 QQ 服務(wù)器通信的底層協(xié)議實(shí)現(xiàn)是多種多樣的,如 go-cqhttp、Mirai、CoolQ 等,這些協(xié)議實(shí)現(xiàn)之間的 API 不盡相同。因此,開發(fā) QQ 機(jī)器人需要先選擇一個(gè)合適的協(xié)議實(shí)現(xiàn),然后再編寫對(duì)應(yīng)的適配器,以便將協(xié)議實(shí)現(xiàn)和 nonebot 框架連接起來,實(shí)現(xiàn) QQ 機(jī)器人的功能。
適配器可以理解為是一個(gè)橋梁,它的作用是將底層協(xié)議實(shí)現(xiàn)和 nonebot 框架連接起來,使它們能夠互相通信。在使用 nonebot 框架開發(fā) QQ 機(jī)器人時(shí),需要先根據(jù)所選的底層協(xié)議實(shí)現(xiàn),選擇相應(yīng)的適配器,然后根據(jù)適配器提供的 API 編寫 QQ 機(jī)器人的功能。
舉個(gè)例子,如果您選擇使用 go-cqhttp 作為底層協(xié)議實(shí)現(xiàn),那么您需要安裝 go-cqhttp,并選擇 go-cqhttp 適配器。這個(gè)適配器將 go-cqhttp 和 nonebot 框架連接起來,使得您可以通過 nonebot 框架來編寫 QQ 機(jī)器人的功能,并且 go-cqhttp 可以幫助您與 QQ 服務(wù)器通信。
因此,在使用 nonebot 框架開發(fā) QQ 機(jī)器人時(shí),需要根據(jù)所選的底層協(xié)議實(shí)現(xiàn),選擇相應(yīng)的適配器,并將其與 nonebot 框架結(jié)合使用,以實(shí)現(xiàn) QQ 機(jī)器人的功能。
-
修改go-cqhttp配置
修改配置
config.yml
文件,找到如下位置,修改地址及端口號(hào),后面nonebot機(jī)器人安裝要用到的...... # 反向WS設(shè)置 - ws-reverse: # 反向WS Universal 地址 # 注意 設(shè)置了此項(xiàng)地址后下面兩項(xiàng)將會(huì)被忽略 universal: ws://127.0.0.1:53245/cqhttp/ws # 反向WS API 地址 api: ws://127.0.0.1:53245/cqhttp/api # 反向WS Event 地址 event: ws://127.0.0.1:53245/cqhttp/event ......
-
新建nonebot qq機(jī)器人項(xiàng)目
如果你已經(jīng)按照推薦方式安裝了
nb-cli
,使用它創(chuàng)建一個(gè)空項(xiàng)目:nb create
根據(jù)引導(dǎo)進(jìn)行項(xiàng)目配置,完成后會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)項(xiàng)目目錄,項(xiàng)目目錄內(nèi)包含
bot.py
。如果未安裝
nb-cli
,使用你最熟悉的編輯器或 IDE,創(chuàng)建一個(gè)名為bot.py
的文件,內(nèi)容如下(這里以 onebot.v11適配器為例):import nonebot from nonebot.adapters.onebot.v11 import Adapter as ONEBOT_V11Adapter nonebot.init() app = nonebot.get_asgi() driver = nonebot.get_driver() driver.register_adapter(ONEBOT_V11Adapter) nonebot.load_builtin_plugins("echo") nonebot.load_from_toml("pyproject.toml") if __name__ == "__main__": nonebot.logger.warning("Always use `nb run` to start the bot instead of manually running!") nonebot.run(app="__mp_main__:app")
-
繼續(xù)配置編輯
.env.prod
文件端口,這里的53245
就是上面設(shè)置的cqhttp端口一致,第四行是超級(jí)管理員qqDRIVER=~fastapi HOST=127.0.0.1 # 配置 NoneBot 監(jiān)聽的 IP/主機(jī)名 PORT=53245 # 配置 NoneBot 監(jiān)聽的端口 DEBUG=true # 開啟 debug 模式 **請(qǐng)勿在生產(chǎn)環(huán)境開啟** SUPERUSERS=["123456789", "987654321"] # 配置 NoneBot 超級(jí)用戶 NICKNAME=["awesome", "bot"] # 配置機(jī)器人的昵稱 COMMAND_START='["/"]' # 配置命令起始字符
在命令行使用如下命令即可運(yùn)行這個(gè) NoneBot 實(shí)例:
# nb-cli nb run # 其他 python3 bot.py
運(yùn)行后會(huì)產(chǎn)生類似如下日志:
09-14 21:02:00 [INFO] nonebot | Succeeded to import "nonebot.plugins.base" 09-14 21:02:00 [INFO] nonebot | Running NoneBot... 09-14 21:02:00 [INFO] uvicorn | Started server process [1234] 09-14 21:02:00 [INFO] uvicorn | Waiting for application startup. 09-14 21:02:00 [INFO] uvicorn | Application startup complete. 09-14 21:02:00 [INFO] uvicorn | Uvicorn running on http://127.0.0.1:53245 (Press CTRL+C to quit)
至此,所有的配置都o(jì)ver了
我們來看一下最終效果:
文章來源:http://www.zghlxwxcb.cn/news/detail-415686.html
聲明:本博客為基礎(chǔ)學(xué)習(xí)性質(zhì),想要更加深入了解請(qǐng)自行研究官方文檔文章來源地址http://www.zghlxwxcb.cn/news/detail-415686.html
到了這里,關(guān)于NoneBot2,基于Python的聊天機(jī)器人的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!