nonebot2插件入门-你的第一个机器人插件(发送文字消息)

机器人需要各种插件来实现各种功能,只有个机器人框架是不够的。

🍁手把手从零搭建出属于自己的QQ机器人🍁


教程开始

一、创建插件

插件要放在“src”文件夹下的“plugins”文件夹里(如果你的机器人框架按照前面的文章配置的话)

1、以文件夹形式创建插件(推荐)

接下来一个名为“test”的插件,操作方法是在如图所示目录下新建一个名为“test”的文件夹:

 

 在新建的“test”文件夹下新建一个.py文件,命名为“__init__.py”

 2、以文件的形式创建

 

二、示例代码

1、一个可以运行的插件

我们来简单编辑一下这个“__init__.py”(或者“test1.py”),代码如下:

1 import nonebot
2 from nonebot import on_command
3 from nonebot.adapters.onebot.v11 import Bot, Event
4 from nonebot.typing import T_State  
5 test1 = on_command('测试') # 这个test1就是个变量名字,你写成 a = on_command('测试') 都可以,跟下面对应起来就行
6 @test1.handle()
7 async def test1_handle(bot: Bot, event: Event, state: T_State):  
8     nonebot.logger.info("插件执行一次。") 
9     await test1.finish()  # 插件都要有这个 finish,表示结束这个插件的执行

上面程序的意思是:当机器人接收到指令“测试”的时候,在终端中会打印出[info]信息。

编辑好保存后运行测试一下,效果如下:

 

上图可以看到,发送“测试”,在终端中打印出了一条[info]信息。除了 nonebot.logger.info("要显示的文本") 还有nonebot.logger.success("要显示的文本") onebot.logger.warning("要显示的文本")等等,可自行尝试,用“print”的话是不会打印出字符来滴。

 当然, test1 = on_command() 中除了,str型的指令文本还,还有很多参数,比如:

from nonebot.permission import SUPERUSER  # 超级用户如何添加看前一篇文章
from nonebot.rule import to_me

test1 = on_command("测试", aliases={'111', '222'},rule=to_me(), permission=SUPERUSER, priority=5)

  aliases={'111', '222'} 指令别名,加上后,发送“测试”和发送“111”或发送“222”都可以触发插件,数量貌似没限制:  aliases={'111', '222','333','444','lalal'}

rule=to_me() :英语很好懂吧,意思是当信息是发送给机器人的时候才算数,比如在群里你需要@机器人并发送“测试”,机器人才会有反应,不@而只发送“测试”,机器人就没反应。

 permission=SUPERUSER 这一段的意思是,信息是超级用户发送的才算数。

 priority=5:插件的优先级,这里写的是5,数字越小优先级越高

代码中的注释可以看到所有可以写的参数:

 

 它们的详细使用方法也可自行前往https://v2.nonebot.dev/docs/api/plugin/on#on_command 研究。

 

2、机器人实现发送信息功能

方法一(不推荐):

我们看finish的注释:

 所以就有了:

1 import nonebot
2 from nonebot import on_command
3 from nonebot.adapters.onebot.v11 import Bot, Event
4 from nonebot.typing import T_State  
5 test1 = on_command('你是谁')
6 @test1.handle()
7 async def test1_handle(bot: Bot, event: Event, state: T_State):  
8 
9     await test1.finish("我系外星人")  

运行一下:

 

 

 这种方法只能发送文字,不能发送表情或者图片,所以比较推荐使用第二种方法。

 方法二(我自己这样用,比较推荐):

go-cqhttp给我们提供了很多api,比如我们要发送私聊消息,用到的内容如下图:

 

 调用api的代码为:

1 await bot.call_api('send_private_msg', **{ 
2         'user_id':int(user_id),  
3         'message':msg
4     })  

我们用它来继续完成我们的插件:

 1 import nonebot
 2 from nonebot import on_command
 3 from nonebot.adapters.onebot.v11 import Bot, Event
 4 from nonebot.typing import T_State  
 5 test1 = on_command('你是谁')
 6 @test1.handle()
 7 async def test1_handle(bot: Bot, event: Event, state: T_State):  
 8     user_id = str(event.get_user_id())  # 获取发送信息人的qq号码
 9     msg = "我我我我是外星人"
10 
11     await bot.call_api('send_private_msg', **{ 
12         'user_id':int(user_id),  
13         'message':msg
14     })  
15 
16     await test1.finish()

 

 学会举一反三,那么发送群聊消息的话用到的就是:

 

 代码:

1 await bot.call_api('send_group_msg', **{ 
2                 'group_id':int(qunhao),
3                 'message':msg
4             })

因此,完整的实现机器人发送 私聊或者群聊信息 的代码:

 1 import nonebot
 2 from nonebot import on_command
 3 from nonebot.adapters.onebot.v11 import Bot, Event
 4 from nonebot.typing import T_State  
 5 test1 = on_command('你是谁')
 6 @test1.handle()
 7 async def test1_handle(bot: Bot, event: Event, state: T_State):  
 8 
 9     msg = "我我我我是外星人"
10     session_id=event.get_session_id() #获取会话 id 的方法,用于判断当前事件属于哪一个会话,通常是用户 id、群组 id 组合
11     # nonebot.logger.info('会话ID:'+session_id)
12     
13     if 'group' in session_id:
14         qunhao_tmplist = session_id.split('_')
15         qunhao = qunhao_tmplist[1]
16         # nonebot.logger.info('消息来自群聊'+qunhao)
17         msg = msg + "并且你的消息来自群聊"
18         await bot.call_api('send_group_msg', **{ #发送退出应用群聊消息
19             'group_id':int(qunhao),
20             'message':msg
21         })
22         
23     else:
24         # nonebot.logger.info('消息来自私聊')
25         user_id = str(event.get_user_id())
26         msg = msg + "并且你的消息来自私聊"
27         await bot.call_api('send_private_msg', **{ #发送退出应用私聊消息
28             'user_id':int(user_id),
29             'message':msg
30         })    
31 
32     await test1.finish()  

运行结果如下:

 

 go-cqhttp API介绍看这里:https://docs.go-cqhttp.org/api/#%E5%8F%91%E9%80%81%E7%A7%81%E8%81%8A%E6%B6%88%E6%81%AF

 

 

 

 

 

 

posted @ 2022-10-01 00:40  精神小黑猫  阅读(2343)  评论(4编辑  收藏  举报