diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt index 3261742be..ecfb38cf0 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt @@ -137,11 +137,11 @@ internal class MessageSvc { object EmptyResponse : GetMsgSuccess(emptyList()) - private suspend fun MsgComm.Msg.getNewGroup(bot: QQAndroidBot): Group { + private suspend fun MsgComm.Msg.getNewGroup(bot: QQAndroidBot): Group? { val troopNum = bot.network.run { FriendList.GetTroopListSimplify(bot.client) .sendAndExpect(retry = 2) - }.groups.first { it.groupUin == msgHead.fromUin } + }.groups.firstOrNull { it.groupUin == msgHead.fromUin } ?: return null @Suppress("DuplicatedCode") return GroupImpl( @@ -217,7 +217,7 @@ internal class MessageSvc { } // 新群 - val newGroup = msg.getNewGroup(bot) + val newGroup = msg.getNewGroup(bot) ?: return@mapNotNull null bot.groups.delegate.addLast(newGroup) return@mapNotNull BotJoinGroupEvent(newGroup) } else { diff --git a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/OnlinePush.kt b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/OnlinePush.kt index d6dee3471..366576a65 100644 --- a/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/OnlinePush.kt +++ b/mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/OnlinePush.kt @@ -416,17 +416,19 @@ internal class OnlinePush { bot.network.logger.debug { "OnlinePush528 0x44L: " + msg._miraiContentToString() } return@lambda528 emptySequence() }, - // bot 被踢 + // bot 在其他客户端被踢或主动退出而同步情况 0xD4L to lambda528 { bot -> @Serializable data class SubD4( + // ok val uin: Long ) : ProtoBuf val uin = vProtobuf.loadAs(SubD4.serializer()).uin val group = bot.getGroupByUinOrNull(uin) ?: bot.getGroupOrNull(uin) - // 08 E7 C1 AD B8 02 - return@lambda528 group?.let { sequenceOf(BotKickEvent(group)) } ?: emptySequence() + return@lambda528 if (group != null && bot.groups.delegate.remove(group)) { + sequenceOf(BotLeaveEvent(group)) + } else emptySequence() }, // ModFriendRemark, DelFriend 0x27L to lambda528 { bot ->