目录
- 一、创建以及加载插件
- 二、了解事件相应器
- 三、编写插件
- 四、实现智能回复
- 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()