Plugins 插件开发

qg_botsdk 提供了支援完全 seperate programming 的插件开发模式,并提供了相应的各种参数方便不同场景下使用。

开发

from qg_botsdk import Plugins   ## 导入插件开发模块

导入后,即可开始开发本插件的不同子项。Plugins 插件的模块其实与 BOT 装饰器基本相通,只不过 Plugins 提供了无需关联主程序的一种编程方式,开发完成后主程序直接 import 导入即可使用里面注册的消息处理器。

预处理器

预处理器会在进入任何消息处理器、检查所有 commands 前运行,常用于编写 log 相关的模块。

@Plugins.before_command()
def preprocessor(data: Model.Message):
    print(f"收到了消息:{data.treated_msg}")

参数

字段名

类型

默认值

说明

valid_scenes

CommandValidScenes

CommandValidScenes.GUILD|CommandValidScenes.DM

此处理器的有效场景,可传入多个场景 (需求 SDK 版本>=4.1.4)

注册消息指令

注册 plugins 指令装饰器,可用于分割式编写指令并注册进机器人注册 plugins 指令装饰器,可用于分割式编写指令并注册进机器人

@Plugins.on_command("p_0", is_short_circuit=True)
def p_0(data: Model.MESSAGE):
    data.reply("使用plugins的on_command模块进行注册,用户消息包含指令p_0可触发此函数")

参数

字段名

类型

默认值

说明

command

List[str], str

None

可触发事件的指令列表,与正则 regex 互斥,优先使用此项

regex

Pattern, str

None

可触发指令的正则 compile 实例或正则表达式,与指令表互斥

is_require_at

bool

False

是否要求必须艾特机器人才能触发指令

is_short_circuit

bool

False

如果触发指令成功是否短路不运行后续指令(将根据注册顺序和 command 先 regex 后排序指令的短路机制)

is_custom_short_circuit

bool

False

如果触发指令成功而回调函数返回 True 则不运行后续指令,存在时优先于 is_short_circuit

is_require_admin

bool

False

是否要求频道主或或管理才可触发指令

admin_error_msg

str

None

当 is_require_admin 为 True,而触发用户的权限不足时,如此项不为 None,返回此消息并短路;否则不进行短路

valid_scenes

CommandValidScenes

CommandValidScenes.GUILD|CommandValidScenes.DM

此处理器的有效场景,可传入多个场景 (需求 SDK 版本>=4.1.4)

使用 API

在 Plugins 分割时编写时使用 BOT.api,当实例化的 BOT 加载 Plugins 后,将会自动替换该 Plugins 里的 api 为该实例的 api(仍支持同程序运行多个机器人)

@Plugins.on_command("p_0", is_short_circuit=True)
def p_0(data: Model.MESSAGE):
    print(Plugins.api.get_bot_info())  # Plugins.api相当于BOT.api,使用时会自动将其替换成当前机器人实例里的api模块

Plugins.api 等同 BOT.api,会根据实例的 api 切换多线程和异步版本

使用

假设 Plugins 编写的文件为 my_plugins.py

方法 1:直接 import

使用 plugins 的方法一,直接 import 相应 module,BOT.start()时将自动加载使用 plugins 的方法一,直接 import 相应 module,BOT.start()时将自动加载

import my_plugins

[推荐]方法 2:使用 BOT.load_plugins()

使用 plugins 的方法二,使用 BOT.load_plugins()加载使用 plugins 的方法二,使用 BOT.load_plugins()加载

BOT.load_plugins("my_plugins.py")

实际用例

可查看 github 中的 example 库的 example13:

https://github.com/GLGDLY/qg_botsdk/blob/master/example/example_13(装饰器).py https://github.com/GLGDLY/qg_botsdk/blob/master/example/example_13_plugins.py