Просмотр исходного кода

Review contact infos and make them serializable

Him188 5 лет назад
Родитель
Сommit
9211f697cf
21 измененных файлов с 143 добавлено и 59 удалено
  1. 8 0
      binary-compatibility-validator/api/binary-compatibility-validator.api
  2. 1 0
      mirai-core-api/src/commonMain/kotlin/contact/MemberPermission.kt
  3. 8 1
      mirai-core-api/src/commonMain/kotlin/data/FriendInfo.kt
  4. 3 0
      mirai-core/src/commonMain/kotlin/MiraiImpl.kt
  5. 2 1
      mirai-core/src/commonMain/kotlin/QQAndroidBot.kt
  6. 1 0
      mirai-core/src/commonMain/kotlin/contact/AbstractMember.kt
  7. 0 3
      mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt
  8. 1 10
      mirai-core/src/commonMain/kotlin/contact/FriendImpl.kt
  9. 1 0
      mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt
  10. 1 0
      mirai-core/src/commonMain/kotlin/contact/SendMessageHandler.kt
  11. 4 16
      mirai-core/src/commonMain/kotlin/contact/StrangerImpl.kt
  12. 21 0
      mirai-core/src/commonMain/kotlin/contact/info/FriendInfoImpl.kt
  13. 44 0
      mirai-core/src/commonMain/kotlin/contact/info/GroupInfoImpl.kt
  14. 5 3
      mirai-core/src/commonMain/kotlin/contact/info/MemberInfoImpl.kt
  15. 23 0
      mirai-core/src/commonMain/kotlin/contact/info/StrangerInfoImpl.kt
  16. 10 2
      mirai-core/src/commonMain/kotlin/network/ContactUpdater.kt
  17. 1 20
      mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/TroopManagement.kt
  18. 4 1
      mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt
  19. 1 0
      mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.PbPushGroupMsg.kt
  20. 1 0
      mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.PbPushTransMsg.kt
  21. 3 2
      mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.ReqPush.kt

+ 8 - 0
binary-compatibility-validator/api/binary-compatibility-validator.api

@@ -623,6 +623,7 @@ public abstract interface class net/mamoe/mirai/data/FriendInfo : net/mamoe/mira
 	public abstract fun getNick ()Ljava/lang/String;
 	public abstract fun getRemark ()Ljava/lang/String;
 	public abstract fun getUin ()J
