ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-12-29 17:02:14  阅读:624  来源: 互联网

标签:QQ Nonebot2 插件 配置 机器人 nonebot cqhttp env go


序言


本系列旨在记录笔者学习nonebot2以及搭建过程分享。
主要分为Nonebot2基础和插件部分。插件主要关于笔者已上线运营的服务于本校的教务系统机器人,其自12月2日上线以来,截至2021年12月29日本校用户突破1k人,总使用次数突破3w次。

一、Nonebot2介绍


摘录于Nonebot2官方文档 https://v2.nonebot.dev/
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 通信方式
支持多个机器人账号负载均衡
提供直观的交互式会话接口
提供可自定义的权限控制机制
多种方式渲染要发送的消息内容,使对话足够自然

二、Nonebot2安装


官方文档
https://v2.nonebot.dev/guide/installation.html

官网提供了两种安装方式(脚手架安装、不使用脚手架安装)
这里采用脚手架安装方式

创建一个空文件夹,我的命名是(new_bot)添加到pycharm项目中
打开pycharm的终端键入

 pip install nb-cli

安装成功后,在终端键入

 nb create

如果安装成功会出现下图所示,反之则安装失败。
在这里插入图片描述
如果安装失败,检查:
1、pip安装环境下的 Python 版本应>= 3.7。
2、安装 NoneBot 2 之前卸载 NoneBot 1

nb create意思是创建实例(官方文档-创建实例),没有安装问题则继续下面的操作。

这里的Project Name 输入自定义名称后按回车。出现如下图所示,这个意思是选择存放插件的文件夹,我习惯于选择src文件夹。什么是插件在后面会给大家介绍。
在这里插入图片描述
点击回车,按照输入:y,继续点击回车。
这里出现了一个选择列表:cqhttp、ding、mirai、feishu。
这个意思是让你选择适配器。目前nonebot2支持的适配器有QQ、钉钉、Mirai-API-HTTP、飞书,由于这里是基于QQ的机器人,所以这里选择cqhttp。
在这里插入图片描述
注意:是用上下键选择,空格键确定,如果按空格会出现提示未选择适配器一行,需要重新进行创建。

如果实例成功创建,我们可以发现在new_bot文件夹下多出了一个(csdn)文件夹,“csdn”即是我们创建实例时输入的Project Name。
在这里插入图片描述

安装一些需要的库(直接复制粘贴即可)如果使用的时候缺少模块使用pip安装即可,有时候需要换源大部分使用清华源就可以成功安装:
清华源:https://pypi.tuna.tsinghua.edu.cn/simple/
使用方法:pip语句后加-i https://pypi.tuna.tsinghua.edu.cn/simple/

pip install pydantic loguru pygtrie httpx python-dotenv uvicorn fastapi requests selenium aiocqhttp ffmpeg aiohttp -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install nonebot2 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install nonebot-plugin-apscheduler nonebot-adapter-cqhttp  -i https://pypi.tuna.tsinghua.edu.cn/simple/

下面进行一些基本配置
官方文档-基本配置
1、bot.py文件的配置
位置如图所示
在这里插入图片描述
bot.py中需要写入的配置信息已经放在下面了,可以直接复制粘贴覆盖原有的信息。
后面写插件的时候会具体教大家配置。

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

import nonebot
from nonebot.adapters.cqhttp import Bot as CQHTTPBot

# Custom your logger
# 
# from nonebot.log import logger, default_format
# logger.add("error.log",
#            rotation="00:00",
#            diagnose=False,
#            level="ERROR",
#            format=default_format)

# You can pass some keyword args config to init function
nonebot.init()
app = nonebot.get_asgi()

nonebot.load_plugins("src/plugins")
driver = nonebot.get_driver()
driver.register_adapter("cqhttp", CQHTTPBot)

nonebot.load_builtin_plugins()

# Please DO NOT modify this file unless you know what you are doing!
# As an alternative, you should use command `nb` or modify `pyproject.toml` to load plugins
nonebot.load_from_toml("pyproject.toml")

# Modify some config / config depends on loaded configs
# 
# config = driver.config
# do something...


if __name__ == "__main__":
    nonebot.logger.warning("Always use `nb run` to start the bot instead of manually running!")
    nonebot.run(app="__mp_main__:app")

2、.env文件的配置

NoneBot 在启动时将会从系统环境变量或者 .env 文件中寻找变量 ENVIRONMENT (大小写不敏感),默认值为 prod。
这将引导 NoneBot 从系统环境变量或者 .env.{ENVIRONMENT} 文件中进一步加载具体配置。

.env 文件是基础环境配置文件,该文件中的配置项在不同环境下都会被加载,但会被 .env.{ENVIRONMENT} 文件中的配置所覆盖。

现在,我们在 .env 文件中写入当前环境信息:

# .env
ENVIRONMENT=dev
CUSTOM_CONFIG=common config  # 这个配置项在任何环境中都会被加载

