Skip to content

Commit 3d3a995

Browse files
authored
Support heartbeatStrategy in autologin config (#1903)
* support heartbeatStrategy in autologin config * doc: update tips https://github.com/mamoe/mirai/blob/8d641c1d4c82c6792f29113cfd3978ba90a71af3/docs/Bots.md
1 parent 77e2a5c commit 3d3a995

File tree

4 files changed

+61
-4
lines changed

4 files changed

+61
-4
lines changed

mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt

+10
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,16 @@ internal class MiraiConsoleImplementationBridge(
256256
)
257257
}
258258
}
259+
account.configuration[ConfigurationKey.heartbeatStrategy]?.let { heartStrate ->
260+
this.heartbeatStrategy = runCatching {
261+
BotConfiguration.HeartbeatStrategy.valueOf(heartStrate.toString())
262+
}.getOrElse {
263+
throw IllegalArgumentException(
264+
"Bad auto-login config value for `heartbeatStrategy` for account $id",
265+
it
266+
)
267+
}
268+
}
259269
account.configuration[ConfigurationKey.device]?.let { device ->
260270
fileBasedDeviceInfo(device.toString())
261271
}

mirai-console/backend/mirai-console/src/internal/data/builtins/AutoLoginConfig.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public class AutoLoginConfig : AutoSavePluginConfig("AutoLogin") {
3939
"protocol": "ANDROID_PHONE" / "ANDROID_PAD" / "ANDROID_WATCH" /"MAC" / "IPAD"
4040
"device": "device.json"
4141
"enable": true
42+
"heartbeatStrategy": "STAT_HB" / "REGISTER" / "NONE"
4243
"""
4344
)
4445
val configuration: Map<ConfigurationKey, @Serializable(with = YamlDynamicSerializer::class) Any> = mapOf(),
@@ -69,6 +70,7 @@ public class AutoLoginConfig : AutoSavePluginConfig("AutoLogin") {
6970
protocol,
7071
device,
7172
enable,
73+
heartbeatStrategy,
7274

7375
;
7476

@@ -106,7 +108,8 @@ public class AutoLoginConfig : AutoSavePluginConfig("AutoLogin") {
106108
configuration = mapOf(
107109
Account.ConfigurationKey.protocol to "ANDROID_PHONE",
108110
Account.ConfigurationKey.device to "device.json",
109-
Account.ConfigurationKey.enable to true
111+
Account.ConfigurationKey.enable to true,
112+
Account.ConfigurationKey.heartbeatStrategy to "STAT_HB"
110113
)
111114
)
112115
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Copyright 2019-2022 Mamoe Technologies and contributors.
3+
*
4+
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
5+
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
6+
*
7+
* https://github.com/mamoe/mirai/blob/dev/LICENSE
8+
*/
9+
10+
package net.mamoe.mirai.console.configuration
11+
12+
import net.mamoe.mirai.console.MiraiConsoleImplementation.Companion.start
13+
import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig
14+
import net.mamoe.mirai.console.testFramework.AbstractConsoleInstanceTest
15+
import net.mamoe.mirai.console.testFramework.MockConsoleImplementation
16+
import net.mamoe.mirai.event.events.BotOnlineEvent
17+
import net.mamoe.mirai.event.globalEventChannel
18+
import net.mamoe.mirai.utils.BotConfiguration
19+
import org.junit.jupiter.api.Disabled
20+
import org.junit.jupiter.api.Test
21+
import kotlin.test.assertEquals
22+
23+
class AutoLoginTest : AbstractConsoleInstanceTest() {
24+
25+
@Disabled // no mock login
26+
@Test
27+
fun testHeartbeatStrategy() {
28+
stopConsole() // stop previous console
29+
val console = MockConsoleImplementation()
30+
val config = AutoLoginConfig()
31+
config.accounts.clear()
32+
config.accounts.add(
33+
AutoLoginConfig.Account(
34+
"111",
35+
AutoLoginConfig.Account.Password(AutoLoginConfig.Account.PasswordKind.PLAIN, "pwd"),
36+
configuration = mapOf(AutoLoginConfig.Account.ConfigurationKey.heartbeatStrategy to "REGISTER")
37+
)
38+
)
39+
console.consoleDataScope.addAndReloadConfig(config)
40+
console.globalEventChannel().subscribeAlways<BotOnlineEvent> {
41+
assertEquals(BotConfiguration.HeartbeatStrategy.REGISTER, this.bot.configuration.heartbeatStrategy)
42+
}
43+
console.start()
44+
}
45+
}

mirai-console/backend/mirai-console/test/data/PluginMovingTests.kt

+2-3
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,14 @@
1010
package net.mamoe.mirai.console.data
1111

1212
import net.mamoe.mirai.console.MiraiConsole
13-
import net.mamoe.mirai.console.testFramework.AbstractConsoleInstanceTest
1413
import net.mamoe.mirai.console.internal.data.mkdir
1514
import net.mamoe.mirai.console.plugin.PluginManager
1615
import net.mamoe.mirai.console.plugin.PluginManager.INSTANCE.load
1716
import net.mamoe.mirai.console.plugin.id
1817
import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
1918
import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
2019
import net.mamoe.mirai.console.plugin.name
21-
import org.junit.jupiter.api.Disabled
20+
import net.mamoe.mirai.console.testFramework.AbstractConsoleInstanceTest
2221
import org.junit.jupiter.api.Test
2322

2423
class PluginMovingTests : AbstractConsoleInstanceTest() {
@@ -30,7 +29,7 @@ class PluginMovingTests : AbstractConsoleInstanceTest() {
3029

3130
private fun mkdir(abstractPath: String) = PluginManager.pluginsDataPath.resolve(abstractPath).mkdir()
3231

33-
@Disabled // disabled since test framework fails
32+
//@Disabled // disabled since test framework fails
3433
@Test
3534
fun movingPluginPath() {
3635
// Normal move

0 commit comments

Comments
 (0)