1
0
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:
Karlatemp 2023-07-25 16:04:47 +08:00
parent f6b82ed657
commit 137b4536ae
No known key found for this signature in database
GPG Key ID: BA173CA2B9956C59
5 changed files with 86 additions and 4 deletions
mirai-console/backend/mirai-console

View File

@ -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 {

View File

@ -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 ]"
}
}
}

View File

@ -88,6 +88,8 @@ internal class PluginManagerImpl(
}
}
}
resolvedPlugins.add(MiraiConsoleAsPlugin)
}
// region LOADING

View File

@ -104,6 +104,8 @@ public interface PluginDescription {
/**
* 此插件依赖的其他插件, 将会在这些插件加载之后加载此插件
*
* 特别的, 可以使用 `net.mamoe.mirai-console` 作为插件 id 限制 mirai-console 版本 ( 2.16.0 )
*
* @see PluginDependency
*/
public val dependencies: Set<PluginDependency>

View File

@ -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)
}
}