基于Nonebot2搭建QQ机器人(一):环境配置

文章目录

  • Nonebot2 搭建流程
    • 一、 概述
      • 1、 引言
      • 2、 框架简介
    • 二、 Nonebot安装
      • 1、 搭建脚手架
      • 2、 使用方式
      • 3、 环境配置
      • 4、 修改配置文件
    • 三、 go-cqhttp配置
      • 1、 通过网络
      • 2、 通过配置文件
        • 2.1 账号配置
        • 2.2 下载地址配置
        • 2.3 其他配置

Nonebot2 搭建流程

一、 概述

1、 引言

在前面使用flask+gocqhttp实现一个qq机器人后,大家应该会觉得非常麻烦吧。那么有没有更加方便的方法去实现我的的qq机器人呢?

但是是有的。我们可以使用现成的框架来实现这个qq聊天机器人。那么,现在开始,我们就来开始学习如何使用Nonebot2框架来更简便的搭建一个我们期望中的机器人!

2、 框架简介

NoneBot2 是一个可扩展的 Python 异步机器人框架,它会对机器人收到的事件进行解析和处理,并以插件化的形式,按优先级分发给事件所对应的事件响应器,来完成具体的功能。

除了起到解析事件的作用,NoneBot 还为插件提供了大量实用的预设操作和权限控制机制。对于命令处理,它更是提供了完善且易用的会话机制和内部调用机制,以分别适应命令的连续交互和插件内部功能复用等需求。

得益于 Python 的 asyncio (opens new window)机制,NoneBot 处理事件的吞吐量有了很大的保障,再配合 WebSocket 通信方式(也是最建议的通信方式),NoneBot 的性能可以达到 HTTP 通信方式的两倍以上,相较于传统同步 I/O 的 HTTP 通信,更是有质的飞跃。

需要注意的是,NoneBot 仅支持 Python 3.7.3 以上版本

特色:

  • NoneBot2 的驱动框架 Driver 以及通信协议 Adapter 均可自定义,并且可以作为插件进行替换/添加!
  • 提供使用简易的脚手架
  • 提供丰富的官方插件
  • 提供可添加/替换的驱动以及协议选项
  • 基于异步 I/O
  • 同时支持 HTTP 和反向 WebSocket 通信方式
  • 支持多个机器人账号负载均衡
  • 提供直观的交互式会话接口
  • 提供可自定义的权限控制机制
  • 多种方式渲染要发送的消息内容,使对话足够自然

好啦,文字我就不在多赘述了,大家想要了解详情,可以到官方文档去了解,接下来开始我们的主题:环境搭建

二、 Nonebot安装

1、 搭建脚手架

Nonebot有两种安装形式:

  • 搭建脚手架安装
  • 纯净安装

这里我们使用脚手架安装,其更为方便

  • 脚手架安装其已经安装了驱动器和协议配置器等,其更适合新手使用

安装方式

conda create -n nonebot python=3.9  # 创建虚拟环境
conda activate nonebot  # 进入虚拟环境
pip install nb-cli  # 安装脚手架
pip install nonebot-adapter-onebot  # 安装onebot调度器

# 安装一些需要用到的库
pip install pydantic loguru pygtrie  
pip install nonebot2 
pip install nonebot_plugin_gocqhttp  # 安装需要使用的插件,这里使用插件启动go-cqhttp,无序安装额外的软件

这时候我们就把框架搭建好了

初次使用

# 直接使用 nb 命令
nb
# 或使用 Python 执行 module
python -m nb_cli

2、 使用方式

nb-cli 具有两种使用方式:

  1. 命令行指令

    查看帮助信息:

    $ nb --helpUsage: nb [OPTIONS] COMMAND [ARGS]...
    Options:  -V, --version  Show the version and exit.  --help         Show this message and exit.
    ...
    

    Copy

    查看子命令帮助:

    $ nb plugin --helpUsage: nb plugin [OPTIONS] COMMAND [ARGS]...
      Manage Bot Plugin.
    Options:  --help  Show this message and exit.
    ...
    

    Copy

  2. 交互式选择(支持鼠标)

    交互式选择菜单:

    $ nbWelcome to NoneBot CLI![?] What do you want to do? (Use ↑ and ↓ to choose, Enter to submit)...
    

    Copy

    交互式子命令菜单:

    $ nb plugin[?] What do you want to do? (Use ↑ and ↓ to choose, Enter to submit)...
    

3、 环境配置

创建一个存储代码的目录,在使用脚手架生成代码

mkdir nb_bot  # 创建存储文件的目录
cd nb_bot  
nb create  # 生成项目

