mirror of
https://github.com/mamoe/mirai.git
synced 2025-04-24 20:43:33 +08:00
feat: console requirement
This commit is contained in:
parent
fb3b56da82
commit
42af5b2425
mirai-console/backend/mirai-console/src
internal/plugin
plugin
@ -28,6 +28,7 @@ import net.mamoe.mirai.console.plugin.loader.AbstractFilePluginLoader
|
||||
import net.mamoe.mirai.console.plugin.loader.PluginLoadException
|
||||
import net.mamoe.mirai.console.plugin.name
|
||||
import net.mamoe.mirai.console.util.ConsoleExperimentalApi
|
||||
import net.mamoe.mirai.console.util.SemVersion
|
||||
import net.mamoe.mirai.utils.*
|
||||
import net.mamoe.yamlkt.Yaml
|
||||
import java.io.File
|
||||
@ -336,7 +337,11 @@ internal class BuiltInJvmPluginLoaderImpl(
|
||||
check(plugin is JvmPluginInternal || plugin is NotYetLoadedJvmPlugin) {
|
||||
"A JvmPlugin must extend AbstractJvmPlugin to be loaded by JvmPluginLoader.BuiltIn"
|
||||
}
|
||||
|
||||
plugin.description.consoleRequirement?.let { requirement ->
|
||||
if (!SemVersion.parseRangeRequirement(requirement).test(MiraiConsole.version)) {
|
||||
throw PluginLoadException("Plugin '${plugin.id}' ('${plugin.id}') requires mirai-console with version $requirement while the resolved is ${MiraiConsole.version}")
|
||||
}
|
||||
}
|
||||
|
||||
// region Link dependencies
|
||||
when (plugin) {
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
package net.mamoe.mirai.console.plugin.description
|
||||
|
||||
import net.mamoe.mirai.console.MiraiConsole
|
||||
import net.mamoe.mirai.console.compiler.common.CheckerConstants
|
||||
import net.mamoe.mirai.console.compiler.common.ResolveContext
|
||||
import net.mamoe.mirai.console.compiler.common.ResolveContext.Kind.*
|
||||
@ -108,6 +109,16 @@ public interface PluginDescription {
|
||||
*/
|
||||
public val dependencies: Set<PluginDependency>
|
||||
|
||||
/**
|
||||
* 此插件依赖的 Mirai Console 版本号. 为 null 时则为不限制版本. 通常建议至少限制使用同一个主版本号.
|
||||
* 如开发时依赖该插件版本 2.15.0, 则将版本限制设置为 `[2.15.0, 2.16.0)`, 表示大于等于 `2.15.0`, 小于 `2.16.0`.
|
||||
*
|
||||
* 版本遵循 [语义化版本 2.0 规范](https://semver.org/lang/zh-CN/),
|
||||
*
|
||||
* @see MiraiConsole.version
|
||||
*/
|
||||
@ResolveContext(VERSION_REQUIREMENT) public val consoleRequirement: String?
|
||||
|
||||
public companion object {
|
||||
/**
|
||||
* [PluginDescription.id] 的合法 [Regex].
|
||||
|
@ -14,6 +14,7 @@ package net.mamoe.mirai.console.plugin.jvm
|
||||
import io.github.karlatemp.caller.CallerFinder
|
||||
import io.github.karlatemp.caller.StackFrame
|
||||
import kotlinx.serialization.Serializable
|
||||
import net.mamoe.mirai.console.MiraiConsole
|
||||
import net.mamoe.mirai.console.compiler.common.ResolveContext
|
||||
import net.mamoe.mirai.console.compiler.common.ResolveContext.Kind.*
|
||||
import net.mamoe.mirai.console.internal.util.findLoader
|
||||
@ -134,6 +135,7 @@ public class JvmPluginDescriptionBuilder(
|
||||
private var author: String = ""
|
||||
private var info: String = ""
|
||||
private var dependencies: MutableSet<PluginDependency> = mutableSetOf()
|
||||
private var consoleRequirement: String? = null
|
||||
|
||||
@ILoveKuriyamaMiraiForever
|
||||
public fun name(@ResolveContext(PLUGIN_NAME) value: String): JvmPluginDescriptionBuilder =
|
||||
@ -200,10 +202,20 @@ public class JvmPluginDescriptionBuilder(
|
||||
this.dependencies.add(PluginDependency(pluginId, null, isOptional))
|
||||
}
|
||||
|
||||
/**
|
||||
* @see MiraiConsole.version
|
||||
*/
|
||||
@ILoveKuriyamaMiraiForever
|
||||
public fun consoleRequirement(
|
||||
@ResolveContext(VERSION_REQUIREMENT) versionRequirement: String
|
||||
): JvmPluginDescriptionBuilder = apply {
|
||||
consoleRequirement = versionRequirement
|
||||
}
|
||||
|
||||
|
||||
public fun build(): JvmPluginDescription =
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
SimpleJvmPluginDescription(id, name, version, author, info, dependencies)
|
||||
SimpleJvmPluginDescription(id, name, version, author, info, dependencies, consoleRequirement)
|
||||
|
||||
/**
|
||||
* 标注一个 [JvmPluginDescription] DSL
|
||||
@ -228,6 +240,7 @@ internal data class SimpleJvmPluginDescription
|
||||
override val author: String = "",
|
||||
override val info: String = "",
|
||||
override val dependencies: Set<PluginDependency> = setOf(),
|
||||
override val consoleRequirement: String? = null
|
||||
) : JvmPluginDescription {
|
||||
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
@ -254,12 +267,14 @@ internal data class SimpleJvmPluginDescription
|
||||
val author: String = "",
|
||||
val info: String = "",
|
||||
val dependencies: Set<PluginDependency> = setOf(),
|
||||
val consoleRequirement: String? = null
|
||||
) {
|
||||
fun toJvmPluginDescription(): JvmPluginDescription {
|
||||
return SimpleJvmPluginDescription(
|
||||
id,
|
||||
name ?: id,
|
||||
version, author, info, dependencies
|
||||
version, author, info, dependencies,
|
||||
consoleRequirement
|
||||
)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user