当前位置: 首页 > news >正文

Nonebot实战之编写插件1

前言

应粉丝群内粉丝要求,我也决定写一个Nonebot插件编写教程,从0开始教学。有些不对的地方也欢迎大家指正,修改。

开始

准备

  1. 合适的代码编辑器
  2. 一定的python基础
  3. 懂得提问的方式

代码编辑器

代码编辑器有很多种选择,比如 vscodepycharm 等等,我个人是比较倾向于使用pycharm,可能因为用习惯了吧,当然你也可以使用vscode,Nonebot官方也是推荐使用vscode来进行程序的编写

详情请参考 编辑器支持 | NoneBot

新建项目

我们随便找个地方来新建项目

比如我这里就是在D盘下Python开发->bot_class目录下新建了项目,那么怎么创建一个新的项目呢?在你想要创建项目的地方打开cmd,输入 nb create 接着按照引导一步一步来就行了,如果不会操作请移步我的bot搭建教程查看,链接放这: 新版nonebot,go-cqhttp搭建qq机器人保姆级教程_onebotqq机器人_萌新源的博客-CSDN博客

记住,我是比较习惯将插件放在src目录下,因为旧版nonebot就是如此,所以为了方便我选择将插件放在src目录下,你们可以自行选择放在项目根目录或者src目录下

第一个插件

先上全代码

from nonebot import on_regex
from nonebot.adapters.onebot.v11 import Bot, Eventcici = on_regex(pattern=r'^你好$')
@cici.handle()
async def cici_handle(bot: Bot, event: Event):await cici.finish('你好啊,看起来你已经成功学会了关键词检测回复了呢')

导入包的作用

这里解释一下我们导入的包的作用

1.

from nonebot import on_regex 这行代码我们导入了on_regex包,其作用就是正则匹配,比如你发“你好”此时与我们设定的响应规则一致,于是插件就会开始工作,当然你也可以将命令修改为其他的,都可以。注意这里是正则匹配,不是关键词检测,比如我命令设置的是你好,但是用户发送你好呀此时我们的插件就不会响应,那如果想要你好呀也响应怎么办,下节课讲,有个包叫on_keyword,懂英语的同学一看就知道这个包是做什么的了吧

2.

from nonebot.adapters.onebot.v11 import Bot, Event 这里我们导入了Bot和Event,Bot的作用就是去调用gocqhttp[以下简称平台]的api,比如我们代码中await cici.finish('你好啊,看起来你已经成功学会了关键词检测回复了呢')也可以调用平台api,这样写:await bot.send_group_msg(group_id=event.group_id,message='你好啊,看起来你已经成功学会了关键词检测回复了呢')效果是一样的,只不过后者更麻烦一点

注册事件响应器

在代码中 cici = on_regex(pattern=r'^你好$') 我们注册了一个名为“cici”正则事件响应器,至于名字可以随意更换,跟着自己的感觉来就好

事件处理函数

在事件响应器中,事件处理流程可以由一个或多个“事件处理函数”组成,这些事件处理函数将会按照顺序依次对事件进行处理,直到全部执行完成或被中断。我们可以采用事件响应器的“事件处理函数装饰器”来添加这些“事件处理函数”。

顾名思义,“事件处理函数装饰器”是一个装饰器(decorator),那么它的使用方法也同函数定义中所展示的包装用法相同。

from nonebot import on_regex
from nonebot.adapters.onebot.v11 import Bot, Eventcici = on_regex(pattern=r'^你好$')
@cici.handle()
async def cici_handle(bot: Bot, event: Event):pass #不做任何事

如上方示例所示,我们使用 cici 响应器的 handle 装饰器装饰了一个函数 cici_handlecici_handle 函数会被添加到 cici 的事件处理流程中。在 cici 响应器被触发之后,将会依次调用 cici 响应器的事件处理函数,即 cici_handle 来对事件进行处理。

事件响应器操作

在事件处理流程中,我们可以使用事件响应器操作来进行一些交互或改变事件处理流程,例如向机器人用户发送消息或提前结束事件处理流程等。

事件响应器操作与事件处理函数装饰器类似,通常作为事件响应器 Matcher 的类方法存在,因此事件响应器操作的调用方法也是 Matcher.func() 的形式。不过不同的是,事件响应器操作并不是装饰器,因此并不需要@进行标注。

from nonebot import on_regex
from nonebot.adapters.onebot.v11 import Bot, Eventcici = on_regex(pattern=r'^你好$')
@cici.handle()
async def cici_handle(bot: Bot, event: Event):await cici.finish('你好啊,看起来你已经成功学会了关键词检测回复了呢')#await cici.send('你好啊,看起来你已经成功学会了关键词检测回复了呢')

如上方示例所示,我们使用 cici 响应器的 finish 操作方法向机器人用户回复了 你好 并结束了事件处理流程。效果如下:

值得注意的是,在执行 finish 方法时,NoneBot 会在向机器人用户发送消息内容后抛出 FinishedException 异常来结束事件响应流程。也就是说,在 finish 被执行后,后续的程序是不会被执行的。如果你需要回复机器人用户消息但不想事件处理流程结束,可以使用注释的部分中展示的 send 方法。

结尾

至此,你已经完成了nonebot插件编写的第一课,你已经懂得如何注册一个事件响应器,并且让bot在触发命令的情况下回复用户信息。这是一个好的开始,也祝你能够早日成为大佬,也欢迎你加入Nonebot社区,为Nonebot社区贡献一份属于自己的力量

http://www.lryc.cn/news/121617.html

相关文章:

  • Linux-C++开发项目:基于主从Reactor模式的高性能并发服务器
  • 【Linux的开胃小菜】Linux系统安装后初始化配置操作
  • Java批量下载书籍图片并保存为PDF的方法
  • flutter 创建lib
  • 深度剖析堆栈指针
  • C++笔记之静态成员函数的使用场景
  • Nginx的优化和防盗链
  • 第二十次CCF计算机软件能力认证
  • 一篇文章带你了解Java发送邮件:使用JavaMail API发送电子邮件的注意事项、发送附件等
  • kubernetes的日志
  • 设计HTML5文本
  • msvcr120.dll丢失怎样修复?总结三个dll修复方法
  • 选择题方法论——颉斌斌
  • 23.8.8 杭电暑期多校7部分题解
  • 《24海南大学835软件工程考研经验贴》
  • 【yolo系列:运行报错AttributeError: module ‘torch.nn‘ has no attribute ‘Mish‘】
  • Leetcode 剑指 Offer II 039. 直方图最大矩形面积
  • SpringBoot案例-部门管理-修改
  • element-ui表格数据为空,图片占位提示
  • C++ STL vector 模拟实现
  • 51单片机学习--红外遥控(外部中断)
  • 后端开发10.规格模块
  • 腾讯出了一个新聊天软件M8
  • C++ QT(一)
  • 微信小程序时钟
  • HttpRunner自动化工具之设置代理和请求证书验证
  • opsForHash() 与 opsForValue 请问有什么区别?
  • 具有吸引子的非线性系统(MatlabSimulink实现)
  • Linux一些常见的命令
  • 正则表达式的基本知识