From 9211f697cff685197a0bc67d8e239e57f4e27fed Mon Sep 17 00:00:00 2001 From: Him188 Date: Sat, 6 Feb 2021 20:22:14 +0800 Subject: [PATCH] Review contact infos and make them serializable --- .../api/binary-compatibility-validator.api | 8 ++++ .../kotlin/contact/MemberPermission.kt | 1 + .../src/commonMain/kotlin/data/FriendInfo.kt | 9 +++- mirai-core/src/commonMain/kotlin/MiraiImpl.kt | 3 ++ .../src/commonMain/kotlin/QQAndroidBot.kt | 3 +- .../kotlin/contact/AbstractMember.kt | 1 + .../commonMain/kotlin/contact/AbstractUser.kt | 3 -- .../commonMain/kotlin/contact/FriendImpl.kt | 11 +---- .../commonMain/kotlin/contact/GroupImpl.kt | 1 + .../kotlin/contact/SendMessageHandler.kt | 1 + .../commonMain/kotlin/contact/StrangerImpl.kt | 20 ++------- .../kotlin/contact/info/FriendInfoImpl.kt | 21 +++++++++ .../kotlin/contact/info/GroupInfoImpl.kt | 44 +++++++++++++++++++ .../contact/{ => info}/MemberInfoImpl.kt | 8 ++-- .../kotlin/contact/info/StrangerInfoImpl.kt | 23 ++++++++++ .../kotlin/network/ContactUpdater.kt | 12 ++++- .../protocol/packet/chat/TroopManagement.kt | 21 +-------- .../chat/receive/MessageSvc.PbGetMsg.kt | 5 ++- .../chat/receive/OnlinePush.PbPushGroupMsg.kt | 1 + .../chat/receive/OnlinePush.PbPushTransMsg.kt | 1 + .../packet/chat/receive/OnlinePush.ReqPush.kt | 5 ++- 21 files changed, 143 insertions(+), 59 deletions(-) create mode 100644 mirai-core/src/commonMain/kotlin/contact/info/FriendInfoImpl.kt create mode 100644 mirai-core/src/commonMain/kotlin/contact/info/GroupInfoImpl.kt rename mirai-core/src/commonMain/kotlin/contact/{ => info}/MemberInfoImpl.kt (92%) create mode 100644 mirai-core/src/commonMain/kotlin/contact/info/StrangerInfoImpl.kt diff --git a/binary-compatibility-validator/api/binary-compatibility-validator.api b/binary-compatibility-validator/api/binary-compatibility-validator.api index 2ff6ddf64..df9ae4ce0 100644 --- a/binary-compatibility-validator/api/binary-compatibility-validator.api +++ b/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 (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 (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 (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 (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 (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 (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 (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; diff --git a/mirai-core-api/src/commonMain/kotlin/contact/MemberPermission.kt b/mirai-core-api/src/commonMain/kotlin/contact/MemberPermission.kt index 7f5c3a58b..43c55be16 100644 --- a/mirai-core-api/src/commonMain/kotlin/contact/MemberPermission.kt +++ b/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 diff --git a/mirai-core-api/src/commonMain/kotlin/data/FriendInfo.kt b/mirai-core-api/src/commonMain/kotlin/data/FriendInfo.kt index a56fb0739..d3a40d835 100644 --- a/mirai-core-api/src/commonMain/kotlin/data/FriendInfo.kt +++ b/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, diff --git a/mirai-core/src/commonMain/kotlin/MiraiImpl.kt b/mirai-core/src/commonMain/kotlin/MiraiImpl.kt index fd716b7cc..71d91a3c0 100644 --- a/mirai-core/src/commonMain/kotlin/MiraiImpl.kt +++ b/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 diff --git a/mirai-core/src/commonMain/kotlin/QQAndroidBot.kt b/mirai-core/src/commonMain/kotlin/QQAndroidBot.kt index 27334c1b4..0ffc5a2bd 100644 --- a/mirai-core/src/commonMain/kotlin/QQAndroidBot.kt +++ b/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.* diff --git a/mirai-core/src/commonMain/kotlin/contact/AbstractMember.kt b/mirai-core/src/commonMain/kotlin/contact/AbstractMember.kt index 0e9075df6..8f111dabc 100644 --- a/mirai-core/src/commonMain/kotlin/contact/AbstractMember.kt +++ b/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 diff --git a/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt b/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt index 59d10ce9d..aea2d7c81 100644 --- a/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt +++ b/mirai-core/src/commonMain/kotlin/contact/AbstractUser.kt @@ -40,9 +40,6 @@ import kotlin.coroutines.CoroutineContext internal val User.info: UserInfo? get() = this.castOrNull()?.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, diff --git a/mirai-core/src/commonMain/kotlin/contact/FriendImpl.kt b/mirai-core/src/commonMain/kotlin/contact/FriendImpl.kt index 417f7401d..f4af6ecbb 100644 --- a/mirai-core/src/commonMain/kotlin/contact/FriendImpl.kt +++ b/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 { diff --git a/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt b/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt index a9af1ca50..fe26b64de 100644 --- a/mirai-core/src/commonMain/kotlin/contact/GroupImpl.kt +++ b/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 diff --git a/mirai-core/src/commonMain/kotlin/contact/SendMessageHandler.kt b/mirai-core/src/commonMain/kotlin/contact/SendMessageHandler.kt index 6357c4ffa..9fb5a732f 100644 --- a/mirai-core/src/commonMain/kotlin/contact/SendMessageHandler.kt +++ b/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 diff --git a/mirai-core/src/commonMain/kotlin/contact/StrangerImpl.kt b/mirai-core/src/commonMain/kotlin/contact/StrangerImpl.kt index 7be4301cb..771064c12 100644 --- a/mirai-core/src/commonMain/kotlin/contact/StrangerImpl.kt +++ b/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 { diff --git a/mirai-core/src/commonMain/kotlin/contact/info/FriendInfoImpl.kt b/mirai-core/src/commonMain/kotlin/contact/info/FriendInfoImpl.kt new file mode 100644 index 000000000..c46c8b135 --- /dev/null +++ b/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 \ No newline at end of file diff --git a/mirai-core/src/commonMain/kotlin/contact/info/GroupInfoImpl.kt b/mirai-core/src/commonMain/kotlin/contact/info/GroupInfoImpl.kt new file mode 100644 index 000000000..921f41615 --- /dev/null +++ b/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, + ) +} \ No newline at end of file diff --git a/mirai-core/src/commonMain/kotlin/contact/MemberInfoImpl.kt b/mirai-core/src/commonMain/kotlin/contact/info/MemberInfoImpl.kt similarity index 92% rename from mirai-core/src/commonMain/kotlin/contact/MemberInfoImpl.kt rename to mirai-core/src/commonMain/kotlin/contact/info/MemberInfoImpl.kt index 873720bb2..3c653670f 100644 --- a/mirai-core/src/commonMain/kotlin/contact/MemberInfoImpl.kt +++ b/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, diff --git a/mirai-core/src/commonMain/kotlin/contact/info/StrangerInfoImpl.kt b/mirai-core/src/commonMain/kotlin/contact/info/StrangerInfoImpl.kt new file mode 100644 index 000000000..5a3aef420 --- /dev/null +++ b/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 \ No newline at end of file diff --git a/mirai-core/src/commonMain/kotlin/network/ContactUpdater.kt b/mirai-core/src/commonMain/kotlin/network/ContactUpdater.kt index f5029e955..6eff0bc74 100644 --- a/mirai-core/src/commonMain/kotlin/network/ContactUpdater.kt +++ b/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() diff --git a/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/TroopManagement.kt b/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/TroopManagement.kt index cfd8a9847..74f273804 100644 --- a/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/TroopManagement.kt +++ b/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 { diff --git a/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt b/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt index 9c2440a7f..19e85038c 100644 --- a/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt +++ b/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.* diff --git a/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.PbPushGroupMsg.kt b/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.PbPushGroupMsg.kt index 56809219d..4b351520b 100644 --- a/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.PbPushGroupMsg.kt +++ b/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 diff --git a/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.PbPushTransMsg.kt b/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.PbPushTransMsg.kt index 817fae3d9..62cffe697 100644 --- a/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.PbPushTransMsg.kt +++ b/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 diff --git a/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.ReqPush.kt b/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.ReqPush.kt index d0175e43b..31c378f35 100644 --- a/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/OnlinePush.ReqPush.kt +++ b/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 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