From 60f1e79e499d122d760f580648754579cd39dfb3 Mon Sep 17 00:00:00 2001
From: StageGuard <1355416608@qq.com>
Date: Wed, 6 Sep 2023 10:51:11 +0800
Subject: [PATCH] [core] handle login result 180

---
 .../network/protocol/packet/login/WtLogin.kt       | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/mirai-core/src/commonMain/kotlin/network/protocol/packet/login/WtLogin.kt b/mirai-core/src/commonMain/kotlin/network/protocol/packet/login/WtLogin.kt
index bb5879234..b4f46ef7d 100644
--- a/mirai-core/src/commonMain/kotlin/network/protocol/packet/login/WtLogin.kt
+++ b/mirai-core/src/commonMain/kotlin/network/protocol/packet/login/WtLogin.kt
@@ -241,6 +241,8 @@ internal class WtLogin {
                 // 40: blocked
                 // 161: 今日操作次数过多,请等待一天后再试。   (SMS)
                 // 162: 可能也是 SMS 太频繁
+                // 180:可能是需要换服务器 IP
+                180 -> onChangeServerIpv6(tlvMap, bot)
                 204 /*-52*/ -> onDevLockLogin(tlvMap, bot)
                 // 1, 15 -> onErrorMessage(tlvMap) ?: error("Cannot find error message")
                 else -> {
@@ -256,6 +258,18 @@ internal class WtLogin {
             return tlvMap.entries.joinToString { "${it.key}=${it.value.toUHexString()}" }
         }
 
+        // temporary function name
+        private fun onChangeServerIpv6(
+            tlvMap: TlvMap,
+            bot: QQAndroidBot
+        ): LoginPacketResponse.Error {
+            tlvMap[0x161]?.let { bot.client.analysisTlv161(it) }
+
+            return onErrorMessage(0x146, tlvMap, bot)
+                ?: LoginPacketResponse.Error(bot, 0x146, "login failed",
+                    "login result type 180 without error message", "")
+        }
+
         private fun onDevLockLogin(
             tlvMap: TlvMap,
             bot: QQAndroidBot