mirror of
https://github.com/mamoe/mirai.git
synced 2026-08-22 22:23:32 +08:00
Make PluginManager not static object
This commit is contained in:
@@ -28,10 +28,10 @@ import net.mamoe.mirai.console.plugin.loader.PluginLoader
|
||||
import net.mamoe.mirai.console.util.AnsiMessageBuilder
|
||||
import net.mamoe.mirai.console.util.ConsoleExperimentalApi
|
||||
import net.mamoe.mirai.console.util.ConsoleInternalApi
|
||||
import net.mamoe.mirai.utils.childScopeContext
|
||||
import net.mamoe.mirai.console.util.SemVersion
|
||||
import net.mamoe.mirai.utils.BotConfiguration
|
||||
import net.mamoe.mirai.utils.MiraiLogger
|
||||
import net.mamoe.mirai.utils.childScopeContext
|
||||
import net.mamoe.mirai.utils.verbose
|
||||
import java.io.File
|
||||
import java.nio.file.Path
|
||||
@@ -83,6 +83,12 @@ public interface MiraiConsole : CoroutineScope {
|
||||
*/
|
||||
public val version: SemVersion
|
||||
|
||||
/**
|
||||
* [PluginManager] 实例. 在 [MiraiConsole] 生命周期内应保持不变.
|
||||
*
|
||||
* @since 2.10
|
||||
*/
|
||||
public val pluginManager: PluginManager
|
||||
|
||||
@ConsoleExperimentalApi
|
||||
public val pluginCenter: PluginCenter
|
||||
|
||||
@@ -21,7 +21,7 @@ import net.mamoe.mirai.console.extension.ComponentStorage
|
||||
import net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge
|
||||
import net.mamoe.mirai.console.internal.extension.GlobalComponentStorage
|
||||
import net.mamoe.mirai.console.internal.logging.LoggerControllerImpl
|
||||
import net.mamoe.mirai.console.internal.plugin.PluginManagerImpl
|
||||
import net.mamoe.mirai.console.internal.pluginManagerImpl
|
||||
import net.mamoe.mirai.console.logging.LoggerController
|
||||
import net.mamoe.mirai.console.plugin.Plugin
|
||||
import net.mamoe.mirai.console.plugin.jvm.JvmPluginLoader
|
||||
@@ -243,7 +243,7 @@ public interface MiraiConsoleImplementation : CoroutineScope {
|
||||
public companion object {
|
||||
private val backendAccessInstance = object : BackendAccess {
|
||||
override val globalComponentStorage: ComponentStorage get() = GlobalComponentStorage
|
||||
override val resolvedPlugins: MutableList<Plugin> get() = PluginManagerImpl.resolvedPlugins
|
||||
override val resolvedPlugins: MutableList<Plugin> get() = MiraiConsole.pluginManagerImpl.resolvedPlugins
|
||||
}
|
||||
|
||||
@Volatile
|
||||
|
||||
@@ -30,7 +30,7 @@ import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig.Account.*
|
||||
import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig.Account.PasswordKind.MD5
|
||||
import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig.Account.PasswordKind.PLAIN
|
||||
import net.mamoe.mirai.console.internal.permission.BuiltInPermissionService
|
||||
import net.mamoe.mirai.console.internal.plugin.PluginManagerImpl
|
||||
import net.mamoe.mirai.console.internal.pluginManagerImpl
|
||||
import net.mamoe.mirai.console.internal.util.autoHexToBytes
|
||||
import net.mamoe.mirai.console.internal.util.runIgnoreException
|
||||
import net.mamoe.mirai.console.permission.Permission
|
||||
@@ -49,7 +49,6 @@ import net.mamoe.mirai.event.events.EventCancelledException
|
||||
import net.mamoe.mirai.message.nextMessageOrNull
|
||||
import net.mamoe.mirai.utils.BotConfiguration
|
||||
import net.mamoe.mirai.utils.MiraiLogger
|
||||
import net.mamoe.mirai.utils.readString
|
||||
import net.mamoe.mirai.utils.secondsToMillis
|
||||
import java.lang.management.ManagementFactory
|
||||
import java.lang.management.MemoryUsage
|
||||
@@ -181,7 +180,7 @@ public object BuiltInCommands {
|
||||
@Handler
|
||||
public suspend fun CommandSender.handle(
|
||||
@Name("qq") id: Long
|
||||
){
|
||||
) {
|
||||
if (Bot.getInstanceOrNull(id)?.close() == null) {
|
||||
sendMessage("$id 未登录")
|
||||
} else {
|
||||
@@ -505,10 +504,10 @@ public object BuiltInCommands {
|
||||
reset().append("\n\n")
|
||||
|
||||
append("Plugins: ")
|
||||
if (PluginManagerImpl.resolvedPlugins.isEmpty()) {
|
||||
if (MiraiConsole.pluginManagerImpl.resolvedPlugins.isEmpty()) {
|
||||
gray().append("<none>")
|
||||
} else {
|
||||
PluginManagerImpl.resolvedPlugins.joinTo(this) { plugin ->
|
||||
MiraiConsole.pluginManagerImpl.resolvedPlugins.joinTo(this) { plugin ->
|
||||
green().append(plugin.name).reset().append(" v").gold()
|
||||
plugin.version.toString()
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ import net.mamoe.mirai.console.plugin.name
|
||||
import net.mamoe.mirai.console.util.ConsoleExperimentalApi
|
||||
import net.mamoe.mirai.console.util.ConsoleInput
|
||||
import net.mamoe.mirai.console.util.SemVersion
|
||||
import net.mamoe.mirai.console.util.cast
|
||||
import net.mamoe.mirai.utils.*
|
||||
import java.nio.file.Path
|
||||
import java.time.Instant
|
||||
@@ -64,6 +65,8 @@ import kotlin.coroutines.CoroutineContext
|
||||
import kotlin.reflect.KProperty
|
||||
import kotlin.reflect.KProperty0
|
||||
|
||||
internal val MiraiConsole.pluginManagerImpl: PluginManagerImpl get() = this.pluginManager.cast()
|
||||
|
||||
/**
|
||||
* [MiraiConsole] 公开 API 与前端实现的连接桥.
|
||||
*/
|
||||
@@ -79,6 +82,7 @@ internal object MiraiConsoleImplementationBridge : CoroutineScope, MiraiConsoleI
|
||||
|
||||
override val buildDate: Instant by MiraiConsoleBuildConstants::buildDate
|
||||
override val version: SemVersion by MiraiConsoleBuildConstants::version
|
||||
override val pluginManager: PluginManagerImpl by lazy { PluginManagerImpl(coroutineContext) }
|
||||
override val rootPath: Path by instance::rootPath
|
||||
override val frontEndDescription: MiraiConsoleFrontEndDescription by instance::frontEndDescription
|
||||
|
||||
@@ -163,11 +167,11 @@ internal object MiraiConsoleImplementationBridge : CoroutineScope, MiraiConsoleI
|
||||
}
|
||||
|
||||
phase("initialize all plugins") {
|
||||
PluginManager // init
|
||||
pluginManager // init
|
||||
|
||||
mainLogger.verbose { "Loading JVM plugins..." }
|
||||
PluginManagerImpl.loadAllPluginsUsingBuiltInLoaders()
|
||||
PluginManagerImpl.initExternalPluginLoaders().let { count ->
|
||||
pluginManager.loadAllPluginsUsingBuiltInLoaders()
|
||||
pluginManager.initExternalPluginLoaders().let { count ->
|
||||
mainLogger.verbose { "$count external PluginLoader(s) found. " }
|
||||
if (count != 0) {
|
||||
mainLogger.verbose { "Loading external plugins..." }
|
||||
@@ -176,7 +180,7 @@ internal object MiraiConsoleImplementationBridge : CoroutineScope, MiraiConsoleI
|
||||
}
|
||||
|
||||
phase("load all plugins") {
|
||||
PluginManagerImpl.loadPlugins(PluginManagerImpl.scanPluginsUsingPluginLoadersIncludingThoseFromPluginLoaderProvider())
|
||||
pluginManager.loadPlugins(pluginManager.scanPluginsUsingPluginLoadersIncludingThoseFromPluginLoaderProvider())
|
||||
|
||||
mainLogger.verbose { "${PluginManager.plugins.size} plugin(s) loaded." }
|
||||
}
|
||||
@@ -217,13 +221,13 @@ internal object MiraiConsoleImplementationBridge : CoroutineScope, MiraiConsoleI
|
||||
phase("enable plugins") {
|
||||
mainLogger.verbose { "Enabling plugins..." }
|
||||
|
||||
PluginManagerImpl.enableAllLoadedPlugins()
|
||||
pluginManager.enableAllLoadedPlugins()
|
||||
|
||||
for (registeredCommand in CommandManager.allRegisteredCommands) {
|
||||
registeredCommand.permission // init
|
||||
}
|
||||
|
||||
mainLogger.info { "${PluginManagerImpl.plugins.size} plugin(s) enabled." }
|
||||
mainLogger.info { "${pluginManager.plugins.size} plugin(s) enabled." }
|
||||
}
|
||||
|
||||
phase("auto-login bots") {
|
||||
|
||||
@@ -15,7 +15,6 @@ import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Job
|
||||
import net.mamoe.mirai.console.MiraiConsole
|
||||
import net.mamoe.mirai.console.extensions.PluginLoaderProvider
|
||||
import net.mamoe.mirai.console.internal.data.cast
|
||||
import net.mamoe.mirai.console.internal.data.mkdir
|
||||
import net.mamoe.mirai.console.internal.extension.GlobalComponentStorage
|
||||
import net.mamoe.mirai.console.plugin.Plugin
|
||||
@@ -28,13 +27,19 @@ import net.mamoe.mirai.console.plugin.loader.PluginLoadException
|
||||
import net.mamoe.mirai.console.plugin.loader.PluginLoader
|
||||
import net.mamoe.mirai.console.plugin.name
|
||||
import net.mamoe.mirai.console.util.SemVersion
|
||||
import net.mamoe.mirai.utils.cast
|
||||
import net.mamoe.mirai.utils.childScope
|
||||
import net.mamoe.mirai.utils.info
|
||||
import java.io.File
|
||||
import java.nio.file.Path
|
||||
import java.util.concurrent.CopyOnWriteArrayList
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
|
||||
internal object PluginManagerImpl : PluginManager, CoroutineScope by MiraiConsole.childScope("PluginManager") {
|
||||
internal val PluginManager.impl: PluginManagerImpl get() = this.cast()
|
||||
|
||||
internal class PluginManagerImpl(
|
||||
private val parentCoroutineContext: CoroutineContext
|
||||
) : PluginManager, CoroutineScope by parentCoroutineContext.childScope("PluginManager") {
|
||||
|
||||
override val pluginsPath: Path = MiraiConsole.rootPath.resolve("plugins").apply { mkdir() }
|
||||
override val pluginsFolder: File = pluginsPath.toFile()
|
||||
@@ -130,7 +135,7 @@ internal object PluginManagerImpl : PluginManager, CoroutineScope by MiraiConsol
|
||||
builtInLoaders.listAndSortAllPlugins()
|
||||
.asSequence()
|
||||
.onEach { (_, descriptions) ->
|
||||
descriptions.let(PluginManagerImpl::checkPluginDescription)
|
||||
descriptions.let(::checkPluginDescription)
|
||||
}
|
||||
|
||||
return allDescriptions.toList().sortByDependencies()
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
|
||||
package net.mamoe.mirai.console.plugin
|
||||
|
||||
import me.him188.kotlin.dynamic.delegation.dynamicDelegation
|
||||
import net.mamoe.mirai.console.MiraiConsole
|
||||
import net.mamoe.mirai.console.internal.plugin.PluginManagerImpl
|
||||
import net.mamoe.mirai.console.plugin.description.PluginDescription
|
||||
import net.mamoe.mirai.console.plugin.loader.PluginLoader
|
||||
import java.io.File
|
||||
@@ -130,7 +130,7 @@ public interface PluginManager {
|
||||
|
||||
// endregion
|
||||
|
||||
public companion object INSTANCE : PluginManager by PluginManagerImpl {
|
||||
public companion object INSTANCE : PluginManager by (dynamicDelegation(MiraiConsole::pluginManager)) {
|
||||
/**
|
||||
* 经过泛型类型转换的 [Plugin.loader]
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user