mirai/mirai-console/docs/plugin/Plugins.md

113 lines
4.3 KiB
Markdown
Raw Normal View History

# Mirai Console Backend - Plugins
[`Plugin`]: ../../backend/mirai-console/src/plugin/Plugin.kt
[`PluginDescription`]: ../../backend/mirai-console/src/plugin/description/PluginDescription.kt
[`PluginLoader`]: ../../backend/mirai-console/src/plugin/loader/PluginLoader.kt
[`PluginManager`]: ../../backend/mirai-console/src/plugin/PluginManager.kt
[`JvmPluginLoader`]: ../../backend/mirai-console/src/plugin/jvm/JvmPluginLoader.kt
[`JvmPlugin`]: ../../backend/mirai-console/src/plugin/jvm/JvmPlugin.kt
[`JvmPluginDescription`]: ../../backend/mirai-console/src/plugin/jvm/JvmPluginDescription.kt
[`AbstractJvmPlugin`]: ../../backend/mirai-console/src/plugin/jvm/AbstractJvmPlugin.kt
[`KotlinPlugin`]: ../../backend/mirai-console/src/plugin/jvm/KotlinPlugin.kt
[`JavaPlugin`]: ../../backend/mirai-console/src/plugin/jvm/JavaPlugin.kt
[`PluginData`]: ../../backend/mirai-console/src/data/PluginData.kt
[`PluginConfig`]: ../../backend/mirai-console/src/data/PluginConfig.kt
[`PluginDataStorage`]: ../../backend/mirai-console/src/data/PluginDataStorage.kt
[`ExportManager`]: ../../backend/mirai-console/src/plugin/jvm/ExportManager.kt
[`MiraiConsole`]: ../../backend/mirai-console/src/MiraiConsole.kt
[`MiraiConsoleImplementation`]: ../../backend/mirai-console/src/MiraiConsoleImplementation.kt
[`Command`]: ../../backend/mirai-console/src/command/Command.kt
[`CompositeCommand`]: ../../backend/mirai-console/src/command/CompositeCommand.kt
[`SimpleCommand`]: ../../backend/mirai-console/src/command/SimpleCommand.kt
[`RawCommand`]: ../../backend/mirai-console/src/command/RawCommand.kt
[`CommandManager`]: ../../backend/mirai-console/src/command/CommandManager.kt
[`Annotations`]: ../../backend/mirai-console/src/util/Annotations.kt
[`ConsoleInput`]: ../../backend/mirai-console/src/util/ConsoleInput.kt
[`JavaPluginScheduler`]: ../../backend/mirai-console/src/plugin/jvm/JavaPluginScheduler.kt
[`ResourceContainer`]: ../../backend/mirai-console/src/plugin/ResourceContainer.kt
[`PluginFileExtensions`]: ../../backend/mirai-console/src/plugin/PluginFileExtensions.kt
[`AutoSavePluginDataHolder`]: ../../backend/mirai-console/src/data/PluginDataHolder.kt#L45
[Kotlin]: https://www.kotlincn.net/
[Java]: https://www.java.com/zh_CN/
[JVM]: https://zh.wikipedia.org/zh-cn/Java%E8%99%9A%E6%8B%9F%E6%9C%BA
[JAR]: https://zh.wikipedia.org/zh-cn/JAR_(%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F)
[使用 AutoService]: ../QA.md#使用-autoservice
[JVMPlugin]: ./JVMPlugin.md
Mirai Console (简称 Console 运行在 [JVM],支持使用 [Kotlin] 或 [Java] 等 JVM
语言编写的插件。
本章节简要介绍 Console 插件架构(与平台无关的基础架构)。
## 通用的插件接口 - [`Plugin`]
所有 Console 插件都必须直接或间接地实现 [`Plugin`] 接口。
> **解释 *插件***:只要实现了 [`Plugin`] 接口的对象都可以叫做「Mirai Console 插件」,简称 「插件」。
> 为了便捷,内含 [`Plugin`] 实现的一个 [JAR] 文件也可以被称为「插件」。
基础的 [`Plugin`] 很通用,它只拥有很少的成员:
```kotlin
interface Plugin : CommandOwner { // CommandOwner 表示该对象可以创建指令
val isEnabled: Boolean // 当插件已开启时返回 true
val loader: PluginLoader<*, *> // 能处理这个 Plugin 实例的 PluginLoader
}
```
[`Plugin`] 接口拥有强扩展性,以支持 Mirai Console 统一管理使用其他编程语言编写的插件
(详见进阶章节 [扩展 - PluginLoader](../Extensions.md))。
> 除非你是在实现新种类插件,否则不要直接实现 `Plugin` 接口。
## 插件加载器 - [`PluginLoader`]
Mirai Console 支持使用多个插件加载器来加载多种类型插件。每个插件加载器都支持一种类型的插件。
Mirai Console 内置 [`JvmPluginLoader`] 以加载 JVM
平台插件(见下文),并允许这些插件注册扩展的插件加载器(见章节 [扩展](../Extensions.md))
,以支持读取其他语言编写的插件并接入
Console 插件管理系统。
## 总结
Mirai Console 提供抽象的插件及其加载器接口,支持扩展。各类插件行为由其加载器确定。插件作者需要基于特定的插件平台实现,如
Console 内置的 [JVM 平台][JVMPlugin]。
## 继续阅读
- [JVM 平台插件详情][JVMPlugin]
- [编写插件加载器](../Extensions.md)