+	public abstract fun setRemark (Ljava/lang/String;)V
 }
 
 public class net/mamoe/mirai/data/FriendInfoImpl : net/mamoe/mirai/data/FriendInfo {
@@ -2077,6 +2078,7 @@ public abstract interface class net/mamoe/mirai/event/events/BotOfflineEvent$Cau
 }
 
 public final class net/mamoe/mirai/event/events/BotOfflineEvent$Dropped : net/mamoe/mirai/event/events/BotOfflineEvent, net/mamoe/mirai/event/events/BotOfflineEvent$CauseAware, net/mamoe/mirai/event/events/BotPassiveEvent, net/mamoe/mirai/internal/network/Packet {
+	public fun <init> (Lnet/mamoe/mirai/Bot;Ljava/lang/Throwable;)V
 	public final fun component1 ()Lnet/mamoe/mirai/Bot;
 	public final fun component2 ()Ljava/lang/Throwable;
 	public final fun copy (Lnet/mamoe/mirai/Bot;Ljava/lang/Throwable;)Lnet/mamoe/mirai/event/events/BotOfflineEvent$Dropped;
@@ -2091,6 +2093,7 @@ public final class net/mamoe/mirai/event/events/BotOfflineEvent$Dropped : net/ma
 }
 
 public final class net/mamoe/mirai/event/events/BotOfflineEvent$Force : net/mamoe/mirai/event/events/BotOfflineEvent, net/mamoe/mirai/event/events/BotPassiveEvent, net/mamoe/mirai/internal/network/Packet {
+	public fun <init> (Lnet/mamoe/mirai/Bot;Ljava/lang/String;Ljava/lang/String;)V
 	public final fun component1 ()Lnet/mamoe/mirai/Bot;
 	public final fun component2 ()Ljava/lang/String;
 	public final fun component3 ()Ljava/lang/String;
@@ -2107,6 +2110,7 @@ public final class net/mamoe/mirai/event/events/BotOfflineEvent$Force : net/mamo
 }
 
 public final class net/mamoe/mirai/event/events/BotOfflineEvent$MsfOffline : net/mamoe/mirai/event/events/BotOfflineEvent, net/mamoe/mirai/event/events/BotOfflineEvent$CauseAware, net/mamoe/mirai/event/events/BotPassiveEvent, net/mamoe/mirai/internal/network/Packet {
+	public fun <init> (Lnet/mamoe/mirai/Bot;Ljava/lang/Throwable;)V
 	public final fun component1 ()Lnet/mamoe/mirai/Bot;
 	public final fun component2 ()Ljava/lang/Throwable;
 	public final fun copy (Lnet/mamoe/mirai/Bot;Ljava/lang/Throwable;)Lnet/mamoe/mirai/event/events/BotOfflineEvent$MsfOffline;
@@ -2121,6 +2125,7 @@ public final class net/mamoe/mirai/event/events/BotOfflineEvent$MsfOffline : net
 }
 
 public final class net/mamoe/mirai/event/events/BotOfflineEvent$PacketFactoryErrorCode : net/mamoe/mirai/event/events/BotOfflineEvent, net/mamoe/mirai/event/events/BotOfflineEvent$CauseAware, net/mamoe/mirai/event/events/BotPassiveEvent, net/mamoe/mirai/internal/network/Packet {
+	public fun <init> (ILnet/mamoe/mirai/Bot;Ljava/lang/Throwable;)V
 	public final fun component1 ()I
 	public final fun component2 ()Lnet/mamoe/mirai/Bot;
 	public final fun component3 ()Ljava/lang/Throwable;
@@ -2137,6 +2142,7 @@ public final class net/mamoe/mirai/event/events/BotOfflineEvent$PacketFactoryErr
 }
 
 public final class net/mamoe/mirai/event/events/BotOfflineEvent$RequireReconnect : net/mamoe/mirai/event/events/BotOfflineEvent, net/mamoe/mirai/event/events/BotPassiveEvent, net/mamoe/mirai/internal/network/Packet {
+	public fun <init> (Lnet/mamoe/mirai/Bot;)V
 	public final fun component1 ()Lnet/mamoe/mirai/Bot;
 	public final fun copy (Lnet/mamoe/mirai/Bot;)Lnet/mamoe/mirai/event/events/BotOfflineEvent$RequireReconnect;
 	public static synthetic fun copy$default (Lnet/mamoe/mirai/event/events/BotOfflineEvent$RequireReconnect;Lnet/mamoe/mirai/Bot;ILjava/lang/Object;)Lnet/mamoe/mirai/event/events/BotOfflineEvent$RequireReconnect;
@@ -2149,6 +2155,7 @@ public final class net/mamoe/mirai/event/events/BotOfflineEvent$RequireReconnect
 }
 
 public final class net/mamoe/mirai/event/events/BotOnlineEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotActiveEvent {
+	public fun <init> (Lnet/mamoe/mirai/Bot;)V
 	public final fun component1 ()Lnet/mamoe/mirai/Bot;
 	public final fun copy (Lnet/mamoe/mirai/Bot;)Lnet/mamoe/mirai/event/events/BotOnlineEvent;
 	public static synthetic fun copy$default (Lnet/mamoe/mirai/event/events/BotOnlineEvent;Lnet/mamoe/mirai/Bot;ILjava/lang/Object;)Lnet/mamoe/mirai/event/events/BotOnlineEvent;
@@ -2162,6 +2169,7 @@ public abstract interface class net/mamoe/mirai/event/events/BotPassiveEvent : n
 }
 
 public final class net/mamoe/mirai/event/events/BotReloginEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotActiveEvent, net/mamoe/mirai/event/events/BotEvent {
+	public fun <init> (Lnet/mamoe/mirai/Bot;Ljava/lang/Throwable;)V
 	public final fun component1 ()Lnet/mamoe/mirai/Bot;
 	public final fun component2 ()Ljava/lang/Throwable;
 	public final fun copy (Lnet/mamoe/mirai/Bot;Ljava/lang/Throwable;)Lnet/mamoe/mirai/event/events/BotReloginEvent;

+ 1 - 0
mirai-core-api/src/commonMain/kotlin/contact/MemberPermission.kt

@@ -11,6 +11,7 @@
 
 package net.mamoe.mirai.contact
 
+import kotlinx.serialization.Serializable
 import net.mamoe.mirai.Bot
 import kotlin.internal.InlineOnly
 

+ 8 - 1
mirai-core-api/src/commonMain/kotlin/data/FriendInfo.kt

@@ -17,9 +17,16 @@ public interface FriendInfo : UserInfo {
 
     public override val nick: String
 
-    public override val remark: String
+    public override var remark: String
 }
 
+
+@Deprecated(
+    "Moved to net.mamoe.mirai.internal.contact.FriendInfoImpl. Kept for binary compatibility.",
+    ReplaceWith("FriendInfoImpl", "net.mamoe.mirai.internal.contact.FriendInfoImpl"),
+    level = DeprecationLevel.HIDDEN
+)
+@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
 @LowLevelApi
 public open class FriendInfoImpl(
     override val uin: Long,

+ 3 - 0
mirai-core/src/commonMain/kotlin/MiraiImpl.kt

@@ -9,6 +9,7 @@
 
 package net.mamoe.mirai.internal
 
+import contact.StrangerImpl
 import io.ktor.client.*
 import io.ktor.client.engine.okhttp.*
 import io.ktor.client.features.*
@@ -25,6 +26,8 @@ import net.mamoe.mirai.data.*
 import net.mamoe.mirai.event.broadcast
 import net.mamoe.mirai.event.events.*
 import net.mamoe.mirai.internal.contact.*
+import net.mamoe.mirai.internal.contact.info.FriendInfoImpl
+import net.mamoe.mirai.internal.contact.info.MemberInfoImpl
 import net.mamoe.mirai.internal.message.*
 import net.mamoe.mirai.internal.network.highway.*
 import net.mamoe.mirai.internal.network.protocol.data.jce.SvcDevLoginInfo

+ 2 - 1
mirai-core/src/commonMain/kotlin/QQAndroidBot.kt

@@ -18,8 +18,9 @@ import net.mamoe.mirai.LowLevelApi
 import net.mamoe.mirai.Mirai
 import net.mamoe.mirai.contact.*
 import net.mamoe.mirai.data.*
+import net.mamoe.mirai.internal.contact.info.FriendInfoImpl
 import net.mamoe.mirai.internal.contact.OtherClientImpl
-import net.mamoe.mirai.internal.contact.StrangerInfoImpl
+import net.mamoe.mirai.internal.contact.info.StrangerInfoImpl
 import net.mamoe.mirai.internal.contact.checkIsGroupImpl
 import net.mamoe.mirai.internal.contact.uin
 import net.mamoe.mirai.internal.message.*

+ 1 - 0
mirai-core/src/commonMain/kotlin/contact/AbstractMember.kt

@@ -12,6 +12,7 @@ package net.mamoe.mirai.internal.contact
 import net.mamoe.mirai.contact.Member
 import net.mamoe.mirai.contact.MemberPermission
 import net.mamoe.mirai.data.MemberInfo
+import net.mamoe.mirai.internal.contact.info.MemberInfoImpl
 import net.mamoe.mirai.utils.cast
 import net.mamoe.mirai.utils.getValue
 import net.mamoe.mirai.utils.unsafeWeakRef

+ 0 - 3
mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt

@@ -40,9 +40,6 @@ import kotlin.coroutines.CoroutineContext
 
 internal val User.info: UserInfo? get() = this.castOrNull<AbstractUser>()?.info
 
-internal open class UserInfoImpl(override val uin: Long, override val nick: String, override val remark: String = "") :
-    UserInfo
-
 internal abstract class AbstractUser(
     bot: Bot,
     coroutineContext: CoroutineContext,

+ 1 - 10
mirai-core/src/commonMain/kotlin/contact/FriendImpl.kt

@@ -23,10 +23,10 @@ import kotlinx.atomicfu.atomic
 import net.mamoe.mirai.LowLevelApi
 import net.mamoe.mirai.contact.Friend
 import net.mamoe.mirai.data.FriendInfo
-import net.mamoe.mirai.data.FriendInfoImpl
 import net.mamoe.mirai.event.events.FriendMessagePostSendEvent
 import net.mamoe.mirai.event.events.FriendMessagePreSendEvent
 import net.mamoe.mirai.internal.QQAndroidBot
+import net.mamoe.mirai.internal.contact.info.FriendInfoImpl
 import net.mamoe.mirai.internal.network.protocol.packet.list.FriendList
 import net.mamoe.mirai.internal.utils.C2CPkgMsgParsingCache
 import net.mamoe.mirai.message.MessageReceipt
@@ -42,15 +42,6 @@ internal fun net.mamoe.mirai.internal.network.protocol.data.jce.FriendInfo.toMir
         remark
     )
 
-@OptIn(ExperimentalContracts::class)
-internal inline fun FriendInfo.checkIsInfoImpl(): FriendInfoImpl {
-    contract {
-        returns() implies (this@checkIsInfoImpl is FriendInfoImpl)
-    }
-    check(this is FriendInfoImpl) { "A FriendInfo instance is not instance of checkIsInfoImpl. Your instance: ${this::class.qualifiedName}" }
-    return this
-}
-
 @OptIn(ExperimentalContracts::class)
 internal inline fun Friend.checkIsFriendImpl(): FriendImpl {
     contract {

+ 1 - 0
mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt

@@ -20,6 +20,7 @@ import net.mamoe.mirai.data.MemberInfo
 import net.mamoe.mirai.event.broadcast
 import net.mamoe.mirai.event.events.*
 import net.mamoe.mirai.internal.QQAndroidBot
+import net.mamoe.mirai.internal.contact.info.MemberInfoImpl
 import net.mamoe.mirai.internal.message.*
 import net.mamoe.mirai.internal.network.BdhSession
 import net.mamoe.mirai.internal.network.handler.QQAndroidBotNetworkHandler

+ 1 - 0
mirai-core/src/commonMain/kotlin/contact/SendMessageHandler.kt

@@ -9,6 +9,7 @@
 
 package net.mamoe.mirai.internal.contact
 
+import contact.StrangerImpl
 import net.mamoe.mirai.contact.*
 import net.mamoe.mirai.event.nextEventOrNull
 import net.mamoe.mirai.internal.MiraiImpl

+ 4 - 16
mirai-core/src/commonMain/kotlin/contact/StrangerImpl.kt

@@ -15,17 +15,19 @@
     "INVISIBLE_REFERENCE"
 )
 
-package net.mamoe.mirai.internal.contact
+package contact
 
 import kotlinx.atomicfu.AtomicInt
 import kotlinx.atomicfu.atomic
 import net.mamoe.mirai.LowLevelApi
 import net.mamoe.mirai.contact.*
-import net.mamoe.mirai.data.FriendInfoImpl
 import net.mamoe.mirai.data.StrangerInfo
 import net.mamoe.mirai.event.events.StrangerMessagePostSendEvent
 import net.mamoe.mirai.event.events.StrangerMessagePreSendEvent
 import net.mamoe.mirai.internal.QQAndroidBot
+import net.mamoe.mirai.internal.contact.AbstractUser
+import net.mamoe.mirai.internal.contact.StrangerSendMessageHandler
+import net.mamoe.mirai.internal.contact.sendMessageImpl
 import net.mamoe.mirai.internal.message.OnlineMessageSourceToStrangerImpl
 import net.mamoe.mirai.internal.network.protocol.packet.list.StrangerList
 import net.mamoe.mirai.message.MessageReceipt
@@ -36,20 +38,6 @@ import kotlin.contracts.contract
 import kotlin.coroutines.CoroutineContext
 
 
-internal class StrangerInfoImpl(
-    override val uin: Long, override val nick: String, override val fromGroup: Long = 0,
-    override val remark: String = ""
-) : StrangerInfo
-
-@OptIn(ExperimentalContracts::class)
-internal inline fun StrangerInfo.checkIsInfoImpl(): FriendInfoImpl {
-    contract {
-        returns() implies (this@checkIsInfoImpl is StrangerInfoImpl)
-    }
-    check(this is FriendInfoImpl) { "A StrangerInfo instance is not instance of StrangerInfoImpl. Your instance: ${this::class.qualifiedName}" }
-    return this
-}
-
 @OptIn(ExperimentalContracts::class)
 internal inline fun Stranger.checkIsImpl(): StrangerImpl {
     contract {

+ 21 - 0
mirai-core/src/commonMain/kotlin/contact/info/FriendInfoImpl.kt

@@ -0,0 +1,21 @@
+/*
+ * Copyright 2020 Mamoe Technologies and contributors.
+ *
+ * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
+ * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
+ *
+ * https://github.com/mamoe/mirai/blob/master/LICENSE
+ */
+
+package net.mamoe.mirai.internal.contact.info
+
+import kotlinx.serialization.Serializable
+import net.mamoe.mirai.data.FriendInfo
+
+// since 2.4, for serialization
+@Serializable
+internal data class FriendInfoImpl(
+    override val uin: Long,
+    override var nick: String,
+    override var remark: String,
+) : FriendInfo

+ 44 - 0
mirai-core/src/commonMain/kotlin/contact/info/GroupInfoImpl.kt

@@ -0,0 +1,44 @@
+/*
+ * Copyright 2019-2021 Mamoe Technologies and contributors.
+ *
+ *  此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
+ *  Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
+ *
+ *  https://github.com/mamoe/mirai/blob/master/LICENSE
+ */
+
+package net.mamoe.mirai.internal.contact.info
+
+import kotlinx.serialization.Serializable
+import net.mamoe.mirai.data.GroupInfo
+import net.mamoe.mirai.internal.network.Packet
+import net.mamoe.mirai.internal.network.protocol.data.jce.StTroopNum
+
+@Serializable
+internal data class GroupInfoImpl(
+    override val uin: Long,
+    override val owner: Long,
+    override val groupCode: Long,
+    override val memo: String,
+    override val name: String,
+    override val allowMemberInvite: Boolean,
+    override val allowAnonymousChat: Boolean,
+    override val autoApprove: Boolean,
+    override val confessTalk: Boolean,
+    override val muteAll: Boolean,
+    override val botMuteTimestamp: Int,
+) : GroupInfo, Packet, Packet.NoLog {
+    constructor(stTroopNum: StTroopNum) : this(
+        uin = stTroopNum.groupUin,
+        owner = stTroopNum.dwGroupOwnerUin,
+        groupCode = stTroopNum.groupCode,
+        memo = stTroopNum.groupMemo,
+        name = stTroopNum.groupName,
+        allowMemberInvite = stTroopNum.dwGroupFlagExt?.and(0x000000c0) != 0L,
+        allowAnonymousChat = stTroopNum.dwGroupFlagExt?.and(0x40000000) == 0L,
+        autoApprove = stTroopNum.dwGroupFlagExt3?.and(0x00100000) == 0L,
+        confessTalk = stTroopNum.dwGroupFlagExt3?.and(0x00002000) == 0L,
+        muteAll = stTroopNum.dwShutUpTimestamp != 0L,
+        botMuteTimestamp = stTroopNum.dwMyShutUpTimestamp?.toInt() ?: 0,
+    )
+}

+ 5 - 3
mirai-core/src/commonMain/kotlin/contact/MemberInfoImpl.kt → mirai-core/src/commonMain/kotlin/contact/info/MemberInfoImpl.kt

@@ -7,15 +7,17 @@
  *  https://github.com/mamoe/mirai/blob/master/LICENSE
  */
 
-package net.mamoe.mirai.internal.contact
+package net.mamoe.mirai.internal.contact.info
 
+import kotlinx.serialization.Serializable
 import net.mamoe.mirai.contact.MemberPermission
 import net.mamoe.mirai.data.MemberInfo
 import net.mamoe.mirai.internal.network.QQAndroidClient
 import net.mamoe.mirai.internal.network.protocol.data.jce.StTroopMemberInfo
 import net.mamoe.mirai.utils.currentTimeSeconds
 
-internal class MemberInfoImpl(
+@Serializable
+internal data class MemberInfoImpl(
     override val uin: Long,
     override var nick: String,
     override var permission: MemberPermission,
@@ -27,7 +29,7 @@ internal class MemberInfoImpl(
     override val joinTimestamp: Int = currentTimeSeconds().toInt(),
     override var lastSpeakTimestamp: Int = 0,
     override val isOfficialBot: Boolean = false
-) : MemberInfo, UserInfoImpl(uin, nick, remark) {
+) : MemberInfo {
     constructor(
         client: QQAndroidClient,
         jceInfo: StTroopMemberInfo,

+ 23 - 0
mirai-core/src/commonMain/kotlin/contact/info/StrangerInfoImpl.kt

@@ -0,0 +1,23 @@
+/*
+ * Copyright 2019-2021 Mamoe Technologies and contributors.
+ *
+ *  此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
+ *  Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
+ *
+ *  https://github.com/mamoe/mirai/blob/master/LICENSE
+ */
+
+package net.mamoe.mirai.internal.contact.info
+
+import kotlinx.serialization.SerialName
+import kotlinx.serialization.Serializable
+import net.mamoe.mirai.data.StrangerInfo
+
+@SerialName("StrangerInfo")
+@Serializable
+internal class StrangerInfoImpl(
+    override val uin: Long,
+    override val nick: String,
+    override val fromGroup: Long = 0,
+    override val remark: String = ""
+) : StrangerInfo

+ 10 - 2
mirai-core/src/commonMain/kotlin/network/ContactUpdater.kt

@@ -9,6 +9,7 @@
 
 package net.mamoe.mirai.internal.network
 
+import contact.StrangerImpl
 import kotlinx.coroutines.CancellationException
 import kotlinx.coroutines.cancel
 import kotlinx.coroutines.coroutineScope
@@ -17,9 +18,12 @@ import kotlinx.coroutines.sync.Semaphore
 import kotlinx.coroutines.sync.withPermit
 import net.mamoe.mirai.Mirai
 import net.mamoe.mirai.internal.QQAndroidBot
-import net.mamoe.mirai.internal.contact.*
+import net.mamoe.mirai.internal.contact.FriendImpl
+import net.mamoe.mirai.internal.contact.GroupImpl
+import net.mamoe.mirai.internal.contact.info.GroupInfoImpl
+import net.mamoe.mirai.internal.contact.info.StrangerInfoImpl
+import net.mamoe.mirai.internal.contact.toMiraiFriendInfo
 import net.mamoe.mirai.internal.network.protocol.data.jce.StTroopNum
-import net.mamoe.mirai.internal.network.protocol.packet.chat.GroupInfoImpl
 import net.mamoe.mirai.internal.network.protocol.packet.chat.TroopManagement
 import net.mamoe.mirai.internal.network.protocol.packet.list.FriendList
 import net.mamoe.mirai.internal.network.protocol.packet.list.StrangerList
@@ -27,6 +31,10 @@ import net.mamoe.mirai.utils.info
 import net.mamoe.mirai.utils.retryCatching
 import net.mamoe.mirai.utils.verbose
 
+internal interface ContactCache {
+
+}
+
 internal interface ContactUpdater {
     suspend fun loadAll()
 

+ 1 - 20
mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/TroopManagement.kt

@@ -13,14 +13,13 @@ import kotlinx.io.core.ByteReadPacket
 import kotlinx.io.core.buildPacket
 import kotlinx.io.core.readBytes
 import kotlinx.io.core.toByteArray
-import net.mamoe.mirai.LowLevelApi
 import net.mamoe.mirai.contact.Member
 import net.mamoe.mirai.internal.QQAndroidBot
+import net.mamoe.mirai.internal.contact.info.GroupInfoImpl
 import net.mamoe.mirai.internal.network.Packet
 import net.mamoe.mirai.internal.network.QQAndroidClient
 import net.mamoe.mirai.internal.network.protocol.data.jce.ModifyGroupCardReq
 import net.mamoe.mirai.internal.network.protocol.data.jce.RequestPacket
-import net.mamoe.mirai.internal.network.protocol.data.jce.StTroopNum
 import net.mamoe.mirai.internal.network.protocol.data.jce.stUinInfo
 import net.mamoe.mirai.internal.network.protocol.data.proto.*
 import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacket
@@ -28,24 +27,6 @@ import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacketFactory
 import net.mamoe.mirai.internal.network.protocol.packet.buildOutgoingUniPacket
 import net.mamoe.mirai.internal.utils.io.serialization.*
 import net.mamoe.mirai.utils.daysToSeconds
-import net.mamoe.mirai.data.GroupInfo as MiraiGroupInfo
-
-@OptIn(LowLevelApi::class)
-internal class GroupInfoImpl(
-    private val stTroopNum: StTroopNum
-) : MiraiGroupInfo, Packet, Packet.NoLog {
-    override val uin: Long get() = stTroopNum.groupUin
-    override val owner: Long get() = stTroopNum.dwGroupOwnerUin
-    override val groupCode: Long get() = stTroopNum.groupCode
-    override val memo: String get() = stTroopNum.groupMemo
-    override val name: String get() = stTroopNum.groupName
-    override val allowMemberInvite get() = stTroopNum.dwGroupFlagExt?.and(0x000000c0) != 0L
-    override val allowAnonymousChat get() = stTroopNum.dwGroupFlagExt?.and(0x40000000) == 0L
-    override val autoApprove get() = stTroopNum.dwGroupFlagExt3?.and(0x00100000) == 0L
-    override val confessTalk get() = stTroopNum.dwGroupFlagExt3?.and(0x00002000) == 0L
-    override val muteAll: Boolean get() = stTroopNum.dwShutUpTimestamp != 0L
-    override val botMuteTimestamp: Int get() = stTroopNum.dwMyShutUpTimestamp?.toInt() ?: 0
-}
 
 internal class TroopManagement {
 

+ 4 - 1
mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt

@@ -11,6 +11,7 @@
 
 package net.mamoe.mirai.internal.network.protocol.packet.chat.receive
 
+import contact.checkIsImpl
 import kotlinx.coroutines.CoroutineName
 import kotlinx.coroutines.FlowPreview
 import kotlinx.coroutines.delay
@@ -29,6 +30,8 @@ import net.mamoe.mirai.event.broadcast
 import net.mamoe.mirai.event.events.*
 import net.mamoe.mirai.internal.QQAndroidBot
 import net.mamoe.mirai.internal.contact.*
+import net.mamoe.mirai.internal.contact.info.MemberInfoImpl
+import net.mamoe.mirai.internal.contact.info.StrangerInfoImpl
 import net.mamoe.mirai.internal.message.OnlineMessageSourceFromFriendImpl
 import net.mamoe.mirai.internal.message.refine
 import net.mamoe.mirai.internal.message.toMessageChainOnline
@@ -42,7 +45,7 @@ import net.mamoe.mirai.internal.network.protocol.data.proto.SubMsgType0x7
 import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacket
 import net.mamoe.mirai.internal.network.protocol.packet.OutgoingPacketFactory
 import net.mamoe.mirai.internal.network.protocol.packet.buildOutgoingUniPacket
-import net.mamoe.mirai.internal.network.protocol.packet.chat.GroupInfoImpl
+import net.mamoe.mirai.internal.contact.info.GroupInfoImpl
 import net.mamoe.mirai.internal.network.protocol.packet.chat.NewContact
 import net.mamoe.mirai.internal.network.protocol.packet.list.FriendList
 import net.mamoe.mirai.internal.utils.*

+ 1 - 0
mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.PbPushGroupMsg.kt

@@ -23,6 +23,7 @@ import net.mamoe.mirai.event.events.GroupMessageSyncEvent
 import net.mamoe.mirai.event.events.MemberCardChangeEvent
 import net.mamoe.mirai.internal.QQAndroidBot
 import net.mamoe.mirai.internal.contact.*
+import net.mamoe.mirai.internal.contact.info.MemberInfoImpl
 import net.mamoe.mirai.internal.message.refine
 import net.mamoe.mirai.internal.message.toMessageChainOnline
 import net.mamoe.mirai.internal.network.Packet

+ 1 - 0
mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.PbPushTransMsg.kt

@@ -23,6 +23,7 @@ import net.mamoe.mirai.contact.NormalMember
 import net.mamoe.mirai.event.events.*
 import net.mamoe.mirai.internal.QQAndroidBot
 import net.mamoe.mirai.internal.contact.*
+import net.mamoe.mirai.internal.contact.info.MemberInfoImpl
 import net.mamoe.mirai.internal.message.contextualBugReportException
 import net.mamoe.mirai.internal.network.MultiPacketByIterable
 import net.mamoe.mirai.internal.network.Packet

+ 3 - 2
mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.ReqPush.kt

@@ -21,12 +21,13 @@ import kotlinx.serialization.Serializable
 import kotlinx.serialization.protobuf.ProtoNumber
 import net.mamoe.mirai.Mirai
 import net.mamoe.mirai.contact.*
-import net.mamoe.mirai.data.FriendInfoImpl
 import net.mamoe.mirai.data.GroupHonorType
 import net.mamoe.mirai.event.broadcast
 import net.mamoe.mirai.event.events.*
 import net.mamoe.mirai.internal.QQAndroidBot
 import net.mamoe.mirai.internal.contact.*
+import net.mamoe.mirai.internal.contact.info.FriendInfoImpl
+import net.mamoe.mirai.internal.contact.info.MemberInfoImpl
 import net.mamoe.mirai.internal.network.MultiPacketBySequence
 import net.mamoe.mirai.internal.network.Packet
 import net.mamoe.mirai.internal.network.QQAndroidClient
@@ -708,7 +709,7 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf(
             return this.msgFrdRmk.asSequence().mapNotNull {
                 val friend = bot.getFriend(it.fuin) ?: return@mapNotNull null
                 val old: String
-                friend.checkIsFriendImpl().friendInfo.checkIsInfoImpl()
+                friend.checkIsFriendImpl().friendInfo
                     .also { info -> old = info.remark }
                     .remark = it.rmkName
                 // TODO: 2020/4/10 ADD REMARK QUERY