From eabffb46c41d87565b8be60505d4a2b0b5c1b70d Mon Sep 17 00:00:00 2001 From: "jiahua.liu" Date: Sat, 25 Jan 2020 21:40:34 +0800 Subject: [PATCH] Console Update --- .../protocol/packet/login/LoginPacket.kt | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt index 5a3a5d820..909234976 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/LoginPacket.kt @@ -1,6 +1,7 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.login +import io.ktor.util.InternalAPI import kotlinx.io.core.* import net.mamoe.mirai.data.Packet import net.mamoe.mirai.qqandroid.QQAndroidBot @@ -189,6 +190,7 @@ internal object LoginPacket : PacketFactory("wt } } + @InternalAPI @UseExperimental(MiraiDebugAPI::class) override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): LoginPacketResponse = this.debugPrint("login解析").run { // 00 09 sub cmd @@ -227,6 +229,7 @@ internal object LoginPacket : PacketFactory("wt } ?: error("Cannot find error message") } + @InternalAPI @UseExperimental(MiraiDebugAPI::class) private suspend fun onSolveLoginCaptcha(tlvMap: Map, bot: QQAndroidBot): LoginPacketResponse.Captcha { val client = bot.client @@ -237,11 +240,17 @@ internal object LoginPacket : PacketFactory("wt "36" -> { //图片验证 DebugLogger.debug("是一个图片验证码") - val imageData = tlvMap[0x165] - bot.configuration.captchaSolver.invoke( - bot, - (tlvMap[0x105] ?: error("Captcha Image Data Not Found")).toIoBuffer() - ) + val imageData = tlvMap[0x105]!!.toReadPacket() + println(tlvMap[0x105]!!.toUHexString()) + val signInfoLength = imageData.readShort() + val picLength = imageData.readShort() + val sign = imageData.readBytes(signInfoLength.toInt()) + val tv104 = tlvMap[0x104]!! + val ssoSign = + bot.configuration.captchaSolver.invoke( + bot, + imageData.readRemainingBytes().toIoBuffer() + ) } else -> { error("UNKNOWN CAPTCHA QUESTION: $question")