mirror of
https://github.com/mamoe/mirai.git
synced 2025-04-14 23:20:49 +08:00
network handler update
This commit is contained in:
parent
dd7fb68b1c
commit
92b7b10f0e
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network
mirai-core/src
commonMain/kotlin/net.mamoe.mirai/utils
jvmMain/kotlin/net/mamoe/mirai/utils
@ -43,12 +43,8 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
|
||||
mainloop@ while (true) {
|
||||
when (response) {
|
||||
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
|
||||
bot.configuration.loginSolver.onSolveUnsafeDeviceLoginVerify(bot, response.url)
|
||||
response = LoginPacket.SubCommand9(bot.client).sendAndExpect()
|
||||
}
|
||||
|
||||
is Captcha -> when (response) {
|
||||
@ -73,7 +69,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
|
||||
|
||||
is Error -> error(response.toString())
|
||||
|
||||
is SMSVerifyCodeNeeded -> {
|
||||
is DeviceLockLogin -> {
|
||||
response = LoginPacket.SubCommand20(
|
||||
bot.client,
|
||||
response.t402,
|
||||
|
@ -300,7 +300,7 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse>("wt
|
||||
|
||||
class UnsafeLogin(val url: String) : LoginPacketResponse()
|
||||
|
||||
class SMSVerifyCodeNeeded(val t402: ByteArray, val t403: ByteArray) : LoginPacketResponse()
|
||||
class DeviceLockLogin(val t402: ByteArray, val t403: ByteArray) : LoginPacketResponse()
|
||||
}
|
||||
|
||||
@InternalAPI
|
||||
@ -336,10 +336,10 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse>("wt
|
||||
private fun onSMSVerifyNeeded(
|
||||
tlvMap: TlvMap,
|
||||
bot: QQAndroidBot
|
||||
): LoginPacketResponse.SMSVerifyCodeNeeded {
|
||||
): LoginPacketResponse.DeviceLockLogin {
|
||||
bot.client.t104 = tlvMap.getOrFail(0x104)
|
||||
println("403: " + tlvMap[0x403]?.toUHexString())
|
||||
return LoginPacketResponse.SMSVerifyCodeNeeded(tlvMap[0x402]!!, tlvMap.getOrFail(0x403))
|
||||
return LoginPacketResponse.DeviceLockLogin(tlvMap[0x402]!!, tlvMap.getOrFail(0x403))
|
||||
}
|
||||
|
||||
private fun onUnsafeDeviceLogin(tlvMap: TlvMap): LoginPacketResponse.UnsafeLogin {
|
||||
|
@ -13,9 +13,7 @@ abstract class LoginSolver {
|
||||
|
||||
abstract suspend fun onSolveSliderCaptcha(bot: Bot, url: String): String?
|
||||
|
||||
abstract suspend fun onGetPhoneNumber(): String
|
||||
|
||||
abstract suspend fun onGetSMSVerifyCode(): String
|
||||
abstract suspend fun onSolveUnsafeDeviceLoginVerify(bot: Bot, url: String): String?
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -52,44 +52,34 @@ class DefaultLoginSolver : LoginSolver() {
|
||||
}
|
||||
}
|
||||
bot.logger.info("请输入 4 位字母验证码. 若要更换验证码, 请直接回车")
|
||||
return readLine()?.takeUnless { it.isEmpty() || it.length != 4 }
|
||||
return readLine()?.takeUnless { it.isEmpty() || it.length != 4 }.also {
|
||||
bot.logger.info("正在提交[" + it +"]中...")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun onSolveSliderCaptcha(bot: Bot, url: String): String? {
|
||||
bot.logger.info("需要滑动验证码")
|
||||
bot.logger.info("请在任意浏览器中打开以下链接并完成验证码. ")
|
||||
bot.logger.info("完成后请输入任意字符 ")
|
||||
bot.logger.info(url)
|
||||
return readLine()
|
||||
}
|
||||
|
||||
override suspend fun onGetPhoneNumber(): String {
|
||||
loginSolverLock.withLock {
|
||||
while (true) {
|
||||
MiraiLogger.info("请输入你的手机号码")
|
||||
val var0 = readLine()
|
||||
if (var0 !== null && var0.length > 10) {
|
||||
return var0;
|
||||
}
|
||||
}
|
||||
return readLine().also {
|
||||
bot.logger.info("正在提交中...")
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
override suspend fun onGetSMSVerifyCode(): String {
|
||||
loginSolverLock.withLock {
|
||||
while (true){
|
||||
MiraiLogger.info("请输入你刚刚收到的手机验证码[6位数字]")
|
||||
val var0 = readLine()
|
||||
if(var0!==null && var0.length == 6){
|
||||
return var0;
|
||||
}
|
||||
}
|
||||
override suspend fun onSolveUnsafeDeviceLoginVerify(bot: Bot, url: String): String? {
|
||||
bot.logger.info("需要进行账户安全认证")
|
||||
bot.logger.info("该账户有[设备锁]/[不常用登陆地点]/[不常用设备登陆]的问题")
|
||||
bot.logger.info("完成以下账号认证即可成功登陆|理论本认证在mirai每个账户中最多出现1次")
|
||||
bot.logger.info("请将该链接在QQ浏览器中打开并完成认证, 成功后输入任意字符")
|
||||
bot.logger.info("这步操作将在后续的版本中优化")
|
||||
bot.logger.info(url)
|
||||
return readLine().also {
|
||||
bot.logger.info("正在提交中...")
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Copied from Ktor CIO
|
||||
|
Loading…
Reference in New Issue
Block a user