Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

支持使用短信验证码解决登录验证 #2216

Merged
merged 2 commits into from
Sep 11, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 27 additions & 2 deletions mirai-core-api/compatibility-validation/android/api/android.api
Original file line number Diff line number Diff line change
Expand Up @@ -5693,14 +5693,17 @@ public final class net/mamoe/mirai/network/NoStandardInputForCaptchaException :
}

public final class net/mamoe/mirai/network/RetryLaterException : net/mamoe/mirai/network/LoginFailedException {
public synthetic fun <init> (Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun getCause ()Ljava/lang/Throwable;
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Throwable;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
}

public final class net/mamoe/mirai/network/UnsupportedSliderCaptchaException : net/mamoe/mirai/network/LoginFailedException {
public fun <init> (Ljava/lang/String;)V
}

public final class net/mamoe/mirai/network/UnsupportedSmsLoginException : net/mamoe/mirai/network/LoginFailedException {
public fun <init> (Ljava/lang/String;)V
}

public final class net/mamoe/mirai/network/WrongPasswordException : net/mamoe/mirai/network/LoginFailedException {
}

Expand Down Expand Up @@ -5936,6 +5939,27 @@ public final class net/mamoe/mirai/utils/DeviceInfoKt {
public static final fun generateDeviceInfoData (Lnet/mamoe/mirai/utils/DeviceInfo;)[B
}

public abstract interface class net/mamoe/mirai/utils/DeviceVerificationRequests {
public abstract fun getFallback ()Lnet/mamoe/mirai/utils/DeviceVerificationRequests$FallbackRequest;
public abstract fun getPreferSms ()Z
public abstract fun getSms ()Lnet/mamoe/mirai/utils/DeviceVerificationRequests$SmsRequest;
}

public abstract interface class net/mamoe/mirai/utils/DeviceVerificationRequests$FallbackRequest {
public abstract fun getUrl ()Ljava/lang/String;
public abstract fun solved ()Lnet/mamoe/mirai/utils/DeviceVerificationResult;
}

public abstract interface class net/mamoe/mirai/utils/DeviceVerificationRequests$SmsRequest {
public abstract fun getCountryCode ()Ljava/lang/String;
public abstract fun getPhoneNumber ()Ljava/lang/String;
public abstract fun requestSms (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun solved (Ljava/lang/String;)Lnet/mamoe/mirai/utils/DeviceVerificationResult;
}

public abstract interface class net/mamoe/mirai/utils/DeviceVerificationResult {
}

public final class net/mamoe/mirai/utils/DirectoryLogger : net/mamoe/mirai/utils/SimpleLogger {
public fun <init> (Ljava/lang/String;)V
public fun <init> (Ljava/lang/String;Ljava/io/File;)V
Expand Down Expand Up @@ -6124,6 +6148,7 @@ public abstract class net/mamoe/mirai/utils/LoginSolver {
public static final field Default Lnet/mamoe/mirai/utils/LoginSolver;
public fun <init> ()V
public fun isSliderCaptchaSupported ()Z
public fun onSolveDeviceVerification (Lnet/mamoe/mirai/Bot;Lnet/mamoe/mirai/utils/DeviceVerificationRequests;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onSolvePicCaptcha (Lnet/mamoe/mirai/Bot;[BLkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onSolveSliderCaptcha (Lnet/mamoe/mirai/Bot;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onSolveUnsafeDeviceLoginVerify (Lnet/mamoe/mirai/Bot;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
Expand Down
30 changes: 28 additions & 2 deletions mirai-core-api/compatibility-validation/jvm/api/jvm.api
Original file line number Diff line number Diff line change
Expand Up @@ -5693,14 +5693,17 @@ public final class net/mamoe/mirai/network/NoStandardInputForCaptchaException :
}

public final class net/mamoe/mirai/network/RetryLaterException : net/mamoe/mirai/network/LoginFailedException {
public synthetic fun <init> (Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun getCause ()Ljava/lang/Throwable;
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Throwable;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
}

public final class net/mamoe/mirai/network/UnsupportedSliderCaptchaException : net/mamoe/mirai/network/LoginFailedException {
public fun <init> (Ljava/lang/String;)V
}

public final class net/mamoe/mirai/network/UnsupportedSmsLoginException : net/mamoe/mirai/network/LoginFailedException {
public fun <init> (Ljava/lang/String;)V
}

public final class net/mamoe/mirai/network/WrongPasswordException : net/mamoe/mirai/network/LoginFailedException {
}

Expand Down Expand Up @@ -5936,6 +5939,27 @@ public final class net/mamoe/mirai/utils/DeviceInfoKt {
public static final fun generateDeviceInfoData (Lnet/mamoe/mirai/utils/DeviceInfo;)[B
}

public abstract interface class net/mamoe/mirai/utils/DeviceVerificationRequests {
public abstract fun getFallback ()Lnet/mamoe/mirai/utils/DeviceVerificationRequests$FallbackRequest;
public abstract fun getPreferSms ()Z
public abstract fun getSms ()Lnet/mamoe/mirai/utils/DeviceVerificationRequests$SmsRequest;
}

public abstract interface class net/mamoe/mirai/utils/DeviceVerificationRequests$FallbackRequest {
public abstract fun getUrl ()Ljava/lang/String;
public abstract fun solved ()Lnet/mamoe/mirai/utils/DeviceVerificationResult;
}

public abstract interface class net/mamoe/mirai/utils/DeviceVerificationRequests$SmsRequest {
public abstract fun getCountryCode ()Ljava/lang/String;
public abstract fun getPhoneNumber ()Ljava/lang/String;
public abstract fun requestSms (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun solved (Ljava/lang/String;)Lnet/mamoe/mirai/utils/DeviceVerificationResult;
}

public abstract interface class net/mamoe/mirai/utils/DeviceVerificationResult {
}

public final class net/mamoe/mirai/utils/DirectoryLogger : net/mamoe/mirai/utils/SimpleLogger {
public fun <init> (Ljava/lang/String;)V
public fun <init> (Ljava/lang/String;Ljava/io/File;)V
Expand Down Expand Up @@ -6124,6 +6148,7 @@ public abstract class net/mamoe/mirai/utils/LoginSolver {
public static final field Default Lnet/mamoe/mirai/utils/LoginSolver;
public fun <init> ()V
public fun isSliderCaptchaSupported ()Z
public fun onSolveDeviceVerification (Lnet/mamoe/mirai/Bot;Lnet/mamoe/mirai/utils/DeviceVerificationRequests;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onSolvePicCaptcha (Lnet/mamoe/mirai/Bot;[BLkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onSolveSliderCaptcha (Lnet/mamoe/mirai/Bot;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onSolveUnsafeDeviceLoginVerify (Lnet/mamoe/mirai/Bot;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
Expand Down Expand Up @@ -6488,6 +6513,7 @@ public final class net/mamoe/mirai/utils/StandardCharImageLoginSolver : net/mamo
public static final fun createBlocking (Lkotlin/jvm/functions/Function0;)Lnet/mamoe/mirai/utils/StandardCharImageLoginSolver;
public static final fun createBlocking (Lkotlin/jvm/functions/Function0;Lnet/mamoe/mirai/utils/MiraiLogger;)Lnet/mamoe/mirai/utils/StandardCharImageLoginSolver;
public fun isSliderCaptchaSupported ()Z
public fun onSolveDeviceVerification (Lnet/mamoe/mirai/Bot;Lnet/mamoe/mirai/utils/DeviceVerificationRequests;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun onSolvePicCaptcha (Lnet/mamoe/mirai/Bot;[BLkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun onSolveSliderCaptcha (Lnet/mamoe/mirai/Bot;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public fun onSolveUnsafeDeviceLoginVerify (Lnet/mamoe/mirai/Bot;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
Expand Down
70 changes: 4 additions & 66 deletions mirai-core-api/src/androidMain/kotlin/utils/LoginSolver.android.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,69 +10,7 @@

package net.mamoe.mirai.utils

import net.mamoe.mirai.Bot
import net.mamoe.mirai.network.LoginFailedException
import net.mamoe.mirai.utils.LoginSolver.Companion.Default


/**
* 验证码, 设备锁解决器
*
* @see Default
* @see BotConfiguration.loginSolver
*/
public actual abstract class LoginSolver public actual constructor() {
/**
* 处理图片验证码.
*
* 返回 `null` 以表示无法处理验证码, 将会刷新验证码或重试登录.
* 抛出一个 [LoginFailedException] 以正常地终止登录, 抛出任意其他 [Exception] 将视为异常终止
*
* @throws LoginFailedException
*/
public actual abstract suspend fun onSolvePicCaptcha(bot: Bot, data: ByteArray): String?

/**
* 为 `true` 表示支持滑动验证码, 遇到滑动验证码时 mirai 会请求 [onSolveSliderCaptcha].
* 否则会跳过滑动验证码并告诉服务器此客户端不支持, 有可能导致登录失败
*/
public actual open val isSliderCaptchaSupported: Boolean
get() = System.getProperty("mirai.slider.captcha.supported") != null

/**
* 处理滑动验证码.
*
* 返回 `null` 以表示无法处理验证码, 将会刷新验证码或重试登录.
* 抛出一个 [LoginFailedException] 以正常地终止登录, 抛出任意其他 [Exception] 将视为异常终止
*
* @throws LoginFailedException
* @return 验证码解决成功后获得的 ticket.
*/
public actual abstract suspend fun onSolveSliderCaptcha(bot: Bot, url: String): String?

/**
* 处理不安全设备验证.
*
* 返回值保留给将来使用. 目前在处理完成后返回任意内容 (包含 `null`) 均视为处理成功.
* 抛出一个 [LoginFailedException] 以正常地终止登录, 抛出任意其他 [Exception] 将视为异常终止.
*
* @return 任意内容. 返回值保留以供未来更新.
* @throws LoginFailedException
*/
public actual abstract suspend fun onSolveUnsafeDeviceLoginVerify(bot: Bot, url: String): String?

public actual companion object {
/**
* 当前平台默认的 [LoginSolver]. Android 端没有默认验证码实现, [Default] 总为 `null`.
*/
@JvmField
public actual val Default: LoginSolver? = null

@Suppress("unused")
@Deprecated("Binary compatibility", level = DeprecationLevel.HIDDEN)
@DeprecatedSinceMirai(hiddenSince = "2.0") // maybe 2.0
public actual fun getDefault(): LoginSolver = Default
?: error("LoginSolver is not provided by default on your platform. Please specify by BotConfiguration.loginSolver")
}

}
internal actual object PlatformLoginSolverImplementations {
actual val isSliderCaptchaSupported: Boolean by lazy { System.getProperty("mirai.slider.captcha.supported") != null }
actual val default: LoginSolver? get() = null
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
package net.mamoe.mirai.network

import net.mamoe.mirai.Bot
import net.mamoe.mirai.utils.MiraiExperimentalApi
import net.mamoe.mirai.utils.LoginSolver
import net.mamoe.mirai.utils.MiraiInternalApi


Expand Down Expand Up @@ -47,8 +47,11 @@ public class NoServerAvailableException @MiraiInternalApi constructor(
/**
* 服务器要求稍后重试
*/
public class RetryLaterException @MiraiInternalApi constructor(override val cause: Throwable? = null) :
LoginFailedException(false, "server requests retrial later")
public class RetryLaterException @MiraiInternalApi constructor(
message: String?,
cause: Throwable? = null,
killBot: Boolean = false
) : LoginFailedException(killBot, message, cause)

/**
* 无标准输入或 Kotlin 不支持此输入.
Expand All @@ -58,10 +61,10 @@ public class NoStandardInputForCaptchaException @MiraiInternalApi constructor(
) : LoginFailedException(true, "no standard input for captcha")

/**
* 需要短信验证时抛出. mirai 目前还不支持短信验证.
* 需要强制短信验证, 且当前 [LoginSolver] 不支持时抛出.
* @since 2.13
*/
@MiraiExperimentalApi("Will be removed when SMS login is supported")
public class UnsupportedSMSLoginException(message: String?) : LoginFailedException(true, message)
public class UnsupportedSmsLoginException(message: String?) : LoginFailedException(true, message)

/**
* 无法完成滑块验证
Expand Down
Loading