认识插件
欢迎来到 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 来测试插件的功能。
尝试发送消息 hello
,你会得到回复 world
,这说明插件已经成功加载并运行了。