From 10814f2b3caa7101f4dd710a6cd56c40c75fee87 Mon Sep 17 00:00:00 2001 From: StageGuard <1355416608@qq.com> Date: Thu, 16 Feb 2023 09:14:05 +0800 Subject: [PATCH] [core] enable qrcode login for macos --- .../network/components/QRCodeLoginProcessor.kt | 2 +- .../network/protocol/packet/login/WtLogin.kt | 17 ++++++++++------- .../kotlin/utils/MiraiProtocolInternal.kt | 1 + 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/mirai-core/src/commonMain/kotlin/network/components/QRCodeLoginProcessor.kt b/mirai-core/src/commonMain/kotlin/network/components/QRCodeLoginProcessor.kt index 36f913b58..fe1d5ed70 100644 --- a/mirai-core/src/commonMain/kotlin/network/components/QRCodeLoginProcessor.kt +++ b/mirai-core/src/commonMain/kotlin/network/components/QRCodeLoginProcessor.kt @@ -38,7 +38,7 @@ internal interface QRCodeLoginProcessor { fun parse(ssoContext: SsoProcessorContext, logger: MiraiLogger): QRCodeLoginProcessor { if (!ssoContext.bot.configuration.doQRCodeLogin) return NOOP check(ssoContext.bot.configuration.protocol.asInternal.canDoQRCodeLogin) { - "The login protocol must be ANDROID_WATCH while enabling qrcode login." + + "The login protocol must be ANDROID_WATCH or MACOS while enabling qrcode login." + "Set it by `bot.configuration.protocol = BotConfiguration.MiraiProtocol.ANDROID_WATCH`." } return QRCodeLoginProcessorPreLoaded(ssoContext, logger) diff --git a/mirai-core/src/commonMain/kotlin/network/protocol/packet/login/WtLogin.kt b/mirai-core/src/commonMain/kotlin/network/protocol/packet/login/WtLogin.kt index 6b68bdde9..24764a809 100644 --- a/mirai-core/src/commonMain/kotlin/network/protocol/packet/login/WtLogin.kt +++ b/mirai-core/src/commonMain/kotlin/network/protocol/packet/login/WtLogin.kt @@ -685,9 +685,9 @@ internal class WtLogin { t1b() t1d(client.miscBitMap) - // TODO macos - if (client.bot.configuration.protocol == BotConfiguration.MiraiProtocol.MACOS) { - t1f( + val protocol = client.bot.configuration.protocol + when(protocol) { + BotConfiguration.MiraiProtocol.MACOS -> t1f( false, "Mac OSX".toByteArray(), "10".toByteArray(), @@ -695,8 +695,7 @@ internal class WtLogin { client.device.apn, 2 ) - } else { - t1f( + BotConfiguration.MiraiProtocol.ANDROID_WATCH -> t1f( false, client.device.osType, "7.1.2".toByteArray(), @@ -704,11 +703,15 @@ internal class WtLogin { client.device.apn, 2 ) + else -> error("protocol $protocol doesn't support qrcode login.") } t33(client.device.guid) - // TODO macos - t35(if (client.bot.configuration.protocol == BotConfiguration.MiraiProtocol.MACOS) 5 else 8) + t35(when(protocol) { + BotConfiguration.MiraiProtocol.MACOS -> 5 + BotConfiguration.MiraiProtocol.ANDROID_WATCH -> 8 + else -> error("protocol $protocol doesn't support qrcode login.") + }) } writeByte(0) writeShort(code2dPacket.remaining.toShort()) diff --git a/mirai-core/src/commonMain/kotlin/utils/MiraiProtocolInternal.kt b/mirai-core/src/commonMain/kotlin/utils/MiraiProtocolInternal.kt index 1896b8e58..7eea2abef 100644 --- a/mirai-core/src/commonMain/kotlin/utils/MiraiProtocolInternal.kt +++ b/mirai-core/src/commonMain/kotlin/utils/MiraiProtocolInternal.kt @@ -96,6 +96,7 @@ internal class MiraiProtocolInternal( "com.tencent.qq".encodeToByteArray().toUHexString(" "), 0L, 7, + canDoQRCodeLogin = true, ) }