Commit 92b7b10f authored by jiahua.liu's avatar jiahua.liu

network handler update

parent dd7fb68b
...@@ -43,12 +43,8 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler ...@@ -43,12 +43,8 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
mainloop@ while (true) { mainloop@ while (true) {
when (response) { when (response) {
is UnsafeLogin -> { is UnsafeLogin -> {
bot.logger.info("Login unsuccessful, device auth is needed") bot.configuration.loginSolver.onSolveUnsafeDeviceLoginVerify(bot, response.url)
bot.logger.info("登录失败, 原因为非常用设备登录") response = LoginPacket.SubCommand9(bot.client).sendAndExpect()
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 -> when (response) {
...@@ -73,7 +69,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler ...@@ -73,7 +69,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
is Error -> error(response.toString()) is Error -> error(response.toString())
is SMSVerifyCodeNeeded -> { is DeviceLockLogin -> {
response = LoginPacket.SubCommand20( response = LoginPacket.SubCommand20(
bot.client, bot.client,
response.t402, response.t402,
......
...@@ -300,7 +300,7 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse>("wt ...@@ -300,7 +300,7 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse>("wt
class UnsafeLogin(val url: String) : LoginPacketResponse() 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 @InternalAPI
...@@ -336,10 +336,10 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse>("wt ...@@ -336,10 +336,10 @@ internal object LoginPacket : PacketFactory<LoginPacket.LoginPacketResponse>("wt
private fun onSMSVerifyNeeded( private fun onSMSVerifyNeeded(
tlvMap: TlvMap, tlvMap: TlvMap,
bot: QQAndroidBot bot: QQAndroidBot
): LoginPacketResponse.SMSVerifyCodeNeeded { ): LoginPacketResponse.DeviceLockLogin {
bot.client.t104 = tlvMap.getOrFail(0x104) bot.client.t104 = tlvMap.getOrFail(0x104)
println("403: " + tlvMap[0x403]?.toUHexString()) 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 { private fun onUnsafeDeviceLogin(tlvMap: TlvMap): LoginPacketResponse.UnsafeLogin {
......
...@@ -13,9 +13,7 @@ abstract class LoginSolver { ...@@ -13,9 +13,7 @@ abstract class LoginSolver {
abstract suspend fun onSolveSliderCaptcha(bot: Bot, url: String): String? abstract suspend fun onSolveSliderCaptcha(bot: Bot, url: String): String?
abstract suspend fun onGetPhoneNumber(): String abstract suspend fun onSolveUnsafeDeviceLoginVerify(bot: Bot, url: String): String?
abstract suspend fun onGetSMSVerifyCode(): String
} }
/** /**
......
...@@ -52,44 +52,34 @@ class DefaultLoginSolver : LoginSolver() { ...@@ -52,44 +52,34 @@ class DefaultLoginSolver : LoginSolver() {
} }
} }
bot.logger.info("请输入 4 位字母验证码. 若要更换验证码, 请直接回车") 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? { override suspend fun onSolveSliderCaptcha(bot: Bot, url: String): String? {
bot.logger.info("需要滑动验证码") bot.logger.info("需要滑动验证码")
bot.logger.info("请在任意浏览器中打开以下链接并完成验证码. ") bot.logger.info("请在任意浏览器中打开以下链接并完成验证码. ")
bot.logger.info("完成后请输入任意字符 ")
bot.logger.info(url) bot.logger.info(url)
return readLine() return readLine().also {
} bot.logger.info("正在提交中...")
override suspend fun onGetPhoneNumber(): String {
loginSolverLock.withLock {
while (true) {
MiraiLogger.info("请输入你的手机号码")
val var0 = readLine()
if (var0 !== null && var0.length > 10) {
return var0;
}
}
} }
return "";
} }
override suspend fun onGetSMSVerifyCode(): String { override suspend fun onSolveUnsafeDeviceLoginVerify(bot: Bot, url: String): String? {
loginSolverLock.withLock { bot.logger.info("需要进行账户安全认证")
while (true){ bot.logger.info("该账户有[设备锁]/[不常用登陆地点]/[不常用设备登陆]的问题")
MiraiLogger.info("请输入你刚刚收到的手机验证码[6位数字]") bot.logger.info("完成以下账号认证即可成功登陆|理论本认证在mirai每个账户中最多出现1次")
val var0 = readLine() bot.logger.info("请将该链接在QQ浏览器中打开并完成认证, 成功后输入任意字符")
if(var0!==null && var0.length == 6){ bot.logger.info("这步操作将在后续的版本中优化")
return var0; bot.logger.info(url)
} return readLine().also {
} bot.logger.info("正在提交中...")
} }
return "";
} }
} }
// Copied from Ktor CIO // Copied from Ktor CIO
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment