Kaynağa Gözat

Use `NormalMemberImpl` for properties of `GroupImpl`

Him188 4 yıl önce
ebeveyn
işleme
975dd8e50b

+ 43 - 15
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<NormalMember> = ContactList(members.mapNotNullTo(ConcurrentLinkedQueue()) {
-        if (it.uin == bot.id) {
-            botAsMember = newMember(it).cast()
-            if (it.permission == MemberPermission.OWNER) {
-                owner = botAsMember
-            }
-            null
-        } else newMember(it).cast<NormalMember>().also { member ->
-            if (member.permission == MemberPermission.OWNER) {
-                owner = member
+    override val members: ContactList<NormalMemberImpl> =
+        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
+                }
             }
-        }
-    })
+        })
 
     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,