mirror of
https://github.com/mamoe/mirai.git
synced 2025-01-11 02:50:15 +08:00
Review extensions
This commit is contained in:
parent
1f790158e6
commit
077e4055cc
@ -30,6 +30,7 @@ import java.util.*
|
|||||||
import java.util.concurrent.locks.ReentrantLock
|
import java.util.concurrent.locks.ReentrantLock
|
||||||
import kotlin.annotation.AnnotationTarget.*
|
import kotlin.annotation.AnnotationTarget.*
|
||||||
import kotlin.coroutines.CoroutineContext
|
import kotlin.coroutines.CoroutineContext
|
||||||
|
import kotlin.system.exitProcess
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -176,7 +177,7 @@ public interface MiraiConsoleImplementation : CoroutineScope {
|
|||||||
/**
|
/**
|
||||||
* 可由前端调用, 获取当前的 [MiraiConsoleImplementation] 实例
|
* 可由前端调用, 获取当前的 [MiraiConsoleImplementation] 实例
|
||||||
*
|
*
|
||||||
* 必须在 [start] 之后才能使用.
|
* 必须在 [start] 之后才能使用, 否则抛出 [UninitializedPropertyAccessException]
|
||||||
*/
|
*/
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
@ConsoleFrontEndImplementation
|
@ConsoleFrontEndImplementation
|
||||||
@ -189,7 +190,22 @@ public interface MiraiConsoleImplementation : CoroutineScope {
|
|||||||
public fun MiraiConsoleImplementation.start(): Unit = initLock.withLock {
|
public fun MiraiConsoleImplementation.start(): Unit = initLock.withLock {
|
||||||
if (::instance.isInitialized) error("Mirai Console is already initialized.")
|
if (::instance.isInitialized) error("Mirai Console is already initialized.")
|
||||||
this@Companion.instance = this
|
this@Companion.instance = this
|
||||||
|
kotlin.runCatching {
|
||||||
MiraiConsoleImplementationBridge.doStart()
|
MiraiConsoleImplementationBridge.doStart()
|
||||||
|
}.onFailure { e ->
|
||||||
|
kotlin.runCatching {
|
||||||
|
MiraiConsole.mainLogger.error("Failed to init MiraiConsole.", e)
|
||||||
|
}.onFailure {
|
||||||
|
e.printStackTrace()
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin.runCatching {
|
||||||
|
MiraiConsole.cancel()
|
||||||
|
}.onFailure {
|
||||||
|
it.printStackTrace()
|
||||||
|
}
|
||||||
|
exitProcess(1)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,7 @@ public class PluginComponentStorage(
|
|||||||
public fun contributeSingletonExtensionSelector(lazyInstance: () -> SingletonExtensionSelector): Unit =
|
public fun contributeSingletonExtensionSelector(lazyInstance: () -> SingletonExtensionSelector): Unit =
|
||||||
contribute(SingletonExtensionSelector, plugin, lazyInstance)
|
contribute(SingletonExtensionSelector, plugin, lazyInstance)
|
||||||
|
|
||||||
|
@Suppress("SpellCheckingInspection") // alterer
|
||||||
/** 注册一个 [BotConfigurationAlterer] */
|
/** 注册一个 [BotConfigurationAlterer] */
|
||||||
public fun contributeBotConfigurationAlterer(instance: BotConfigurationAlterer): Unit =
|
public fun contributeBotConfigurationAlterer(instance: BotConfigurationAlterer): Unit =
|
||||||
contribute(BotConfigurationAlterer, plugin, lazyInstance = { instance })
|
contribute(BotConfigurationAlterer, plugin, lazyInstance = { instance })
|
||||||
|
@ -21,6 +21,7 @@ import net.mamoe.mirai.utils.BotConfiguration
|
|||||||
*
|
*
|
||||||
* @see MiraiConsole.addBot
|
* @see MiraiConsole.addBot
|
||||||
*/
|
*/
|
||||||
|
@Suppress("SpellCheckingInspection") // alterer
|
||||||
public fun interface BotConfigurationAlterer : FunctionExtension {
|
public fun interface BotConfigurationAlterer : FunctionExtension {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -12,12 +12,19 @@ package net.mamoe.mirai.console.extensions
|
|||||||
import net.mamoe.mirai.console.extension.AbstractExtensionPoint
|
import net.mamoe.mirai.console.extension.AbstractExtensionPoint
|
||||||
import net.mamoe.mirai.console.extension.Extension
|
import net.mamoe.mirai.console.extension.Extension
|
||||||
import net.mamoe.mirai.console.extension.InstanceExtension
|
import net.mamoe.mirai.console.extension.InstanceExtension
|
||||||
|
import net.mamoe.mirai.console.extension.PluginComponentStorage
|
||||||
import net.mamoe.mirai.console.plugin.loader.PluginLoader
|
import net.mamoe.mirai.console.plugin.loader.PluginLoader
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 提供扩展 [PluginLoader]
|
* 提供扩展 [PluginLoader]
|
||||||
*
|
*
|
||||||
|
* @see PluginComponentStorage.contributePluginLoader
|
||||||
|
*
|
||||||
|
*
|
||||||
* @see Extension
|
* @see Extension
|
||||||
|
* @see PluginLoader
|
||||||
|
*
|
||||||
|
* @see LazyPluginLoaderProviderImpl
|
||||||
*/
|
*/
|
||||||
public interface PluginLoaderProvider : InstanceExtension<PluginLoader<*, *>> {
|
public interface PluginLoaderProvider : InstanceExtension<PluginLoader<*, *>> {
|
||||||
public companion object ExtensionPoint : AbstractExtensionPoint<PluginLoaderProvider>(PluginLoaderProvider::class)
|
public companion object ExtensionPoint : AbstractExtensionPoint<PluginLoaderProvider>(PluginLoaderProvider::class)
|
||||||
|
@ -9,8 +9,11 @@
|
|||||||
|
|
||||||
package net.mamoe.mirai.console.extensions
|
package net.mamoe.mirai.console.extensions
|
||||||
|
|
||||||
|
import net.mamoe.mirai.console.MiraiConsole
|
||||||
import net.mamoe.mirai.console.extension.AbstractExtensionPoint
|
import net.mamoe.mirai.console.extension.AbstractExtensionPoint
|
||||||
|
import net.mamoe.mirai.console.extension.ExtensionException
|
||||||
import net.mamoe.mirai.console.extension.FunctionExtension
|
import net.mamoe.mirai.console.extension.FunctionExtension
|
||||||
|
import net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 在 Console 启动完成后立即在主线程调用的扩展. 用于进行一些必要的延迟初始化.
|
* 在 Console 启动完成后立即在主线程调用的扩展. 用于进行一些必要的延迟初始化.
|
||||||
@ -20,7 +23,13 @@ import net.mamoe.mirai.console.extension.FunctionExtension
|
|||||||
public fun interface PostStartupExtension : FunctionExtension {
|
public fun interface PostStartupExtension : FunctionExtension {
|
||||||
/**
|
/**
|
||||||
* 将在 Console 主线程执行.
|
* 将在 Console 主线程执行.
|
||||||
|
*
|
||||||
|
* @throws Exception 所有抛出的 [Exception] 都会被捕获并包装为 [ExtensionException] 抛出, 并停止 [MiraiConsole]
|
||||||
|
*
|
||||||
|
* #### 内部实现细节
|
||||||
|
* 在 [MiraiConsoleImplementationBridge.doStart] 所有 [MiraiConsoleImplementationBridge.phase] 执行完成后顺序调用.
|
||||||
*/
|
*/
|
||||||
|
@Throws(Exception::class)
|
||||||
public operator fun invoke()
|
public operator fun invoke()
|
||||||
|
|
||||||
public companion object ExtensionPoint : AbstractExtensionPoint<PostStartupExtension>(PostStartupExtension::class)
|
public companion object ExtensionPoint : AbstractExtensionPoint<PostStartupExtension>(PostStartupExtension::class)
|
||||||
|
@ -217,7 +217,7 @@ internal object MiraiConsoleImplementationBridge : CoroutineScope, MiraiConsoleI
|
|||||||
}
|
}
|
||||||
|
|
||||||
GlobalComponentStorage.run {
|
GlobalComponentStorage.run {
|
||||||
PostStartupExtension.useExtensions { it() }
|
PostStartupExtension.useExtensions { it() } // exceptions thrown will be caught by caller of `doStart`.
|
||||||
}
|
}
|
||||||
|
|
||||||
mainLogger.info { "mirai-console started successfully." }
|
mainLogger.info { "mirai-console started successfully." }
|
||||||
|
@ -37,6 +37,7 @@ import net.mamoe.mirai.console.plugin.jvm.JvmPluginLoader
|
|||||||
* 直接实现接口 [PluginLoader] 或 [FilePluginLoader], 并注册 [PluginLoaderProvider]
|
* 直接实现接口 [PluginLoader] 或 [FilePluginLoader], 并注册 [PluginLoaderProvider]
|
||||||
*
|
*
|
||||||
* @see JvmPluginLoader Jar 插件加载器
|
* @see JvmPluginLoader Jar 插件加载器
|
||||||
|
* @see PluginLoaderProvider 扩展
|
||||||
*/
|
*/
|
||||||
public interface PluginLoader<P : Plugin, D : PluginDescription> {
|
public interface PluginLoader<P : Plugin, D : PluginDescription> {
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user