1
0
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:
cssxsh 2023-06-21 16:23:45 +08:00 committed by Karlatemp
parent fb3b56da82
commit 42af5b2425
No known key found for this signature in database
GPG Key ID: BA173CA2B9956C59
3 changed files with 34 additions and 3 deletions
mirai-console/backend/mirai-console/src

View File

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

View File

@ -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].

View File

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