天天看點

nonebot2 安裝與使用nonebot2 安裝與使用

nonebot2 安裝與使用

寫在前面

本篇适合剛接觸bot的初學者學習

歡迎喜歡命運2,并對qq群bot感興趣的小夥伴加入

[命運2關聯bot開發群]:924026546

本文另發于個人部落格:這裡

事前準備

  • 一台電腦(廢話)
  • 一台伺服器(可選)
  • python3.8 或以上版本
  • 手(?

環境安裝

官方文檔:NoneBot

如果是從 1 更新到 2,先解除安裝之前的版本:

pip uninstall nonebot
           

腳手架安裝(官方推薦)

pip install nb-cli
           

若安裝失敗請使用下面這個方法:

直接安裝(備選方案)

pip install nonebot2
或
poetry add nonebot2
           

若安裝失敗…

  • 檢視 python 預設版本是否不符(需要 3.8 或以上)
  • 檢視 pip 版本是否安裝或對應 python 版本是否正常(通常使用 pip3 指令,若 pip3 預設使用 python3.5,則需更改換)
  • 若有其他錯誤,請複制錯誤資訊并百度

開始建立一個 bot

若你已經安裝了 nb-cli,可以使用(lan)引(ren)導安裝方式:

nb
           
d8b   db  .d88b.  d8b   db d88888b d8888b.  .d88b.  d888888b
888o  88 .8P  Y8. 888o  88 88'     88  `8D .8P  Y8. `~~88~~'
88V8o 88 88    88 88V8o 88 88ooooo 88oooY' 88    88    88
88 V8o88 88    88 88 V8o88 88~~~~~ 88~~~b. 88    88    88
88  V888 `8b  d8' 88  V888 88.     88   8D `8b  d8'    88
VP   V8P  `Y88P'  VP   V8P Y88888P Y8888P'  `Y88P'     YP


Welcome to NoneBot CLI!
? What do you want to do?  (Use arrow keys)
 ❯ Show Logo
   Create a New Project
   Run the Bot in Current Folder
   Create a New NoneBot Plugin
   List All Published Plugins
   Search for Published Plugin
   Install a Published Plugin
   Update a Published Plugin
   Remove an Installed Plugin
   Create a Custom Adapter
   List All Published Adapters
   Search for Published Adapters
   Build Docker Image for the Bot
   Deploy the Bot to Docker
   Stop the Bot Container in Docker
           

選擇第二項

Create a New Project

建立一個 bot 項目

依次:

  • 輸入項目名
  • 選擇第一項建立檔案夾
  • 載入 nonebot 内置插件
  • 因為我們使用 cqhttp,是以隻選擇 cqhttp 就行了

之後在目錄下就會建立一個以 bot 項目命名的檔案夾

使用

cd 項目名
           

進入目錄下,輸入

nb run
           

出現一串 ip 即為成功:

03-30 10:18:02 [INFO] uvicorn | Started server process [8480]
03-30 10:18:02 [INFO] uvicorn | Waiting for application startup.
03-30 10:18:02 [INFO] uvicorn | Application startup complete.
03-30 10:18:02 [INFO] uvicorn | Uvicorn running on http://127.0.0.1:8080 (Press CTRL+C to qui
t)
           

這時候,你的 bot 就建立成功了,但與 qq 互動,還需要一個協定來進行 QQ 資訊的發送與接收

cqhttp 協定使用

cqhttp 本質上是個無頭 qq 用戶端,可以用來接收和發送 QQ 資訊,通過與 cqhttp 互動便能實作 bot 的功能

單純運作 NoneBot 執行個體并不會産生任何效果,因為此刻 QQ 這邊還不知道 NoneBot 的存在,也就無法把消息發送給它,是以現在需要使用一個無頭 QQ 來把消息等事件上報給 NoneBot。
QQ 協定端舉例:
go-cqhttp基于 MiraiGo
cqhttp-mirai-embedded
Mirai+ cqhttp-mirai
Mirai+Mirai Native+ CQHTTP
OICQ-http-api(基于 OICQ)

go-cqgttp 的使用

go-cqhttp 相對比較容易使用,本篇就以 go-cqhttp 來說明

下載下傳 go-cqhttp 檔案

下載下傳位址:下載下傳

windows:

go-cqhttp_windows_amd64.zip

Linux:

go-cqhttp_linux_amd64.tar.gz

解壓檔案,移動到檔案目錄下

第一次啟動 go-cqhttp

使用

./go-cqhttp
           

啟動

第一次啟動會自動退出,并要求修改參數

參考:

{
  uin: 機器人QQ号
  password: 機器人密碼
  encrypt_password: false
  password_encrypted: ""
  enable_db: true
  access_token: ""
  relogin: {
    enabled: true
    relogin_delay: 3
    max_relogin_times: 0
  }
  _rate_limit: {
    enabled: false
    frequency: 1
    bucket_size: 1
  }
  ignore_invalid_cqcode: false
  force_fragmented: false
  heartbeat_interval: 0
  http_config: {
    enabled: false
    host: "0.0.0.0"
    port: 5700
    timeout: 0
    post_urls: {}
  }
  ws_config: {
    enabled: false
    host: "0.0.0.0"
    port: 6700
  }
  ws_reverse_servers: [
    {
      enabled: true
      reverse_url: ws://127.0.0.1:8080/cqhttp/ws
      reverse_api_url: ws://you_websocket_api.server
      reverse_event_url: ws://you_websocket_event.server
      reverse_reconnect_interval: 3000
    }
  ]
  post_message_format: array
  use_sso_address: false
  debug: false
  log_level: ""
  web_ui: {
    enabled: false
    host: 127.0.0.1
    web_ui_port: 9999
    web_input: false
  }
}
           

需要修改

uin

password

ws_reverse_servers

中的

enabled

reverse_url

post_message_format

這幾項

uin: 機器人QQ号
password: 機器人密碼
enabled: true
reverse_url: ws://127.0.0.1:8080/cqhttp/ws
post_message_format: array
           

修改完成後重新啟動 go-cqhttp,按照提示登入 qq 即可

如果同時開着 nonebot2 的話,nb2 的日志上就會顯示兩條連接配接 cqhttp 的提示:

09-14 21:31:16 [INFO] uvicorn | ('127.0.0.1', 12345) - "WebSocket /cqhttp/ws" [accepted]
09-14 21:31:16 [INFO] nonebot | WebSocket Connection from CQHTTP Bot 你的QQ号 Accepted!