diff --git a/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt b/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt index 6636efafe..4b2e62589 100644 --- a/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt +++ b/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt @@ -12,6 +12,7 @@ package net.mamoe.mirai.internal.contact +import kotlinx.atomicfu.atomic import net.mamoe.mirai.LowLevelApi import net.mamoe.mirai.Mirai import net.mamoe.mirai.contact.* @@ -114,6 +115,7 @@ internal class GroupImpl constructor( override val filesRoot: RemoteFile by lazy { RemoteFileImpl(this, "/") } override val files: RemoteFiles by lazy { RemoteFilesImpl(this) } + val lastTalkative = atomic(null) override val announcements: Announcements by lazy { AnnouncementsImpl( diff --git a/mirai-core/src/commonMain/kotlin/network/notice/group/GroupNotificationProcessor.kt b/mirai-core/src/commonMain/kotlin/network/notice/group/GroupNotificationProcessor.kt index 5f9d60783..486981406 100644 --- a/mirai-core/src/commonMain/kotlin/network/notice/group/GroupNotificationProcessor.kt +++ b/mirai-core/src/commonMain/kotlin/network/notice/group/GroupNotificationProcessor.kt @@ -347,8 +347,12 @@ internal class GroupNotificationProcessor( } // 龙王 10093L, 1053L, 1054L -> { - val now: NormalMember = grayTip.msgTemplParam["uin"]?.findMember() ?: group.botAsMember - val previous: NormalMember? = grayTip.msgTemplParam["uin_last"]?.findMember() + val now = grayTip.msgTemplParam["uin"]?.findMember() ?: group.botAsMember + val previous = grayTip.msgTemplParam["uin_last"]?.findMember() + + val lastTalkative = group.lastTalkative.value + if (lastTalkative == now) return // duplicate + if (!group.lastTalkative.compareAndSet(lastTalkative, now)) return if (previous == null) { collect(MemberHonorChangeEvent.Achieve(now, GroupHonorType.TALKATIVE))