跳到主要内容

认识插件

欢迎来到 KiramiBot 插件开发手册!在正式开始编写插件之前,我们首先需要了解插件的基本概念。

插件结构

在 KiramiBot 中,插件实际上是一个 Python 模块(module),经过 KiramiBot 特殊处理后变成了一个可用的插件。为了保持插件的整洁和独立性,我们建议插件之间尽量减少耦合,避免相互调用。

单文件插件

一个普通的 .py 文件即可以作为一个插件,例如创建一个 foo.py 文件:

📂 plugins
└── 📄 foo.py

在这个例子中,模块 foo 已经可以被称为一个插件了,尽管它还什么都没做。

包插件

一个包含 __init__.py 文件的文件夹也可以作为插件,这是一个常规的 Python 包(package)

比如,你可以创建一个名为 foo 的文件夹:

📂 plugins
└── 📂 foo
└── 📄 __init__.py

在这种情况下,包 foo 同样是一个合法的插件,插件内容可以在写在 __init__.py 文件中。

创建插件

首先,在项目的根目录下创建一个名为 plugins 的文件夹,用来存放接下来要编写的插件。

项目结构现在看起来是这样的:

📦 kirami-bot
│── 📂 plugins
├── 📄 pyproject.toml
└── 📄 kirami.config.toml

接着,在 plugins 文件夹中,我们创建一个名为 weather 的文件夹,用来存放我们的第一个插件,其中包含的文件将在稍后章节中用到。

项目结构变为:

📦 kirami-bot
│── 📂 plugins
| └── 📂 weather
| └── 📄 __init__.py
├── 📄 pyproject.toml
└── 📄 kirami.config.toml

现在,你已经建立了插件的基本结构,随时可以开始编写你的第一个 KiramiBot 插件。

在接下来的章节中,我们将继续探索插件的更多特性,以及如何利用这些特性为你的 KiramiBot 插件添加更多功能。

加载插件

创建了插件的基本结构后,接下来我们将学习如何在 KiramiBot 中加载这些插件。

注意

加载的插件模块名称(插件文件名或文件夹名)不能相同,且每一个插件只能被加载一次,重复加载将会导致异常。

加载单个插件

修改根目录下的 kirami.config.toml 文件,在 plugin 部分的 plugins 字段添加插件:

[plugin]
plugins=["plugins.weather"]

在上述配置中,我们将 plugins.weather 添加到了 plugins 中,这会加载指定的插件,通常用于加载第三方插件或者项目插件。

加载插件目录

修改根目录下的 kirami.config.toml 文件,在 plugin 部分的 plugin_dirs 字段添加插件文件夹:

[plugin]
plugin_dirs=["plugins"]

在上述配置中,我们将 plugins 文件夹添加到了 plugin_dirs 中,这会加载文件夹中的所有插件,通常用于加载一系列本地编写的项目插件。

插件加载优先级

对于多个插件或者多个插件文件夹,我们可以通过添加插件优先级来控制插件的加载顺序。

只要在插件或者插件文件夹后面添加 : 和一个数字,就可以指定插件的优先级,数字越小优先级越高。

如果未指定加载优先级,默认为无穷大,可以通过修改配置项 plugin_priority 来设置默认优先级。

[plugin]
plugins=["plugin1", "plugin2:1"]

在上述配置中,plugin2 的优先级为 1,将会先于 plugin1 加载。

测试插件

一个最简单的插件可能像下面这样:

from kirami import on_fullmatch
from kirami.typing import Matcher

@on_fullmatch("hello")
async def _(matcher: Matcher):
await matcher.finish("world")

让我们创建这个名为 helloworld 的插件,并通过 KiramiBot 加载它。

提示

你可以使用 Matcha 来测试插件的功能。

Matcha
hello
KiramiBot Logo
world

尝试发送消息 hello,你会得到回复 world,这说明插件已经成功加载并运行了。