diff --git a/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt b/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt index 3267a10b8..0738f2789 100644 --- a/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt +++ b/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt @@ -256,6 +256,16 @@ internal class MiraiConsoleImplementationBridge( ) } } + account.configuration[ConfigurationKey.heartbeatStrategy]?.let { heartStrate -> + this.heartbeatStrategy = runCatching { + BotConfiguration.HeartbeatStrategy.valueOf(heartStrate.toString()) + }.getOrElse { + throw IllegalArgumentException( + "Bad auto-login config value for `heartbeatStrategy` for account $id", + it + ) + } + } account.configuration[ConfigurationKey.device]?.let { device -> fileBasedDeviceInfo(device.toString()) } diff --git a/mirai-console/backend/mirai-console/src/internal/data/builtins/AutoLoginConfig.kt b/mirai-console/backend/mirai-console/src/internal/data/builtins/AutoLoginConfig.kt index 06c782f7d..c5328f854 100644 --- a/mirai-console/backend/mirai-console/src/internal/data/builtins/AutoLoginConfig.kt +++ b/mirai-console/backend/mirai-console/src/internal/data/builtins/AutoLoginConfig.kt @@ -39,6 +39,7 @@ public class AutoLoginConfig : AutoSavePluginConfig("AutoLogin") { "protocol": "ANDROID_PHONE" / "ANDROID_PAD" / "ANDROID_WATCH" /"MAC" / "IPAD" "device": "device.json" "enable": true + "heartbeatStrategy": "STAT_HB" / "REGISTER" / "NONE" """ ) val configuration: Map<ConfigurationKey, @Serializable(with = YamlDynamicSerializer::class) Any> = mapOf(), @@ -69,6 +70,7 @@ public class AutoLoginConfig : AutoSavePluginConfig("AutoLogin") { protocol, device, enable, + heartbeatStrategy, ; @@ -106,7 +108,8 @@ public class AutoLoginConfig : AutoSavePluginConfig("AutoLogin") { configuration = mapOf( Account.ConfigurationKey.protocol to "ANDROID_PHONE", Account.ConfigurationKey.device to "device.json", - Account.ConfigurationKey.enable to true + Account.ConfigurationKey.enable to true, + Account.ConfigurationKey.heartbeatStrategy to "STAT_HB" ) ) ) diff --git a/mirai-console/backend/mirai-console/test/configuration/AutoLoginTest.kt b/mirai-console/backend/mirai-console/test/configuration/AutoLoginTest.kt new file mode 100644 index 000000000..3c408b5f6 --- /dev/null +++ b/mirai-console/backend/mirai-console/test/configuration/AutoLoginTest.kt @@ -0,0 +1,45 @@ +/* + * Copyright 2019-2022 Mamoe Technologies and contributors. + * + * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. + * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. + * + * https://github.com/mamoe/mirai/blob/dev/LICENSE + */ + +package net.mamoe.mirai.console.configuration + +import net.mamoe.mirai.console.MiraiConsoleImplementation.Companion.start +import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig +import net.mamoe.mirai.console.testFramework.AbstractConsoleInstanceTest +import net.mamoe.mirai.console.testFramework.MockConsoleImplementation +import net.mamoe.mirai.event.events.BotOnlineEvent +import net.mamoe.mirai.event.globalEventChannel +import net.mamoe.mirai.utils.BotConfiguration +import org.junit.jupiter.api.Disabled +import org.junit.jupiter.api.Test +import kotlin.test.assertEquals + +class AutoLoginTest : AbstractConsoleInstanceTest() { + + @Disabled // no mock login + @Test + fun testHeartbeatStrategy() { + stopConsole() // stop previous console + val console = MockConsoleImplementation() + val config = AutoLoginConfig() + config.accounts.clear() + config.accounts.add( + AutoLoginConfig.Account( + "111", + AutoLoginConfig.Account.Password(AutoLoginConfig.Account.PasswordKind.PLAIN, "pwd"), + configuration = mapOf(AutoLoginConfig.Account.ConfigurationKey.heartbeatStrategy to "REGISTER") + ) + ) + console.consoleDataScope.addAndReloadConfig(config) + console.globalEventChannel().subscribeAlways<BotOnlineEvent> { + assertEquals(BotConfiguration.HeartbeatStrategy.REGISTER, this.bot.configuration.heartbeatStrategy) + } + console.start() + } +} \ No newline at end of file diff --git a/mirai-console/backend/mirai-console/test/data/PluginMovingTests.kt b/mirai-console/backend/mirai-console/test/data/PluginMovingTests.kt index 7b943e6ec..b14f85e87 100644 --- a/mirai-console/backend/mirai-console/test/data/PluginMovingTests.kt +++ b/mirai-console/backend/mirai-console/test/data/PluginMovingTests.kt @@ -10,7 +10,6 @@ package net.mamoe.mirai.console.data import net.mamoe.mirai.console.MiraiConsole -import net.mamoe.mirai.console.testFramework.AbstractConsoleInstanceTest import net.mamoe.mirai.console.internal.data.mkdir import net.mamoe.mirai.console.plugin.PluginManager import net.mamoe.mirai.console.plugin.PluginManager.INSTANCE.load @@ -18,7 +17,7 @@ import net.mamoe.mirai.console.plugin.id import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin import net.mamoe.mirai.console.plugin.name -import org.junit.jupiter.api.Disabled +import net.mamoe.mirai.console.testFramework.AbstractConsoleInstanceTest import org.junit.jupiter.api.Test class PluginMovingTests : AbstractConsoleInstanceTest() { @@ -30,7 +29,7 @@ class PluginMovingTests : AbstractConsoleInstanceTest() { private fun mkdir(abstractPath: String) = PluginManager.pluginsDataPath.resolve(abstractPath).mkdir() - @Disabled // disabled since test framework fails + //@Disabled // disabled since test framework fails @Test fun movingPluginPath() { // Normal move