nonebot2插件入门

您所在的位置:网站首页 怎么在qq群里私发消息给所有人 nonebot2插件入门

nonebot2插件入门

2024-07-11 17:02| 来源: 网络整理| 查看: 265

一个人的见解和习惯写的教程——机器人实现发送信息功能

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

🍁手把手从零搭建出属于自己的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

 

 

 

 

 

 

本文来自博客园,作者:精神小黑猫,转载请注明原文链接:https://www.cnblogs.com/daluobei/p/16746390.html,认为文章有用的小伙伴可以打赏打赏,万分感谢!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3