mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-23 13:50:12 +08:00
Update to Kotlin 1.4.0, kotlinx.serialization 1.0.0-RC, yamlkt 0.4.0
This commit is contained in:
parent
47e52e20dd
commit
89784db637
@ -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 兼容性最高, 在其他都表现不佳的时候请使用</br>
|
||||
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 <b>Plugins</b>, tells the bot what to do
|
||||
#### Mirai Console 支持插件系统, 你可以自己开发或使用公开的插件来逻辑化机器人, 如群管
|
||||
<br>
|
||||
|
||||
#### download 下载
|
||||
#### how to get/write plugins 如何获取/写插件
|
||||
<br>
|
||||
<br>
|
||||
|
||||
### how to use(如何使用)
|
||||
#### how to run Mirai Console
|
||||
<ul>
|
||||
<li>download mirai-console.jar</li>
|
||||
<li>open command line/terminal</li>
|
||||
<li>create a folder and put mirai-console.jar in</li>
|
||||
<li>cd that folder</li>
|
||||
<li>"java -jar mirai-console.jar"</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li>下载mirai-console.jar</li>
|
||||
<li>打开终端</li>
|
||||
<li>在任何地方创建一个文件夹, 并放入mirai-console.jar</li>
|
||||
<li>在终端中打开该文件夹"cd"</li>
|
||||
<li>输入"java -jar mirai-console.jar"</li>
|
||||
</ul>
|
||||
|
||||
#### how to add plugins
|
||||
<ul>
|
||||
<li>After first time of running mirai console</li>
|
||||
<li>/plugins/folder will be created next to mirai-console.jar</li>
|
||||
<li>put plugin(.jar) into /plugins/</li>
|
||||
<li>restart mirai console</li>
|
||||
<li>checking logger and check if the plugin is loaded successfully</li>
|
||||
<li>if the plugin has it own Config file, it normally appears in /plugins/{pluginName}/</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li>在首次运行mirai console后</li>
|
||||
<li>mirai-console.jar 的同级会出现/plugins/文件夹</li>
|
||||
<li>将插件(.jar)放入/plugins/文件夹</li>
|
||||
<li>重启mirai console</li>
|
||||
<li>在开启后检查日志, 是否成功加载</li>
|
||||
<li>如该插件有配置文件, 配置文件一般会创建在/plugins/插件名字/ 文件夹下</li>
|
||||
</ul>
|
||||
|
||||
|
@ -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 兼容性最高, 在其他都表现不佳的时候请使用</br>
|
||||
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 <b>Plugins</b>, tells the bot what to do
|
||||
#### Mirai Console 支持插件系统, 你可以自己开发或使用公开的插件来逻辑化机器人, 如群管
|
||||
<br>
|
||||
|
||||
#### download 下载
|
||||
#### how to get/write plugins 如何获取/写插件
|
||||
<br>
|
||||
<br>
|
||||
|
||||
### how to use(如何使用)
|
||||
#### how to run Mirai Console
|
||||
<ul>
|
||||
<li>download mirai-console.jar</li>
|
||||
<li>open command line/terminal</li>
|
||||
<li>create a folder and put mirai-console.jar in</li>
|
||||
<li>cd that folder</li>
|
||||
<li>"java -jar mirai-console.jar"</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li>下载mirai-console.jar</li>
|
||||
<li>打开终端</li>
|
||||
<li>在任何地方创建一个文件夹, 并放入mirai-console.jar</li>
|
||||
<li>在终端中打开该文件夹"cd"</li>
|
||||
<li>输入"java -jar mirai-console.jar"</li>
|
||||
</ul>
|
||||
|
||||
#### how to add plugins
|
||||
<ul>
|
||||
<li>After first time of running mirai console</li>
|
||||
<li>/plugins/folder will be created next to mirai-console.jar</li>
|
||||
<li>put plugin(.jar) into /plugins/</li>
|
||||
<li>restart mirai console</li>
|
||||
<li>checking logger and check if the plugin is loaded successfully</li>
|
||||
<li>if the plugin has it own Config file, it normally appears in /plugins/{pluginName}/</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li>在首次运行mirai console后</li>
|
||||
<li>mirai-console.jar 的同级会出现/plugins/文件夹</li>
|
||||
<li>将插件(.jar)放入/plugins/文件夹</li>
|
||||
<li>重启mirai console</li>
|
||||
<li>在开启后检查日志, 是否成功加载</li>
|
||||
<li>如该插件有配置文件, 配置文件一般会创建在/plugins/插件名字/ 文件夹下</li>
|
||||
</ul>
|
||||
|
||||
|
@ -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))
|
||||
|
@ -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)
|
||||
|
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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 <T> MutableSet<T>.observable(crossinline onChanged: () -> Un
|
||||
}
|
||||
|
||||
|
||||
@OptIn(UnsafeSerializationApi::class)
|
||||
@OptIn(InternalSerializationApi::class)
|
||||
internal fun <R : Any> Any.smartCastPrimitive(clazz: KClass<R>): 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)
|
||||
}
|
||||
|
@ -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<Any?> {
|
||||
* 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",
|
||||
|
@ -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<Map<*, *>>(any)
|
||||
)
|
||||
else -> PluginDependency(any.toString())
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user