1
0
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:
jiahua.liu 2020-01-30 13:23:58 +08:00
parent dd7fb68b1c
commit 92b7b10f0e
4 changed files with 22 additions and 38 deletions
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

View File

@ -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,

View File

@ -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 {

View File

@ -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?
}
/**

View File

@ -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