然后依次这样选择,当然也可以根据爱好自己选择,注意机器人框架要选择nonebot11

基于Nonebot2搭建QQ机器人(一):环境配置_第1张图片

创建完成后,如果使用nb run命令运行没有报错,说明onebot配置成功

启动方式:

  1. 通过脚手架

    nb run [--file=bot.py] [--app=app]
    
  2. 直接通过python启动

    python bot.py
    

4、 修改配置文件

关于配置项,详细的可以看官方文档:https://v2.nonebot.dev/docs/tutorial/configuration#driver

修改配置文件的话,我们就使用vscode来远程修改

基于Nonebot2搭建QQ机器人(一):环境配置_第2张图片

连接后的界面是这样的!

然后,我们将bot.py修改为:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import nonebot
from nonebot.adapters.onebot.v11 import Adapter as ONEBOT

nonebot.init()
app = nonebot.get_asgi()

driver = nonebot.get_driver()
driver.register_adapter(ONEBOT)
nonebot.load_builtin_plugins("echo")
nonebot.load_plugin("nonebot_plugin_gocqhttp")

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")

修改.env.dev为:

HOST=127.0.0.1
PORT=8890
LOG_LEVEL=DEBUG
FASTAPI_RELOAD=true
LOG_LEVEL=DEBUG

修改.env.pord为:

HOST=127.0.0.1
PORT=8890

最后,输入nb run就可以运行了,向qq发送/echo 1,会回复一就说明设置成功

三、 go-cqhttp配置

1、 通过网络

该插件提供一个简单的 WebUI, 可以直接在图形界面中添加账户:

启动项目后,直接访问:http://127.0.0.1:8890/go-cqhttp/这个链接就可以进入到配置账户的web界面了

基于Nonebot2搭建QQ机器人(一):环境配置_第3张图片

在这个界面输入我们的qq和密码,当然可以不输入密码,使用扫码登录,但是云服务器的话会出现一点问题!同时也可以选择登录的设备!

设置完成后点击登录,后面的操作和go-cqhttp应用的操作类似

基于Nonebot2搭建QQ机器人(一):环境配置_第4张图片

同时会出现一个控制台的界面

后面我们再运行的时候,就都不需要登录了

2、 通过配置文件

本项目提供以下可选配置,请在.env中自行选择进行配置

该插件的地址为:https://github.com/mnixry/nonebot-plugin-gocqhttp

如果想要获取更多配置文件相关信息,请阅读源代码

2.1 账号配置

GOCQ_ACCOUNTS: 要登录的 QQ 账号列表, 为一个 json 目录

  • 支持的领域:

    • uin: QQ账号(必填)
    • password: QQ密码,不填将使用扫码登录
    • protocol: 数字, 是登录使用的客户端协议

2.2 下载地址配置

GOCQ_URL: 下载 URL,默认为空,设置该项目以下与下载相关的配置项目将失效

GOCQ_DOWNLOAD_DOMAINS: 下载域名, 会列出最稀少的进行下载

  • 默认值

    [
      "download.fastgit.org",  # Download mirror provided by FastGit
      "ghdown.obfs.dev",  # Download mirror over Cloudflare worker
      "github.com",  # Official GitHub download
    ]
    

GOCQ_REPO:要下载的仓库,默认为Mrs4s/gocqhttp

GOCQ_VERSION: 要下载的版本,默认为空版本,即下载最新版本

GOCQ_FORCE_DOWNLOAD`: 强制在启动时下载,默认为`false

2.3 其他配置

GOCQ_PROCESS_KWARGS:创建进程代码时的参数,请参照进行任选修改

GOCQ_WEBUI_USERNAME/ GOCQ_WEBUI_PASSWORD: WebUI 的登录凭证,不设置即不进行验证

GOCQ_TUNNEL_PORT: 可以用于设置服务器的连接配置,在指定服务器的网络环境创建一个HTTP服务器,使用二维码登录的时候可能有用。为空,即不创建

  • 此功能为任选功能 在使用前在运行环境中pip install nonebot-plugin-gocqhttp[proxy]安装补以全依赖
  • 请在不使用时关闭以防止被替代
  • 如果您在中国境内连接国外服务器请不要尝试通过此功能,有很大可能导致服务器IP被屏蔽
  • 关于如何在您的设备上使用该功能提供的代理,请搜索如何在<设备系统>上使用HTTP代理

把这些配置完成后,我们就可以对向我们的qq号发送/echo hello

你可能感兴趣的:(#,机器人,flask,python)