Преглед изворни кода

Merge remote-tracking branch 'origin/master'

Him188 пре 5 година
родитељ
комит
22b26933d8

+ 1 - 1
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/PacketFactory.kt

@@ -135,6 +135,7 @@ internal object KnownPacketFactories {
         MessageSvc.PbGetMsg,
         MessageSvc.PushForceOffline,
         MessageSvc.PbSendMsg,
+        MessageSvc.Del,
         FriendList.GetFriendGroupList,
         FriendList.GetTroopListSimplify,
         FriendList.GetTroopMemberList,
@@ -152,7 +153,6 @@ internal object KnownPacketFactories {
         MultiMsg.ApplyUp,
         NewContact.SystemMsgNewFriend,
         NewContact.SystemMsgNewGroup,
-        NewContact.Del,
         ProfileService.GroupMngReq
     )
 

+ 0 - 24
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/NewContact.kt

@@ -186,28 +186,4 @@ internal class NewContact {
             override suspend fun ByteReadPacket.decode(bot: QQAndroidBot) = null
         }
     }
-
-    internal object Del : OutgoingPacketFactory<Nothing?>("MessageSvc.PbDeleteMsg") {
-
-        internal operator fun invoke(client: QQAndroidClient, header: MsgComm.MsgHead) = buildOutgoingUniPacket(client) {
-
-            writeProtoBuf(
-                MsgSvc.PbDeleteMsgReq.serializer(),
-                MsgSvc.PbDeleteMsgReq(
-                    msgItems = listOf(
-                        MsgSvc.PbDeleteMsgReq.MsgItem(
-                            fromUin = header.fromUin,
-                            toUin = header.toUin,
-                            // 群为84、好友为187。但是群通过其他方法删除,测试通过187也能删除群消息。
-                            msgType = 187,
-                            msgSeq = header.msgSeq,
-                            msgUid = header.msgUid
-                        )
-                    )
-                )
-            )
-        }
-
-        override suspend fun ByteReadPacket.decode(bot: QQAndroidBot) = null
-    }
 }

+ 46 - 17
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt

@@ -50,6 +50,7 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.*
 import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.GroupInfoImpl
 import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.NewContact
 import net.mamoe.mirai.qqandroid.network.protocol.packet.list.FriendList
+import net.mamoe.mirai.qqandroid.utils._miraiContentToString
 import net.mamoe.mirai.qqandroid.utils.io.serialization.readProtoBuf
 import net.mamoe.mirai.qqandroid.utils.io.serialization.readUniPacket
 import net.mamoe.mirai.qqandroid.utils.io.serialization.toByteArray
