nonebot2&go-cqhttp 安装与使用

写在前面

本篇适合刚接触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
  }
}

需要修改uinpasswordws_reverse_servers中的enabledreverse_urlpost_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!

现在,给做为 bot 的 qq 发送以下信息:

echo hello world!

kamuXiY