mirror of
https://github.com/mamoe/mirai.git
synced 2025-04-25 04:50:26 +08:00
[console] Wrap mirai-console as a plugin
This commit is contained in:
parent
f6b82ed657
commit
137b4536ae
mirai-console/backend/mirai-console
src
command
internal/plugin
plugin/description
test/testFramework/test
@ -39,6 +39,7 @@ import net.mamoe.mirai.console.internal.extension.GlobalComponentStorage
|
||||
import net.mamoe.mirai.console.internal.permission.BuiltInPermissionService
|
||||
import net.mamoe.mirai.console.internal.permission.getPermittedPermissionsAndSource
|
||||
import net.mamoe.mirai.console.internal.plugin.JvmPluginInternal
|
||||
import net.mamoe.mirai.console.internal.plugin.MiraiConsoleAsPlugin
|
||||
import net.mamoe.mirai.console.internal.pluginManagerImpl
|
||||
import net.mamoe.mirai.console.internal.util.runIgnoreException
|
||||
import net.mamoe.mirai.console.permission.Permission
|
||||
@ -633,10 +634,15 @@ public object BuiltInCommands {
|
||||
reset().append("\n\n")
|
||||
|
||||
append("Plugins: ")
|
||||
if (MiraiConsole.pluginManagerImpl.resolvedPlugins.isEmpty()) {
|
||||
|
||||
val resolvedPlugins = MiraiConsole.pluginManagerImpl.resolvedPlugins.asSequence()
|
||||
.filter { it !is MiraiConsoleAsPlugin } // skip mirai-console in status
|
||||
.toList()
|
||||
|
||||
if (resolvedPlugins.isEmpty()) {
|
||||
gray().append("<none>")
|
||||
} else {
|
||||
MiraiConsole.pluginManagerImpl.resolvedPlugins.joinTo(this) { plugin ->
|
||||
resolvedPlugins.joinTo(this) { plugin ->
|
||||
if (plugin.isEnabled) {
|
||||
green().append(plugin.name).reset().append(" v").gold()
|
||||
} else {
|
||||
|
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright 2019-2023 Mamoe Technologies and contributors.
|
||||
*
|
||||
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
|
||||
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
|
||||
*
|
||||
* https://github.com/mamoe/mirai/blob/dev/LICENSE
|
||||
*/
|
||||
|
||||
package net.mamoe.mirai.console.internal.plugin
|
||||
|
||||
import net.mamoe.mirai.console.command.ConsoleCommandOwner
|
||||
import net.mamoe.mirai.console.internal.MiraiConsoleBuildConstants
|
||||
import net.mamoe.mirai.console.permission.Permission
|
||||
import net.mamoe.mirai.console.permission.PermissionId
|
||||
import net.mamoe.mirai.console.plugin.Plugin
|
||||
import net.mamoe.mirai.console.plugin.PluginManager.INSTANCE.description
|
||||
import net.mamoe.mirai.console.plugin.description.PluginDependency
|
||||
import net.mamoe.mirai.console.plugin.description.PluginDescription
|
||||
import net.mamoe.mirai.console.plugin.loader.PluginLoader
|
||||
import net.mamoe.mirai.console.util.SemVersion
|
||||
|
||||
internal object MiraiConsoleAsPlugin : Plugin {
|
||||
// MiraiConsole always enabled
|
||||
override val isEnabled: Boolean get() = true
|
||||
|
||||
override val loader: PluginLoader<*, *> get() = TheLoader
|
||||
|
||||
override val parentPermission: Permission
|
||||
get() = ConsoleCommandOwner.parentPermission
|
||||
|
||||
override fun permissionId(name: String): PermissionId {
|
||||
return ConsoleCommandOwner.permissionId(name)
|
||||
}
|
||||
|
||||
internal object TheLoader : PluginLoader<Plugin, PluginDescription> {
|
||||
override fun listPlugins(): List<Plugin> = listOf(MiraiConsoleAsPlugin)
|
||||
|
||||
override fun disable(plugin: Plugin) {
|
||||
// noop
|
||||
}
|
||||
|
||||
override fun enable(plugin: Plugin) {
|
||||
// noop
|
||||
}
|
||||
|
||||
override fun load(plugin: Plugin) {
|
||||
// noop
|
||||
}
|
||||
|
||||
override fun getPluginDescription(plugin: Plugin): PluginDescription {
|
||||
if (plugin !== MiraiConsoleAsPlugin) {
|
||||
error("loader not match with " + plugin.description.id)
|
||||
}
|
||||
return TheDescription
|
||||
}
|
||||
}
|
||||
|
||||
internal object TheDescription : PluginDescription {
|
||||
override val id: String get() = "net.mamoe.mirai-console"
|
||||
override val name: String get() = "Console"
|
||||
override val author: String get() = "Mamoe Technologies"
|
||||
override val version: SemVersion get() = MiraiConsoleBuildConstants.version
|
||||
override val info: String get() = ""
|
||||
override val dependencies: Set<PluginDependency> get() = setOf()
|
||||
|
||||
|
||||
override fun toString(): String {
|
||||
return "PluginDescription[ mirai-console ]"
|
||||
}
|
||||
}
|
||||
}
|
@ -88,6 +88,8 @@ internal class PluginManagerImpl(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resolvedPlugins.add(MiraiConsoleAsPlugin)
|
||||
}
|
||||
|
||||
// region LOADING
|
||||
|
@ -104,6 +104,8 @@ public interface PluginDescription {
|
||||
/**
|
||||
* 此插件依赖的其他插件, 将会在这些插件加载之后加载此插件
|
||||
*
|
||||
* 特别的, 可以使用 `net.mamoe.mirai-console` 作为插件 id 限制 mirai-console 版本 (自 2.16.0 后)
|
||||
*
|
||||
* @see PluginDependency
|
||||
*/
|
||||
public val dependencies: Set<PluginDependency>
|
||||
|
@ -18,11 +18,11 @@ class FrameworkInstanceTest : AbstractConsoleInstanceTest() {
|
||||
|
||||
@Test
|
||||
fun testConsole1() {
|
||||
assertEquals(0, PluginManager.plugins.size)
|
||||
assertEquals(1, PluginManager.plugins.size)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testConsole2() {
|
||||
assertEquals(0, PluginManager.plugins.size)
|
||||
assertEquals(1, PluginManager.plugins.size)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user