From 4e3873c3d37a05c565501fae6cc9063960df3cd6 Mon Sep 17 00:00:00 2001
From: sandtechnology <20417547+sandtechnology@users.noreply.github.com>
Date: Tue, 16 Nov 2021 22:54:39 +0800
Subject: [PATCH] Fix #1674, apply right nick and remark impl to contact design
 (#1678)

* Fix #1674, apply right nick and remark impl for contact design

* Fix build, add missed member impl

* Fix wrong delegate in AbstractMember impl

Co-authored-by: sandtechnology <a1294790523@hotmail.com>

Co-authored-by: Him188 <him188@mamoe.net>
---
 mirai-core/src/commonMain/kotlin/contact/AbstractMember.kt | 4 ++++
 mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt   | 4 ++--
 mirai-core/src/commonMain/kotlin/contact/FriendImpl.kt     | 2 ++
 mirai-core/src/commonMain/kotlin/contact/StrangerImpl.kt   | 2 ++
 4 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/mirai-core/src/commonMain/kotlin/contact/AbstractMember.kt b/mirai-core/src/commonMain/kotlin/contact/AbstractMember.kt
index 73f55e4ce..7a710765f 100644
--- a/mirai-core/src/commonMain/kotlin/contact/AbstractMember.kt
+++ b/mirai-core/src/commonMain/kotlin/contact/AbstractMember.kt
@@ -21,8 +21,12 @@ internal sealed class AbstractMember(
     parentCoroutineContext: CoroutineContext,
     memberInfo: MemberInfo,
 ) : AbstractUser(group.bot, parentCoroutineContext, memberInfo), Member {
+
     final override val info: MemberInfoImpl = memberInfo.cast()
 
+    override var nick: String by info::nick
+    override var remark: String by info::remark
+
     override val nameCard: String get() = info.nameCard
     override val specialTitle: String get() = info.specialTitle
     override var permission: MemberPermission by info::permission
diff --git a/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt b/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt
index 76ad013d8..a0017452e 100644
--- a/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt
+++ b/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt
@@ -62,8 +62,8 @@ internal sealed class AbstractUser(
 ) : User, AbstractContact(bot, parentCoroutineContext) {
 
     final override val id: Long = userInfo.uin
-    final override var nick: String = userInfo.nick
-    final override val remark: String = userInfo.remark
+    abstract override val nick: String
+    abstract override val remark: String
 
     val messageSeq = AtomicIntSeq.forMessageSeq()
     val fragmentedMessageMerger = C2CPkgMsgParsingCache()
diff --git a/mirai-core/src/commonMain/kotlin/contact/FriendImpl.kt b/mirai-core/src/commonMain/kotlin/contact/FriendImpl.kt
index b5c757daf..89dce8ba8 100644
--- a/mirai-core/src/commonMain/kotlin/contact/FriendImpl.kt
+++ b/mirai-core/src/commonMain/kotlin/contact/FriendImpl.kt
@@ -63,6 +63,8 @@ internal class FriendImpl(
     parentCoroutineContext: CoroutineContext,
     override val info: FriendInfoImpl,
 ) : Friend, AbstractUser(bot, parentCoroutineContext, info) {
+    override var nick: String by info::nick
+    override var remark: String by info::remark
     override suspend fun delete() {
         check(bot.friends[id] != null) {
             "Friend $id had already been deleted"
diff --git a/mirai-core/src/commonMain/kotlin/contact/StrangerImpl.kt b/mirai-core/src/commonMain/kotlin/contact/StrangerImpl.kt
index eff70f575..7459eb91a 100644
--- a/mirai-core/src/commonMain/kotlin/contact/StrangerImpl.kt
+++ b/mirai-core/src/commonMain/kotlin/contact/StrangerImpl.kt
@@ -48,6 +48,8 @@ internal class StrangerImpl(
     parentCoroutineContext: CoroutineContext,
     override val info: StrangerInfo,
 ) : Stranger, AbstractUser(bot, parentCoroutineContext, info) {
+    override val nick: String by info::nick
+    override val remark: String by info::remark
     override suspend fun delete() {
         check(bot.strangers[this.id] != null) {
             "Stranger ${this.id} had already been deleted"