mirror of
https://github.com/mamoe/mirai.git
synced 2025-04-17 09:09:23 +08:00
Android login Captcha complete
This commit is contained in:
parent
77e25ec863
commit
0d6582fb00
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network
@ -34,6 +34,14 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
|
||||
|
||||
bot.logger.info("Trying login")
|
||||
when (val response: LoginPacket.LoginPacketResponse = LoginPacket.SubCommand9(bot.client).sendAndExpect()) {
|
||||
is UnsafeLogin -> {
|
||||
bot.logger.info("Login unsuccessful, device auth is needed")
|
||||
bot.logger.info("登陆失败, 原因为非常用设备登陆")
|
||||
bot.logger.info("Open the following URL in QQ browser and complete the verification")
|
||||
bot.logger.info("将下面这个链接在QQ浏览器中打开并完成认证后尝试再次登陆")
|
||||
bot.logger.info(response.url)
|
||||
return
|
||||
}
|
||||
is Captcha -> when (response) {
|
||||
is Captcha.Picture -> {
|
||||
bot.logger.info("需要图片验证码")
|
||||
|
@ -112,7 +112,7 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse>("wt
|
||||
isGuidFromFileNull = false,
|
||||
isGuidAvailable = true,
|
||||
isGuidChanged = false,
|
||||
guidFlag = guidFlag(GuidSource.FROM_STORAGE, MacOrAndroidIdChangeFlag.NoChange),
|
||||
guidFlag = guidFlag(GuidSource.FROM_STORAGE, MacOrAndroidIdChangeFlag(0)),
|
||||
buildModel = client.device.model,
|
||||
guid = client.device.guid,
|
||||
buildBrand = client.device.brand,
|
||||
@ -215,6 +215,10 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse>("wt
|
||||
val sign: ByteArray
|
||||
) : Captcha()
|
||||
}
|
||||
|
||||
class UnsafeLogin(val url: String) : LoginPacketResponse()
|
||||
|
||||
class DeviceLockLogin() : LoginPacketResponse()
|
||||
}
|
||||
|
||||
@InternalAPI
|
||||
@ -239,10 +243,24 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse>("wt
|
||||
0 -> onLoginSuccess(tlvMap, bot)
|
||||
1, 15 -> onErrorMessage(tlvMap)
|
||||
2 -> onSolveLoginCaptcha(tlvMap, bot)
|
||||
-96 -> onUnsafeDeviceLogin(tlvMap, bot)
|
||||
-52 -> onDeviceLockLogin(tlvMap, bot)
|
||||
else -> error("unknown login result type: $type")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun onDeviceLockLogin(tlvMap: Map<Int, ByteArray>, bot: QQAndroidBot): LoginPacketResponse.DeviceLockLogin {
|
||||
println(tlvMap[0x104]!!.toUHexString())
|
||||
println(tlvMap[0x402]!!.toUHexString())
|
||||
println(tlvMap[0x403]!!.toUHexString())
|
||||
return LoginPacketResponse.DeviceLockLogin();
|
||||
}
|
||||
|
||||
private fun onUnsafeDeviceLogin(tlvMap: Map<Int, ByteArray>, bot: QQAndroidBot): LoginPacketResponse.UnsafeLogin {
|
||||
return LoginPacketResponse.UnsafeLogin(tlvMap[0x204]!!.toReadPacket().readRemainingBytes().encodeToString())
|
||||
}
|
||||
|
||||
private fun onErrorMessage(tlvMap: Map<Int, ByteArray>): LoginPacketResponse.Error {
|
||||
return tlvMap[0x146]?.toReadPacket()?.run {
|
||||
readShort() // ver
|
||||
|
Loading…
Reference in New Issue
Block a user