diff --git a/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt b/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt index 63f773f9c..9a0f56f73 100644 --- a/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt +++ b/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt @@ -79,24 +79,25 @@ internal class GroupImpl( override val settings: GroupSettingsImpl = GroupSettingsImpl(this, groupInfo) override var name: String by settings::name - override lateinit var owner: NormalMember - override lateinit var botAsMember: NormalMember + override lateinit var owner: NormalMemberImpl + override lateinit var botAsMember: NormalMemberImpl override val filesRoot: RemoteFile by lazy { RemoteFileImpl(this, "/") } - override val members: ContactList = ContactList(members.mapNotNullTo(ConcurrentLinkedQueue()) { - if (it.uin == bot.id) { - botAsMember = newMember(it).cast() - if (it.permission == MemberPermission.OWNER) { - owner = botAsMember + override val members: ContactList = + ContactList(members.mapNotNullTo(ConcurrentLinkedQueue()) { info -> + if (info.uin == bot.id) { + botAsMember = newNormalMember(info) + if (info.permission == MemberPermission.OWNER) { + owner = botAsMember + } + null + } else newNormalMember(info).also { member -> + if (member.permission == MemberPermission.OWNER) { + owner = member + } } - null - } else newMember(it).cast().also { member -> - if (member.permission == MemberPermission.OWNER) { - owner = member - } - } - }) + }) override val announcements: Announcements by lazy { AnnouncementsImpl( @@ -128,7 +129,7 @@ internal class GroupImpl( return true } - override operator fun get(id: Long): NormalMember? { + override operator fun get(id: Long): NormalMemberImpl? { if (id == bot.id) { return botAsMember } @@ -288,6 +289,7 @@ internal class GroupImpl( override fun toString(): String = "Group($id)" } +@Deprecated("use addNewNormalMember or newAnonymousMember") internal fun Group.newMember(memberInfo: MemberInfo): Member { this.checkIsGroupImpl() memberInfo.anonymousId?.let { anId -> @@ -303,6 +305,32 @@ internal fun Group.newMember(memberInfo: MemberInfo): Member { ) } +internal fun Group.addNewNormalMember(memberInfo: MemberInfo): NormalMemberImpl { + return newNormalMember(memberInfo).also { + members.delegate.add(it) + } +} + +internal fun Group.newNormalMember(memberInfo: MemberInfo): NormalMemberImpl { + this.checkIsGroupImpl() + return NormalMemberImpl( + this, + this.coroutineContext, + memberInfo + ) +} + +internal fun Group.newAnonymousMember(memberInfo: MemberInfo): AnonymousMemberImpl? { + this.checkIsGroupImpl() + memberInfo.anonymousId?.let { anId -> + return AnonymousMemberImpl( + this, this.coroutineContext, + memberInfo, anId + ) + } + return null +} + internal fun GroupImpl.newAnonymous(name: String, id: String): AnonymousMemberImpl = newMember( MemberInfoImpl( uin = 80000000L,