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.hqwc.cn/news/65899.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云服务器地域怎么选?可以改吗?

阿里云服务器地域和可用区怎么选择?地域是指云服务器所在物理数据中心的位置,地域选择就近选择,访客距离地域所在城市越近网络延迟越低,速度就越快;可用区是指同一个地域下,网络和电力相互独立的区域&#…

tkinter打造三维绘图系统,附源代码

文章目录 输入数据加载数据绘图函数源代码 Python绘图系统系列:将matplotlib嵌入到tkinter 简单的绘图系统 数据导入 输入数据 三维绘图需要一个新的坐标变量,设置为z,这个改改UI就可以办到,并不困难。但是,此前用于…

【EI复现】考虑区域多能源系统集群协同优化的联合需求侧响应模型(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

yo!这里是STL::list类简单模拟实现

目录 前言 重要接口实现 框架 默认成员函数 迭代器(重点) 1.引言 2.list迭代器类实现 3.list类中调用实现 增删查改 后记 前言 我们知道,stl中的vector对应数据结构中的顺序表,string类对应字符串,而今天要…

时序预测 | MATLAB实现CNN-BiGRU-Attention时间序列预测

时序预测 | MATLAB实现CNN-BiGRU-Attention时间序列预测 目录 时序预测 | MATLAB实现CNN-BiGRU-Attention时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-BiGRU-Attention时间序列预测,CNN-BiGRU-Attention结合注意力机制时…

Streamlit项目: 轻松搭建部署个人博客网站

文章目录 1 前言1.1 探索 Streamlit:轻松创建交互式应用1.2 最全 Streamlit 教程专栏 2 我的个人博客网站已上线!2.1 一个集成了智能中医舌诊-中e诊专栏的博客网站2.2 前期准备2.3 使用 Streamlit Cloud 运行 3 知识点讲解3.1 实现多页面:两种…

KMP算法比较次数

主串T “abaabaabcabaabc”,模式串S“abaabc”,采用KMP算法匹配,到匹配成功为止,比较次数是: 序号: 1 2 3 4 5 6 模式串:a b a a b c next[j]: 0 1 1 2 2 3 关于next数组求法&#…

Tomcat的多实例和动静分离

目录 一、多实例 二、 nginxtomcat的负载均衡和动静分离 三、Tomcat 客户端->四层代理->七层代理->tomcat服务器 实验: 问题总结: tomcat日志文件:/usr/local/tomcat/logs/catalina.out 一、多实例 在一台服务器上有多个tomc…

如何在电力行业运用IPD?

电力行业是国民经济众多垄断行业中较早实施改革的行业之一。近几年我国电力行业保持着较快的发展速度,也取得了很大的成绩,发电机容量和发电量居世界首位。2015-2020年,全国发电量不断攀升。 电力是以电能作为动力的能源。电力的发现和应用掀…

【BASH】回顾与知识点梳理(十四)

【BASH】回顾与知识点梳理 十四 十四. 文件与目录的默认权限与隐藏权限14.1 文件预设权限:umaskumask 的利用与重要性:专题制作 14.2 文件隐藏属性chattr (配置文件案隐藏属性)lsattr (显示文件隐藏属性) 14.3 文件特殊权限: SUID, SGID, SBI…

打造企业或者个人IP引流法

打造企业或者个人IP引流法. 大家好,我是百收网SEO编辑:狂潮老师,今天给大家分享企业IP打造的方法 首先我们想让人知道你的企业叫什么,怎么找到你的企业 这个时候我们就需要去各大平台发布信息,客户想了解直接去搜索…

Torch基本操作扫盲

torch.rand是均匀分布采样 torch.randn是标准正态分布采样 同时设定好了GPU种子 高斯/正态分布