该插件涉及知识点:无
插件合集:nonebot2聊天机器人插件
该系列为用于QQ群聊天机器人的nonebot2相关插件,不保证完全符合标准规范写法,如有差错和改进余地,欢迎大佬指点修正。
前端:nonebot2
后端:go-cqhttp
插件所用语言:python3
前置环境安装过程建议参考零基础2分钟教你搭建QQ机器人——基于nonebot2,但是请注意该教程中的后端版本过旧导致私聊发图异常,需要手动更新go-cqhttp版本。
1. 插件用途
nonebot2在安装完之后,自带一个echo命令用于让机器人复述自己的话语,但是这个命令是所有人都可以使用的,在实际使用中并不希望所有人都可以用这个指令让机器人说出自己希望它说的话。
在bot.py
文件中删除或注释nonebot.load_builtin_plugins()
,从而阻止加载自带内置命令,然后重新书写一个只有机器人管理员才可以使用的命令,并且采用print
下达命令。
以该插件的写法展示基础的应答与信息文本获取操作。
2. 目录结构
由于功能单一简单,因此无需建立文件夹,在plugins文件夹中新建一个单一文件printer.py
即可。
3. 实现难点与解决方案
该插件无实现难点
4. 代码实现
printer.py
from nonebot import on_command
from nonebot.rule import to_me
from nonebot.typing import T_State
from nonebot.adapters import Bot, Event
from nonebot.permission import SUPERUSER
__plugin_name__ = 'print'
__plugin_usage__ = '用法: print管理员给出的话语,测试机器人是否工作。'
# on_command()为针对命令型事件的响应,即以配置的命令前缀为开头的语句
# permission设置为该命令只对bot管理员响应,rule设置为只有私聊或者直接艾特bot时才会生效,priority设置执行优先级为10
printer = on_command("print", permission=SUPERUSER, rule=to_me(), priority=10)
# 具体响应逻辑部分
@printer.handle()
async def handle_first_receive(bot: Bot, event: Event, state: T_State):
# 获取去除了命令前缀后的信息,并且用strip()去除前后的空格与换行符
msg = str(event.get_message()).strip()
# finish会向信息来源发回作为参数的字符串,并且在执行后结束响应
# 如果希望发送后继续执行代码,应该将finish改为send
await printer.finish(msg)
5. 插件配图
该插件无配图