diff --git a/backend/codegen/README.MD b/backend/codegen/README.MD
deleted file mode 100644
index 6d5db89bc..000000000
--- a/backend/codegen/README.MD
+++ /dev/null
@@ -1,87 +0,0 @@
-# Mirai Console
-你可以在全平台运行Mirai高效率机器人框架
-### Mirai Console提供了6个版本以满足各种需要
-#### 所有版本的Mirai Console API相同 插件系统相同
-
-| 名字 | 介绍 |
-|:------------------------|:------------------------------|
-| Mirai-Console-Pure | 最纯净版, CLI环境, 通过标准输入与标准输出 交互 |
-| Mirai-Console-Terminal | (UNIX)Terminal环境 提供简洁的富文本控制台 |
-| Mirai-Console-Android | 安卓APP (TODO) |
-| Mirai-Console-Graphical | JavaFX的图形化界面 (.jar/.exe/.dmg) |
-| Mirai-Console-WebPanel | Web Panel操作(TODO) |
-| Mirai-Console-Ios | IOS APP (TODO) |
-
-
-### 如何选择版本
-1: Mirai-Console-Pure 兼容性最高, 在其他都表现不佳的时候请使用
-2: 以系统区分
-```kotlin
- return when(operatingSystem){
- WINDOWS -> listOf("Graphical","WebPanel","Pure")
- MAC_OS -> listOf("Graphical","Terminal","WebPanel","Pure")
- LINUX -> listOf("Terminal","Pure")
- ANDROID -> listOf("Android","Pure","WebPanel")
- IOS -> listOf("Ios")
- else -> listOf("Pure")
- }
-```
-3: 以策略区分
-```kotlin
- return when(task){
- 体验 -> listOf("Graphical","Terminal","WebPanel","Android","Pure")
- 测试插件 -> listOf("Pure")
- 调试插件 -> byOperatingSystem()
- 稳定挂机 -> listOf("Terminal","Pure")
- else -> listOf("Pure")
- }
-```
-
-
-#### More Importantly, Mirai Console support Plugins, tells the bot what to do
-#### Mirai Console 支持插件系统, 你可以自己开发或使用公开的插件来逻辑化机器人, 如群管
-
-
-#### download 下载
-#### how to get/write plugins 如何获取/写插件
-
-
-
-### how to use(如何使用)
-#### how to run Mirai Console
-
- - download mirai-console.jar
- - open command line/terminal
- - create a folder and put mirai-console.jar in
- - cd that folder
- - "java -jar mirai-console.jar"
-
-
-
- - 下载mirai-console.jar
- - 打开终端
- - 在任何地方创建一个文件夹, 并放入mirai-console.jar
- - 在终端中打开该文件夹"cd"
- - 输入"java -jar mirai-console.jar"
-
-
-#### how to add plugins
-
- - After first time of running mirai console
- - /plugins/folder will be created next to mirai-console.jar
- - put plugin(.jar) into /plugins/
- - restart mirai console
- - checking logger and check if the plugin is loaded successfully
- - if the plugin has it own Config file, it normally appears in /plugins/{pluginName}/
-
-
-
- - 在首次运行mirai console后
- - mirai-console.jar 的同级会出现/plugins/文件夹
- - 将插件(.jar)放入/plugins/文件夹
- - 重启mirai console
- - 在开启后检查日志, 是否成功加载
- - 如该插件有配置文件, 配置文件一般会创建在/plugins/插件名字/ 文件夹下
-
-
-
diff --git a/backend/mirai-console/README.MD b/backend/mirai-console/README.MD
deleted file mode 100644
index 6d5db89bc..000000000
--- a/backend/mirai-console/README.MD
+++ /dev/null
@@ -1,87 +0,0 @@
-# Mirai Console
-你可以在全平台运行Mirai高效率机器人框架
-### Mirai Console提供了6个版本以满足各种需要
-#### 所有版本的Mirai Console API相同 插件系统相同
-
-| 名字 | 介绍 |
-|:------------------------|:------------------------------|
-| Mirai-Console-Pure | 最纯净版, CLI环境, 通过标准输入与标准输出 交互 |
-| Mirai-Console-Terminal | (UNIX)Terminal环境 提供简洁的富文本控制台 |
-| Mirai-Console-Android | 安卓APP (TODO) |
-| Mirai-Console-Graphical | JavaFX的图形化界面 (.jar/.exe/.dmg) |
-| Mirai-Console-WebPanel | Web Panel操作(TODO) |
-| Mirai-Console-Ios | IOS APP (TODO) |
-
-
-### 如何选择版本
-1: Mirai-Console-Pure 兼容性最高, 在其他都表现不佳的时候请使用
-2: 以系统区分
-```kotlin
- return when(operatingSystem){
- WINDOWS -> listOf("Graphical","WebPanel","Pure")
- MAC_OS -> listOf("Graphical","Terminal","WebPanel","Pure")
- LINUX -> listOf("Terminal","Pure")
- ANDROID -> listOf("Android","Pure","WebPanel")
- IOS -> listOf("Ios")
- else -> listOf("Pure")
- }
-```
-3: 以策略区分
-```kotlin
- return when(task){
- 体验 -> listOf("Graphical","Terminal","WebPanel","Android","Pure")
- 测试插件 -> listOf("Pure")
- 调试插件 -> byOperatingSystem()
- 稳定挂机 -> listOf("Terminal","Pure")
- else -> listOf("Pure")
- }
-```
-
-
-#### More Importantly, Mirai Console support Plugins, tells the bot what to do
-#### Mirai Console 支持插件系统, 你可以自己开发或使用公开的插件来逻辑化机器人, 如群管
-
-
-#### download 下载
-#### how to get/write plugins 如何获取/写插件
-
-
-
-### how to use(如何使用)
-#### how to run Mirai Console
-
- - download mirai-console.jar
- - open command line/terminal
- - create a folder and put mirai-console.jar in
- - cd that folder
- - "java -jar mirai-console.jar"
-
-
-
- - 下载mirai-console.jar
- - 打开终端
- - 在任何地方创建一个文件夹, 并放入mirai-console.jar
- - 在终端中打开该文件夹"cd"
- - 输入"java -jar mirai-console.jar"
-
-
-#### how to add plugins
-
- - After first time of running mirai console
- - /plugins/folder will be created next to mirai-console.jar
- - put plugin(.jar) into /plugins/
- - restart mirai console
- - checking logger and check if the plugin is loaded successfully
- - if the plugin has it own Config file, it normally appears in /plugins/{pluginName}/
-
-
-
- - 在首次运行mirai console后
- - mirai-console.jar 的同级会出现/plugins/文件夹
- - 将插件(.jar)放入/plugins/文件夹
- - 重启mirai console
- - 在开启后检查日志, 是否成功加载
- - 如该插件有配置文件, 配置文件一般会创建在/plugins/插件名字/ 文件夹下
-
-
-
diff --git a/backend/mirai-console/build.gradle.kts b/backend/mirai-console/build.gradle.kts
index 556a66ab5..80c2a2fec 100644
--- a/backend/mirai-console/build.gradle.kts
+++ b/backend/mirai-console/build.gradle.kts
@@ -51,6 +51,7 @@ kotlin {
useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes")
useExperimentalAnnotation("kotlin.experimental.ExperimentalTypeInference")
useExperimentalAnnotation("kotlin.contracts.ExperimentalContracts")
+ useExperimentalAnnotation("kotlinx.serialization.ExperimentalSerializationApi")
}
}
}
@@ -62,7 +63,7 @@ dependencies {
implementation(kotlinx("serialization-core", Versions.serialization))
implementation(kotlin("reflect"))
- implementation("net.mamoe.yamlkt:yamlkt:0.3.3")
+ implementation("net.mamoe.yamlkt:yamlkt:0.4.0")
implementation("org.jetbrains.kotlinx:atomicfu:${Versions.atomicFU}")
api("org.jetbrains:annotations:19.0.0")
api(kotlinx("coroutines-jdk8", Versions.coroutines))
diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/plugin/JarPluginLoaderImpl.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/plugin/JarPluginLoaderImpl.kt
index 3f9bd34c2..1902510e6 100644
--- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/plugin/JarPluginLoaderImpl.kt
+++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/plugin/JarPluginLoaderImpl.kt
@@ -63,7 +63,7 @@ internal object JarPluginLoaderImpl :
url.readText()
}.fold(
onSuccess = { yaml ->
- Yaml.nonStrict.parse(JvmPluginDescription.serializer(), yaml)
+ Yaml.nonStrict.decodeFromString(JvmPluginDescription.serializer(), yaml)
},
onFailure = {
logger.error("Cannot load plugin file ${file.name}", it)
diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/SettingStorage internal.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/SettingStorage internal.kt
index 1eab01dd7..4e73755a0 100644
--- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/SettingStorage internal.kt
+++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/SettingStorage internal.kt
@@ -145,7 +145,7 @@ internal open class MultiFileSettingStorageImpl(
"or 'setting' is an object or has a constructor which either has no parameters or all parameters of which are optional"
)
if (file.exists() && file.isFile && file.canRead()) {
- Yaml.default.parse(instance.updaterSerializer, file.readText())
+ Yaml.default.decodeFromString(instance.updaterSerializer, file.readText())
}
instance
}
@@ -170,7 +170,7 @@ internal open class MultiFileSettingStorageImpl(
val file = getSettingFile(holder, this)
if (file.exists() && file.isFile && file.canRead()) {
- file.writeText(Yaml.default.stringify(setting.updaterSerializer, Unit))
+ file.writeText(Yaml.default.encodeToString(setting.updaterSerializer, Unit))
}
}
}
diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/collectionUtil.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/collectionUtil.kt
index e9bb8e0bd..528293c23 100644
--- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/collectionUtil.kt
+++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/collectionUtil.kt
@@ -11,7 +11,7 @@
package net.mamoe.mirai.console.internal.setting
-import kotlinx.serialization.UnsafeSerializationApi
+import kotlinx.serialization.InternalSerializationApi
import kotlinx.serialization.serializer
import net.mamoe.yamlkt.Yaml
import kotlin.reflect.KClass
@@ -452,10 +452,10 @@ internal inline fun MutableSet.observable(crossinline onChanged: () -> Un
}
-@OptIn(UnsafeSerializationApi::class)
+@OptIn(InternalSerializationApi::class)
internal fun Any.smartCastPrimitive(clazz: KClass): R {
kotlin.runCatching {
- return Yaml.default.parse(clazz.serializer(), this.toString())
+ return Yaml.default.decodeFromString(clazz.serializer(), this.toString())
}.getOrElse {
throw IllegalArgumentException("Cannot cast '$this' to ${clazz.qualifiedName}", it)
}
diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/serializerHelper.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/serializerHelper.kt
index ff5c17e9c..c74954ab7 100644
--- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/serializerHelper.kt
+++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/setting/serializerHelper.kt
@@ -9,8 +9,9 @@
package net.mamoe.mirai.console.internal.setting
+import kotlinx.serialization.ExperimentalSerializationApi
+import kotlinx.serialization.InternalSerializationApi
import kotlinx.serialization.KSerializer
-import kotlinx.serialization.UnsafeSerializationApi
import kotlinx.serialization.builtins.*
import kotlinx.serialization.serializer
import net.mamoe.yamlkt.YamlDynamicSerializer
@@ -24,7 +25,7 @@ import kotlin.reflect.KType
* Copied from kotlinx.serialization, modifications are marked with "/* mamoe modify */"
* Copyright 2017-2020 JetBrains s.r.o.
*/
-@OptIn(UnsafeSerializationApi::class)
+@OptIn(InternalSerializationApi::class, ExperimentalSerializationApi::class)
@Suppress(
"UNCHECKED_CAST",
"NO_REFLECTION_IN_CLASS_PATH",
@@ -81,7 +82,6 @@ internal fun serializerMirai(type: KType): KSerializer {
* Copied from kotlinx.serialization, modifications are marked with "/* mamoe modify */"
* Copyright 2017-2020 JetBrains s.r.o.
*/
-@OptIn(UnsafeSerializationApi::class)
@Suppress(
"UNCHECKED_CAST",
"NO_REFLECTION_IN_CLASS_PATH",
diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/description.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/description.kt
index efc3013a9..ae7cfe85a 100644
--- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/description.kt
+++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/description.kt
@@ -13,6 +13,7 @@ import com.vdurmont.semver4j.Semver
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.builtins.serializer
+import kotlinx.serialization.encodeToString
import net.mamoe.mirai.console.internal.setting.SemverAsStringSerializerIvy
import net.mamoe.mirai.console.internal.setting.map
import net.mamoe.yamlkt.Yaml
@@ -65,8 +66,6 @@ public data class PluginDependency(
* 版本遵循 [语义化版本 2.0 规范](https://semver.org/lang/zh-CN/),
*
* 允许 [Apache Ivy 格式版本号](http://ant.apache.org/ivy/history/latest-milestone/ivyfile/dependency.html)
- *
- * @see versionKind 版本号类型
*/
public val version: @Serializable(SemverAsStringSerializerIvy::class) Semver? = null,
/**
@@ -86,7 +85,10 @@ public data class PluginDependency(
serializer = { it },
deserializer = { any ->
when (any) {
- is Map<*, *> -> Yaml.nonStrict.parse(serializer(), Yaml.nonStrict.stringify(any))
+ is Map<*, *> -> Yaml.nonStrict.decodeFromString(
+ serializer(),
+ Yaml.nonStrict.encodeToString