Skip to content
On this page

AmiyaBotPluginInstance

AmiyaBotPluginInstance 是 兔兔-v6 项目中的对插件类 PluginInstance 的扩展实现。使用该类创建插件时,能够获得更多的能力。

在 demo 项目里导入 AmiyaBotPluginInstance 创建插件。

python
from core import AmiyaBotPluginInstance

bot = AmiyaBotPluginInstance(
    name='我的插件',
    version='1.0',
    plugin_id='my-plugin',
    description='我的第一个插件',
    channel_config_default=...,
    channel_config_schema=...,
    global_config_default=...,
    global_config_schema=...,
    deprecated_config_delete_days=...,
)

AmiyaBotPluginInstance 继承了 PluginInstance,并且拥有以下新参数和方法

参数

参数名类型释义默认值
instructionstr使用指引文档None
requirementsList[Requirement]插件依赖None
channel_config_defaultstr频道级别配置默认值None
channel_config_schemastr频道级别配置表单的 JsonSchemaNone
global_config_defaultstr全局级别配置默认值None
global_config_schemastr全局级别配置表单的 JsonSchemaNone
deprecated_config_delete_daysint旧配置项失效的天数7
  • 默认值和 JsonSchema 传入的值均为字符串,可以是 JSON 字符串或 json 文件路径。(默认值允许使用 yaml 文件路径)
  • 在控制台中点击 重置为默认 时会使用默认值的 JSON 数据覆盖,创建新配置项时使用默认值的 JSON 数据填充。
  • 如果提供了 JsonSchema,将会使用 JsonSchema 创建表单界面,否则使用默认值的 JSON 数据。
  • 如果提供了 JsonSchema,必须同时提供默认值数据。
python
plugin_dir = os.path.dirname(__file__)

bot = AmiyaBotPluginInstance(
    channel_config_default=f'{plugin_dir}/config.yaml',
    channel_config_schema=f'{plugin_dir}/jsonSchema.json'
)

使用 JsonSchema 对接控制台

你可以通过对接控制台使用户能够使用控制台的界面管理你的插件。如下所示。

请阅读 介绍文档 了解如何编辑 jsonSchema.json 文件。

get_config

读取一个指定名称的配置项,如果没有频道级别的配置则返回同名全局配置,如果也没有全局配置,返回 None。传入 channel_id=None 可以直接读取全局配置。

参数名类型释义默认值
config_namestr配置名称
channel_idstr频道IDNone
python
config_value = bot.get_config('name', channel_id='...')

set_config

写入配置,传入 channel_id=None 可以强制指定写入全局配置。

参数名类型释义默认值
config_namestr配置名称
config_valueAny配置值,仅支持可被 JSON 序列化的值类型
channel_idstr频道IDNone
python
bot.set_config('name', 'value', channel_id='...')

说明

插件加载时会进行下面的校验,校验不通过则会报错:

  • 提供了 schema 则必须提供对应的 default,反之则不必。
  • 如果给出了 schema,则会用 schema 对提供的 default 进行校验。

当有下列需求的时候,建议考虑提供 schema 文件:

  • 您想要使用下拉列表框。schema 中指定 enum 元素时,界面会生成下拉列表框。
  • 您想要对用户的配置进行校验,如果不满足条件时输出提示。

提供 channel_config_default 时,界面可以新建频道配置。

插件初次安装初次加载时,会将 global_config_default 作为默认全局配置写入数据库。
该过程发生在构造函数,因此您如果需要对全局配置进行初始化操作,您需要在您的插件实例的构造函数,或者 install 函数中进行。

添加插件依赖

当插件需要在别的插件的基础上运行,可在 requirements 参数内传入 Requirement 类的列表,当插件安装时,会从插件市场服务尝试寻找对应的插件依赖并一同安装。

Requirement

参数名类型释义默认值
plugin_idstr插件ID
versionstr版本号(可选)None
officialbool是否官方插件False
python
from core import AmiyaBotPluginInstance, Requirement

bot = AmiyaBotPluginInstance(
    requirements=[
        Requirement('other-plugin'),
        Requirement('other-plugin2', '2.0'),
    ]
)

提示

插件添加依赖后,仅当全部依赖安装成功后,才会进行自身的安装。