基于Nonebot2搭建QQ机器人(二)编写一个自动回复插件
目录
- 一、创建以及加载插件
- 二、了解事件相应器
- 三、编写插件
- 四、实现智能回复
- 1、API
- 2 、词库
- 五、附上教学源码
一、创建以及加载插件
在上一篇nonebot2配置的时候我们曾经在项目文件夹的src文件夹下创建了一个plugins文件夹。我们可以直接在这个文件夹下创建python文件编写代码,但是后期插件数量变多的时候plugins文件夹内会变得非常的杂乱,所以笔者建议每个插件单独创建一个文件夹,具体操作如下。
打开plugins文件夹,新建一个自命名文件夹。如图:
我这里创建了一个zdhf文件夹用于存放自动回复插件的py文件。但是由于原本的插件目录在plugins内,如果我们想让zdhf这个文件夹内的插件运行还需要修改一下bot.py的一些配置。
打开bot.py,在下面箭头位置添加
nonebot.load_plugins("src/plugins/zdhf")
这里的zdhf就是我们创建的zdhf文件夹,这样我们在这个文件夹内编写的py文件才能够被加载。
我们在zdhf文件夹下创建一个py文件,这样我们一个插件就已经成功创建并加载了。
nonebot2支持多种插件加载方式,具体可以参考官方文档。
官方文档-插件加载
二、了解事件相应器
官方文档-事件响应器
如果想了解的可以查阅官方文档,对于小白而言,从一个个的简单的范例可能更好的理解这些名词。
三、编写插件
代码解释:
首先导入模块,由于我们这里只需要完成自动回复,我们导入on_message模块。
至于on_message用法通过下面这个示例来理解。
from nonebot.adapters.cqhttp import Bot, Event
from nonebot.plugin import on_message
下面这部分是定义回复的内容,我这里选择字典来一一对应消息和回复。
#自定义回复词典
reply_dic = {'您好': '你也好' ,'早上好' : '早上好~' ,'晚安' : '做个好梦','我爱你' :'我也爱你'
}
首先创建以一个名为reply的事件,事件类型为on_message(消息事件响应器即机器人通过接受的消息进行处理反馈)括号里的priority为优先级,事件响应器的优先级代表事件响应器的执行顺序,同一优先级的事件响应器会 同时执行!,优先级数字越小越先响应!优先级请从 1 开始排序!
通俗理解就是,如果我想让一个优先级为99这个插件收到1+1时回复2,让优先级为100的插件回复3,那么系统会通过判断优先级来选择先发送2还是3,很显然会先发送2因为它的优先级更高。
reply = on_message(priority=100)
现在我们创建了reply事件,因为我们想让其完成自动回复消息的功能。
于是我们选择三种事件处理函数装饰器之一的handle()
对于事件处理函数装饰器可以参考官方文档:
官方文档-事件处理函数装饰器
具体用法如代码所示:
@reply.handle()
这里我定义了函数 reply_handle,他们被事件响应器的装饰器装饰从而成为事件响应器的事件处理函数。
定义函数的格式为:async def 函数名(bot: Bot, event: Event)
下面是函数内部代码解释:
由于我们目的是自动回复,那么则要首先获取QQ消息,
使用event.get_message()这个固定函数获取到QQ信息并转化为字符串,设为变量user_msg
下面判断获取的QQ信息是否在上面定义的自动回复字典内,如果在则发送字典对应的内容。
发送函数: await reply.finish(reply_msg)这里的reply_msg是我们想发送的消息内容,reply是我们上面定义的事件名称,finish表示事件到这结束。await可以理解为固定格式,如果想深入研究可以学习asyncio
user_msg = str(event.get_message()).strip()#对输入进行判断并处理try:reply_msg = reply_dic[user_msg]await reply.finish(reply_msg)except KeyError:await reply.finish()
此时我们已经完成了一个简单的自动回复机器人,我们启动机器人,发现机器人已经可以按照我们指定的要求回复了。
四、实现智能回复
由于我们在上面代码中设置的自动回复字典词汇量很少,很难实现智能的消息回复,如果想要实现智能化的回复可以有两种方式实现,使用API和添加词库。下面提供几种已知的API,如有其他好用的其他API可以在评论区留言:
1、API
青云客
小i机器人
小i机器人虽然不是api,但是可以通过爬虫抓包使用
天行API
收费
图灵机器人
收费,但是体验最好
2 、词库
百度云盘提取链接:https://pan.baidu.com/s/1gkAsFRF1EWnfMnVaRtGA_g
提取码:CR77
五、附上教学源码
from nonebot.adapters.cqhttp import Bot, Event
from nonebot.plugin import on_message#自定义回复词典
reply_dic = {'您好': '你也好' ,'早上好' : '早上好~' ,'晚安' : '做个好梦','我爱你' :'我也爱你'
}
#回复部分
reply = on_message(priority=100)
@reply.handle()
async def reply_handle(bot: Bot, event: Event):user_msg = str(event.get_message()).strip()#对输入进行判断并处理try:reply_msg = reply_dic[user_msg]await reply.finish(reply_msg)except KeyError:await reply.finish()
需要功能完善的自动回复插件的评论区留下邮箱
上一篇:基于Nonebot2搭建QQ机器人(一)机器人环境配置。
基于Nonebot2搭建QQ机器人(二)编写一个自动回复插件相关推荐
- 基于Nonebot2搭建QQ机器人(一)机器人环境配置
目录 一.Nonebot2介绍 二.Nonebot2安装 1.bot.py文件的配置 2..env文件的配置 3.env.dev文件配置 4.env.pord配置 三.go-cqhttp介绍 四.go ...
- 基于Nonebot2搭建QQ机器人(二):插件使用
文章目录 Nonebot2创建插件 1. 插件简介 1.1 模块插件(单文件形式) 1.2 包插件(文件夹形式) 1.3 创建插件 2. 加载插件 2.1 直接加载 2.2 跨域加载 3. 插件配置 ...
- 用Nonebot2搭建QQ机器人(一):我的学习经历(一)
1.NoneBot2的概述: NoneBot2 是一个现代.跨平台.可扩展的 Python 聊天机器人框架,它基于 Python 的类型注解和异步特性,能够为你的需求实现提供便捷灵活的支持.然后剩下的 ...
- 基于Mirai搭建QQ机器人监控B站直播
搭建自定义Mirai机器人 周末本来想继续学Vue来着,这不又搞这个了,唉,这计划赶不上变化啊. 参考文档 mamoe/mirai: 高效率 QQ 机器人支持库 Gradle 下载的依赖jar包在哪? ...
- 从零开始基于nonebot2搭建Q群机器人自动获取各大平台热搜
从零开始基于nonebot2搭建Q群机器人自动获取各大平台热搜 目录 从零开始基于nonebot2搭建Q群机器人自动获取各大平台热搜 安装步骤 使用方法 退出方法 启用方法 参考链接 安装步骤 安装步 ...
- 基于Nonebot2实现QQ聊天机器人商品查询【Nonebot插件教程】
文章目录 前言 商品页面分析 插件编写 彩蛋 前言 本插件是基于Nonebot2 的QQ聊天机器人.通过集成京东商品爬虫,将京东网站中的优质产品推荐给用户,本文对京东官网源码信息进行了分析,并附上了完 ...
- 第一章:基于 SpringBoot 快速搭建QQ机器人,并监听群事件
第一章:基于 SpringBoot 快速搭建QQ机器人 前言:知识与储备 这个QQ机器人能干什么? 第一步:搭建Maven项目环境 第二步:编写pom文件 第三步:编写启动类 第四步:创建配置文件 第 ...
- 「Java」基于Mirai的qq机器人开发踩坑笔记(其一)
目录 0. 前置操作 I. 安装MCL II. MCL自动登录配置 III. 安装IDEA插件 1. 新建Mirai项目 2. 编写主类 3. 添加外部依赖 4. IDEA运行 5. 插件打包 6. ...
- 「Java」基于Mirai的qq机器人开发踩坑笔记(其二)
目录 0. 配置机器人 1. onLoad方法 2. onEnable方法 3. 消息属性 4. 消息监听 I. 好友消息 II. 群聊消息 III. 无差别消息 5. 发送消息 I. 文本消息 II ...
- Python + Go-cqhttp + Pyqt5 —— 搭建QQ机器人
搭建QQ机器人 Go-cqhttp 简介 兼容性 拓展支持 性能 下载安装 跳过启动的五秒延时 使用代码接收消息 测试[API文档](https://docs.go-cqhttp.org/api/) ...
最新文章
- PR详解及二分类的PR曲线绘制
- 003_SpringBoot整合Filter
- 关于如何在matlab中导入并翻译Hypemesh导出的大型刚度矩阵txt文本
- create_softLink.sh
- php ci提交表单验证,ci表单验证代码
- sonar的安装以及使用
- 关于laravel框架中and 和orWhere 的多条件嵌套
- 腾讯云 Centos 配置 JDK Tomcat Mysql
- ASP.Net请求处理机制初步探索之旅 - Part 2 核心
- go 语言ase ecb加密_Go技术日报(20201112)
- C/C++中数组作为函数形参后退化为指针
- bundle中vim相关快捷键的使用
- Sass中使用@each循环
- 【js获取当天时间0点和23点59分59秒】
- js中的浅拷贝与深拷贝
- shell 多个引号冲突_Shell 引号嵌套
- oracle耳机,新手耳机选购排行榜出炉,这三款耳机不仅做工精细,音质还能打
- 人人都能学会数据分析-笔记
- 全面认识当前市面99%的大数据技术框架(附:各大厂大数据技术应用文章)
- input标签type为number时如何去除加减按钮效果