Skip to content

插件开发 ​

如果需要机器人本体提供的功能可查阅ATRI提供的功能、Agent智能体模块与LK插件提供的功能.

符合ATRI-LK规范的插件 ​

1. 如何创建一个能够让ATRI识别的插件 ​

首先在plugins目录下创建一个plugin_name.py文件或者一个plugin_name软件包。

在plugin_name.py或plugin_name/__init__.py中输入以下代码便可以创建一个ATRI能够识别的插件。

python
from ATRI.service import Service

service_name = Service("服务名").document("服务介绍").set_type(Service.ServiceType.TYPENAME).version('1.0.0')

或者:

python
from ATRI.service import Service

service_name = Service(
    "服务名"
    "服务介绍"
    '1.0.0'
    Service.ServiceType.TYPENAME
)

Service.ServiceType.TYPENAME中的TYPENAME并不存在,请自行改为自己想要的类型。
服务的更多属性值请参考服务属性

2. 为服务添加功能 ​

在创建完一个名为service_name的服务后,便可以为其添加事件响应器(Matcher)来实现功能的添加。

以下为添加一个名为matcher_name的类型为on_command的事件响应器代码,通过事件响应器实现功能。

python
matcher_name = service_name.on_command(cmd="指令名称", docs="指令介绍")

更多匹配方式请参考事件响应器
ATRI插件依然也支持原版的事件响应器,但不能在服务菜单中找到。

3. 实现功能 ​

后续插件功能的实现与NoneBot插件的实现一致。请参考官方文档学习插件编写。

4. 插件配置(YHN-LK0-024 新增) ​

从 YHN-LK0-024 版本开始,插件配置系统进行了完全重构,使用新的 PluginConfig + Field API 替代旧的 Pydantic BaseModel 方式。

新方式(推荐):

python
from ATRI.service import Service
from ATRI.configs import PluginConfig, Field

class MyPluginConfig(PluginConfig):
    enabled = Field(
        type_=bool,
        default=True,
        label="启用插件",
        description="是否启用此插件"
    )
    
    max_count = Field(
        type_=int,
        default=100,
        label="最大数量",
        description="最大处理数量限制",
        min=1,
        max=1000
    )

plugin = Service("我的插件", "插件说明", "1.0.0", Service.ServiceType.ENTERTAINMENT)
config = MyPluginConfig("我的插件")

Field 参数说明:

  • type_: 字段类型(bool, int, float, str, list, dict)
  • default: 默认值
  • label: 前端显示的标签
  • description: 字段描述
  • min / max: 数值范围限制(仅数字类型)
  • options: 选项列表(用于下拉选择)
  • children: 子字段(用于嵌套配置)

访问配置:

python
# 读取配置
enabled = config.get("enabled")
max_count = config.get("max_count")

# 修改配置
config.set("enabled", False)
config.set("max_count", 200)

详细文档请参考 PluginConfig 配置系统。

从ATRI移植 ​

原版ATRI插件依然可用,但插件类型会成为默认值其他插件。从原版ATRI插件进行移植只需要进行以下修改即可。

python
# 原来的服务
service = Service("服务名").document("服务介绍").set_other_attribute(args,)
# 新的服务
service = Service("服务名").document("服务介绍").set_type(Service.ServiceType.TYPENAME).version('1.0.0').set_other_attribute(args,)

从其他nonebot插件移植 ​

待补充

实战教学 ​

ATRI插件

LK插件附属插件

自定义数据 ​

Released under the CC-BY-SA-4.0 License.