Nonebot实战之编写插件1

news2024/11/24 20:33:23

前言

应粉丝群内粉丝要求,我也决定写一个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, Event

cici = 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, Event

cici = 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, Event

cici = 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.coloradmin.cn/o/873418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基本逻辑门的工作原理、电路图、逻辑图、逻辑表达式等

与、或、与非、或非、异或门、三态门、OD门(OC门)和传输门等的结构与使用 逻辑门是基于半导体器件形成的,开始学习逻辑门之前应具备半导体器件的相关知识 可阅读如下文章进行先导学习 半导体器件: https://blog.csdn.net/weixi…

彻底卸载Android Studio

永恒的爱是永远恪守最初的诺言。 在安装Android Studio会有很多问题导致无法正常运行,多次下载AS多次错误后了解到,删除以下四个文件才能彻底卸载Android Studio。 第一个文件:.gradle 路径:C:\Users\yao(这里yao是本…

下载程序到西门子PLC

更多关于西门子S7-200PLC内容请查看:西门子200系列PLC学习课程大纲 下载西门子200PLC程序分以下两步: 一.编译程序 1. 如下图1-1所示,使用PPI电缆将PLC和电脑连接上,注意笔记本使用USB转PPI电缆,连接保证给PLC单独供…

什么是gRPC?

1. GRPC是google开源的rpc框架 2. 核心是一个.proto的服务描述文件 3. 添加依赖的grpc相关的包,配置IDEA的grpc插件,就可以很方便的生成调用代码 4. 通过在IDEA的protobuf插件上分别执行以下两个服务,就可以生成需要的调用代码 1&#xff…

阿里云轻量应用服务器使用教程_创建配置_远程连接_网站上线

阿里云轻量应用服务器怎么使用?阿里云百科分享轻量应用服务器从选择创建、配置建站环境、轻量服务器应用服务器远程连接、开端口到网站上线全流程: 目录 阿里云轻量应用服务器使用教程 步骤一:购买一台轻量应用服务器 步骤二:…

Android核心开发之——OpenGL

OpenGL是一种用于编程计算机图形的应用程序编程接口(API)。它提供了一系列函数和方法,用于绘制2D和3D图形,以及进行渲染和图形处理。OpenGL可以跨平台使用,支持各种操作系统和硬件设备。它被广泛应用于游戏开发、虚拟现…

Java并发编程(五)线程同步 下 [CAS/原子类/同步容器类/同步工具类]

CAS 概述 CAS全称为Compare-And-Swap。它是一条CPU的原子指令,是硬件对于并发操作共享数据的支持。其作用是CPU在某个时刻比较两个值是否相等 核心原理:在操作期间CAS先比较下主存中的值和线程中工作内存中的值是否相等,如果相等才会将主存中的值更新为新值&…

Golang服务的请求调度

文章目录 1. 写在前面2. SheddingHandler的实现原理3. 相关方案的对比4. 小结 1. 写在前面 最近在看相关的Go服务的请求调度的时候,发现在gin中默认提供的中间件中,不含有请求调度相关的逻辑中间件,去github查看了一些服务框架,发…

任我行 CRM SQL注入漏洞复现(HW0day)

0x01 产品简介 任我行CRM(Customer Relationship Management)是一款专业的企业级CRM软件,旨在帮助企业有效管理客户关系、提升销售效率和提供个性化的客户服务。 0x02 漏洞概述 任我行 CRM SmsDataList 接口处存在SQL注入漏洞,未…

2023HVV最新0day、1day消息含POC、EXP

点击"仙网攻城狮”关注我们哦~ 不想当研发的渗透人不是好运维 让我们每天进步一点点 简介 2023HW-8月10号0day、1day漏洞汇总,包含以下漏洞需要自取。 链接:https://pan.baidu.com/s/1duOyDNjYBPKfC5eB9ZHA2Q 提取码:6666 通达OA sql注入…

JavaWeb课程学习--Day01

HTML 建立css文件&#xff1a; css使用方式&#xff1a; <span>...</span>无语意包裹标签 css中的三种选择器&#xff1a; 注意&#xff1a;播放视音频时要留出播放空间 盒子模型&#xff1a; 表格标签&#xff1a; 以上表格&#xff1a; 表单标签&#xff1a; 表…

form表单构造http请求的写法

from是html的一个标签&#xff0c;from是html后早http请求的一种方式&#xff0c;它和input标签密切配合。 from有两个基本属性action和method&#xff0c;action就是http请求url中的路径部分。method就是构造的http请求的方法。 form和input标签配合构造键值对&#xff0c;键值…

枚举缓存工具

此文章为笔记&#xff0c;为阅读其他文章的感受、补充、记录、练习、汇总&#xff0c;非原创&#xff0c;感谢每个知识分享者。 文章目录 1. 背景2. 枚举缓存3. 样例展示4. 性能对比5. 总结 本文通过几种样例展示如何高效优雅的使用java枚举消除冗余代码。 1. 背景 枚举在系统…

Android学习之路(4) UI控件之文本框

本节给大家带来的UI控件是&#xff1a;TextView(文本框)&#xff0c;用于显示文本的一个控件&#xff0c;另外声明一点&#xff0c;我不是翻译API文档&#xff0c;不会一个个属性的去扣&#xff0c;只学实际开发中常用的&#xff0c;有用的&#xff0c;大家遇到感觉到陌生的属性…

C++使用new来初始化指向类的指针

C使用new来初始化类的指针 1.ClassName * p new ClassName; 调用默认构造函数。 如果类里没有写默认构造函数&#xff0c;会使用编译器帮我们生成的&#xff0c;但不会初始化成员变量&#xff0c;如 class NoConstructor //没写构造函数的类 { public:~NoConstructor() …

golang—面试题大全

目录标题 sliceslice和array的区别slice扩容机制slice是否线程安全slice分配到栈上还是堆上扩容过程中是否重新写入go深拷贝发生在什么情况下&#xff1f;切片的深拷贝是怎么做的copy和左值进行初始化区别slice和map的区别 mapmap介绍map的key的类型map对象如何比较map的底层原…

T113-S3-RTL8211网口phy芯片调试

目录 前言 一、RTL8211介绍 二、硬件连接 三、设备树配置 四、内核配置 五、phy芯片配置 六、调试问题 总结 前言 在嵌入式系统开发中&#xff0c;网络连接是至关重要的一部分。T113-S3开发板搭载了RTL8211系列的网口PHY芯片&#xff0c;用于实现以太网连接。在开发过程…

[C语言] 指针

1. 指针是什么 2. 指针和指针类型 3. 野指针 4. 指针运算 5. 指针和数组 6. 二级指针 7. 指针数组 目录 1. 指针是什么&#xff1f; 2. 指针和指针类型 2.1 指针-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 指针运算 4.1 指针…

《Java-SE-第三十六章》之枚举

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…

预知未来:揭示公司倒闭的隐秘迹象

引言 在商业世界中&#xff0c;公司的倒闭是一种常见的现象。然而&#xff0c;对于那些在公司中工作的人来说&#xff0c;这可能是一场灾难。作为一名资深的人力资源专业人员&#xff0c;我认为我们有责任提前察觉公司可能倒闭的迹象&#xff0c;以便我们可以采取适当的行动来…