@@ -206,8 +207,15 @@ internal class MessageSvc {
                 .filterNot { it.msg == null }
                 .flatMapConcat { it.msg!!.asFlow() }
                 .mapNotNull<MsgComm.Msg, Packet> { msg ->
+
+                    // 删除消息
+                    bot.network.run {
+                        Del(bot.client, msg.msgHead).sendWithoutExpect()
+                    }
+
                     when (msg.msgHead.msgType) {
                         33 -> { // 邀请入群
+
                             val group = bot.getGroupByUinOrNull(msg.msgHead.fromUin)
                             if (msg.msgHead.authUin == bot.id) {
                                 if (group != null) {
@@ -224,11 +232,25 @@ internal class MessageSvc {
                                 if (group.members.contains(msg.msgHead.authUin)) {
                                     return@mapNotNull null
                                 }
+
                                 return@mapNotNull MemberJoinEvent.Invite(group.newMember(msg.getNewMemberInfo())
                                     .also { group.members.delegate.addLast(it) })
                             }
                         }
+                        34 -> { // 主动入群
+
+                            // 27 0B 60 E7 01 44 71 47 90 03 3E 03 3F A2 06 B4 B4 BD A8 D5 DF 00 30 36 42 35 35 46 45 32 45 35 36 43 45 45 44 30 38 30 35 31 41 35 42 37 36 39 35 34 45 30 46 43 43 36 36 45 44 43 46 45 43 42 39 33 41 41 44 32 32
+                            val group = bot.getGroupByUinOrNull(msg.msgHead.fromUin)
+                            group ?: return@mapNotNull null
+
+                            if (group.members.contains(msg.msgHead.authUin)) {
+                                return@mapNotNull null
+                            }
+                            return@mapNotNull MemberJoinEvent.Active(group.newMember(msg.getNewMemberInfo())
+                                .also { group.members.delegate.addLast(it) })
+                        }
                         166 -> {
+
                             if (msg.msgHead.fromUin == bot.id) {
                                 loop@ while (true) {
                                     val instance = bot.client.getFriendSeq()
@@ -288,32 +310,15 @@ internal class MessageSvc {
                         84 -> { // 请求入群验证
                             bot.network.run {
                                 NewContact.SystemMsgNewGroup(bot.client).sendWithoutExpect()
-
-                                // 处理后要向服务器提交已阅,否则登陆时会重复收到事件
-                                NewContact.Del(bot.client, msg.msgHead).sendWithoutExpect()
                             }
                             return@mapNotNull null
                         }
                         187 -> { // 请求加好友验证
                             bot.network.run {
                                 NewContact.SystemMsgNewFriend(bot.client).sendWithoutExpect()
-
-                                // 处理后要向服务器提交已阅,否则登陆时会重复收到事件
-                                NewContact.Del(bot.client, msg.msgHead).sendWithoutExpect()
                             }
                             return@mapNotNull null
                         }
-                        34 -> { // 主动入群
-                            // 27 0B 60 E7 01 44 71 47 90 03 3E 03 3F A2 06 B4 B4 BD A8 D5 DF 00 30 36 42 35 35 46 45 32 45 35 36 43 45 45 44 30 38 30 35 31 41 35 42 37 36 39 35 34 45 30 46 43 43 36 36 45 44 43 46 45 43 42 39 33 41 41 44 32 32
-                            val group = bot.getGroupByUinOrNull(msg.msgHead.fromUin)
-                            group ?: return@mapNotNull null
-
-                            if (group.members.contains(msg.msgHead.authUin)) {
-                                return@mapNotNull null
-                            }
-                            return@mapNotNull MemberJoinEvent.Active(group.newMember(msg.getNewMemberInfo())
-                                .also { group.members.delegate.addLast(it) })
-                        }
                         // 732:  27 0B 60 E7 0C 01 3E 03 3F A2 5E 90 60 E2 00 01 44 71 47 90 00 00 02 58
                         else -> {
                             bot.network.logger.debug { "unknown PbGetMsg type ${msg.msgHead.msgType}" }
@@ -538,5 +543,29 @@ internal class MessageSvc {
             }
         }
     }
+
+    internal object Del : OutgoingPacketFactory<Nothing?>("MessageSvc.PbDeleteMsg") {
+
+        internal operator fun invoke(client: QQAndroidClient, header: MsgComm.MsgHead) = buildOutgoingUniPacket(client) {
+
+            writeProtoBuf(
+                MsgSvc.PbDeleteMsgReq.serializer(),
+                MsgSvc.PbDeleteMsgReq(
+                    msgItems = listOf(
+                        MsgSvc.PbDeleteMsgReq.MsgItem(
+                            fromUin = header.fromUin,
+                            toUin = header.toUin,
+                            // 群为84、好友为187。但是群通过其他方法删除,测试通过187也能删除群消息。
+                            msgType = 187,
+                            msgSeq = header.msgSeq,
+                            msgUid = header.msgUid
+                        )
+                    )
+                )
+            )
+        }
+
+        override suspend fun ByteReadPacket.decode(bot: QQAndroidBot) = null
+    }
 }
 

+ 6 - 6
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/LoginSolver.jvm.kt

@@ -37,26 +37,26 @@ class DefaultLoginSolver(
     val input: suspend () -> String,
     val overrideLogger: MiraiLogger? = null
 ) : LoginSolver() {
-    private val degelate: LoginSolver
+    private val delegate: LoginSolver
 
     init {
         if (Desktop.isDesktopSupported()) {
-            degelate = SwingSolver
+            delegate = SwingSolver
         } else {
-            degelate = DefaultLoginSolverImpl(input, overrideLogger)
+            delegate = DefaultLoginSolverImpl(input, overrideLogger)
         }
     }
 
     override suspend fun onSolvePicCaptcha(bot: Bot, data: ByteArray): String? {
-        return degelate.onSolvePicCaptcha(bot, data)
+        return delegate.onSolvePicCaptcha(bot, data)
     }
 
     override suspend fun onSolveSliderCaptcha(bot: Bot, url: String): String? {
-        return degelate.onSolveSliderCaptcha(bot, url)
+        return delegate.onSolveSliderCaptcha(bot, url)
     }
 
     override suspend fun onSolveUnsafeDeviceLoginVerify(bot: Bot, url: String): String? {
-        return degelate.onSolveUnsafeDeviceLoginVerify(bot, url)
+        return delegate.onSolveUnsafeDeviceLoginVerify(bot, url)
     }
 }
 

+ 3 - 1
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/LoginSolver.swing.jvm.kt

@@ -44,7 +44,9 @@ object SwingSolver : LoginSolver() {
                 需要进行账户安全认证<br>
                 该账户有[设备锁]/[不常用登录地点]/[不常用设备登录]的问题<br>
                 完成以下账号认证即可成功登录|理论本认证在mirai每个账户中最多出现1次<br>
-                完成后请关闭该窗口
+                请将该链接在QQ浏览器中打开并完成认证<br>
+                成功后请关闭该窗口<br>
+                这步操作将在后续的版本中优化
                 """.trimIndent()
             ).last()
             JTextField(url).append()

+ 0 - 0
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/JWTHelper.kt → mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/WindowHelperJvm.kt