3、env.dev文件配置
因为在.env文件中已经添加了ENVIRONMENT=dev,这里需要配置一下env.dev文件信息

HOST=127.0.0.1
PORT=8890
DEBUG=true

注意这里的PORT端口需要是未被使用的,打开任务管理器可以查看端口是否被占用
在这里插入图片描述
4、env.pord配置
配置信息如下

HOST=127.0.0.1
PORT=8890
SECRET=
ACCESS_TOKEN=

由于在上一步设置了端口号,这里的端口号需要与env.dev端口号相同。
env.pord配置信息较多,初学者可以不选择全部配置,按照上面配置即可。
如果有兴趣可以参考官方给出的配置信息

HOST=0.0.0.0  # 配置 NoneBot 监听的 IP/主机名
PORT=8080  # 配置 NoneBot 监听的端口
DEBUG=true  # 开启 debug 模式 **请勿在生产环境开启**
SUPERUSERS=["123456789", "987654321"]  # 配置 NoneBot 超级用户
NICKNAME=["awesome", "bot"]  # 配置机器人的昵称
COMMAND_START=["/", ""]  # 配置命令起始字符
COMMAND_SEP=["."]  # 配置命令分割字符

# Custom Configs
CUSTOM_CONFIG1="config in env file"
CUSTOM_CONFIG2=  # 留空则从系统环境变量读取,如不存在则为空字符串

三、go-cqhttp介绍


go-cqhttp官方文档
https://docs.go-cqhttp.org/

四、go-cqhttp安装


go-cqhttp在Github的下载链接

这里有Linux和windows的不同方式的下载链接,根据自己需要选择,本篇只介绍windows环境下的安装方式。Linux环境部署会在本系列后面更新。
在这里插入图片描述
下载后得到一个名称为go-cqhttp_windows_amd64.exe的exe文件,我习惯于把它放在项目文件夹下。
在这里插入图片描述
下面进行go-cqhttp的配置
在go-cqhttp文件所在的文件夹的空白处,打开powershell(shift+鼠标右键在此次打开power shell)
输入

.\go-cqhttp_windows_amd64.exe

会出现如下所示,选择通信方式。
如果对这通讯方式不了解的小白可以选择反向Websocket通信跟着我一起做。
在这里插入图片描述
选择成功后按回车,此时提示:默认配置文件已生成,请修改 config.yml 后重新启动!
关闭power shell,我们会发现原来的go-cqhttp所在的目录下会出现一个config.yml文件。
在这里插入图片描述
下面进行config.yml文件信息配置。
对于反向socket我们只需要配置两个位置的信息。

这里的uin输入机器人的QQ号,密码可以不用加,注意QQ号前空格不要删掉。

account: # 账号相关
  uin: 123456789  # QQ账号
  password: '' # 密码为空时使用扫码登录

这里需要修改universal,把后面的改成 ws://127.0.0.1:8890/cqhttp/ws,这里的8890改成你自己的端口号,端口号和env.dev中的端口号要一致。

# 连接服务列表
servers:
  # 添加方式,同一连接方式可添加多个,具体配置说明请查看文档
  #- http: # http 通信
  #- ws:   # 正向 Websocket
  #- ws-reverse: # 反向 Websocket
  #- pprof: #性能分析服务器
  # 反向WS设置
  - ws-reverse:
      # 反向WS Universal 地址
      # 注意 设置了此项地址后下面两项将会被忽略
      universal: ws://127.0.0.1:8890/cqhttp/ws
      # 反向WS API 地址
      api: ws://your_websocket_api.server
      # 反向WS Event 地址
      event: ws://your_websocket_event.server
      # 重连间隔 单位毫秒
      reconnect-interval: 3000
      middlewares:
        <<: *default # 引用默认中间件

到这里go-cqhttp就已经配置好了。

四、开启实例


启动机器人需要两个步骤

1、开启nonebot。
右键点击运行bot.py
在这里插入图片描述
如果前面的配置没有问题,此时运行成功界面如图所示
在这里插入图片描述
2、开启go-cqhttp
回到原来go-cqhttp所在目录文件下,打开power shell 输入

.\go-cqhttp_windows_amd64.exe

如果go-cqhttp配置成功会出现一个二维码,使用在配置文件中填写的QQ扫码登录。

登陆成功后,如图所示
在这里插入图片描述
此时机器人就已经开启了,我们测试一下是否成功运行。我们给机器人发送/echo Hello world。如图:
在这里插入图片描述
这样我们的机器人就已经成功开启了,但这只是一个裸板机器人,想要实现更多有趣的功能还需要编写插件,下面一篇将带着大家编写一些简单的插件。

标签:QQ,Nonebot2,插件,配置,机器人,nonebot,cqhttp,env,go
来源: https://blog.csdn.net/realttr/article/details/122209229

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有