From c75d1f7074af558cb04d3b12e98010ae0dcaee85 Mon Sep 17 00:00:00 2001 From: Him188 Date: Mon, 23 May 2022 18:05:23 +0100 Subject: [PATCH] Add MessageSource.isOriginalMessageInitialized --- .../compatibility-validation/android/api/android.api | 1 + .../compatibility-validation/jvm/api/jvm.api | 1 + .../commonMain/kotlin/message/data/MessageSource.kt | 7 +++++++ .../kotlin/message/source/incomingSourceImpl.kt | 12 ++++++++++++ .../kotlin/message/source/offlineSourceImpl.kt | 8 ++++++-- .../kotlin/message/source/outgoingSourceImpl.kt | 11 +++++++++++ 6 files changed, 38 insertions(+), 2 deletions(-) diff --git a/mirai-core-api/compatibility-validation/android/api/android.api b/mirai-core-api/compatibility-validation/android/api/android.api index 8d43d3e25..a2827228c 100644 --- a/mirai-core-api/compatibility-validation/android/api/android.api +++ b/mirai-core-api/compatibility-validation/android/api/android.api @@ -4834,6 +4834,7 @@ public abstract class net/mamoe/mirai/message/data/MessageSource : net/mamoe/mir public abstract fun getOriginalMessage ()Lnet/mamoe/mirai/message/data/MessageChain; public abstract fun getTargetId ()J public abstract fun getTime ()I + public abstract fun isOriginalMessageInitialized ()Z public static final fun quote (Lnet/mamoe/mirai/message/data/MessageChain;)Lnet/mamoe/mirai/message/data/QuoteReply; public static final fun quote (Lnet/mamoe/mirai/message/data/MessageSource;)Lnet/mamoe/mirai/message/data/QuoteReply; public static final fun recall (Lnet/mamoe/mirai/message/data/MessageChain;)V diff --git a/mirai-core-api/compatibility-validation/jvm/api/jvm.api b/mirai-core-api/compatibility-validation/jvm/api/jvm.api index 940fc4a11..8c1584a45 100644 --- a/mirai-core-api/compatibility-validation/jvm/api/jvm.api +++ b/mirai-core-api/compatibility-validation/jvm/api/jvm.api @@ -4834,6 +4834,7 @@ public abstract class net/mamoe/mirai/message/data/MessageSource : net/mamoe/mir public abstract fun getOriginalMessage ()Lnet/mamoe/mirai/message/data/MessageChain; public abstract fun getTargetId ()J public abstract fun getTime ()I + public abstract fun isOriginalMessageInitialized ()Z public static final fun quote (Lnet/mamoe/mirai/message/data/MessageChain;)Lnet/mamoe/mirai/message/data/QuoteReply; public static final fun quote (Lnet/mamoe/mirai/message/data/MessageSource;)Lnet/mamoe/mirai/message/data/QuoteReply; public static final fun recall (Lnet/mamoe/mirai/message/data/MessageChain;)V diff --git a/mirai-core-api/src/commonMain/kotlin/message/data/MessageSource.kt b/mirai-core-api/src/commonMain/kotlin/message/data/MessageSource.kt index 6441dbfa6..7b83d3380 100644 --- a/mirai-core-api/src/commonMain/kotlin/message/data/MessageSource.kt +++ b/mirai-core-api/src/commonMain/kotlin/message/data/MessageSource.kt @@ -180,6 +180,13 @@ public sealed class MessageSource : Message, MessageMetadata, ConstrainSingle { */ public abstract val originalMessage: MessageChain // see OutgoingMessageSourceInternal.originalMessage + /** + * 当 [originalMessage] 已被初始化后返回 `true`. + * + * @since 2.12 + */ + public abstract val isOriginalMessageInitialized: Boolean + public abstract override fun toString(): String @MiraiInternalApi diff --git a/mirai-core/src/commonMain/kotlin/message/source/incomingSourceImpl.kt b/mirai-core/src/commonMain/kotlin/message/source/incomingSourceImpl.kt index 88c03e03d..a2f70481d 100644 --- a/mirai-core/src/commonMain/kotlin/message/source/incomingSourceImpl.kt +++ b/mirai-core/src/commonMain/kotlin/message/source/incomingSourceImpl.kt @@ -57,6 +57,9 @@ internal class OnlineMessageSourceFromFriendImpl( msg.toMessageChainNoSource(bot, 0, MessageSourceKind.FRIEND) } override val originalMessage: MessageChain get() = originalMessageLazy.value + override val isOriginalMessageInitialized: Boolean + get() = originalMessageLazy.isInitialized() + override val sender: Friend = bot.getFriendOrFail(msg.first().msgHead.fromUin) private val jceData: ImMsgBody.SourceMsg by lazy { msg.toJceDataPrivate(internalIds) } @@ -87,6 +90,9 @@ internal class OnlineMessageSourceFromStrangerImpl( msg.toMessageChainNoSource(bot, 0, MessageSourceKind.STRANGER) } override val originalMessage: MessageChain get() = originalMessageLazy.value + override val isOriginalMessageInitialized: Boolean + get() = originalMessageLazy.isInitialized() + override val sender: Stranger = bot.getStrangerOrFail(msg.first().msgHead.fromUin) private val jceData: ImMsgBody.SourceMsg by lazy { msg.toJceDataPrivate(internalIds) } @@ -154,6 +160,9 @@ internal class OnlineMessageSourceFromTempImpl( msg.toMessageChainNoSource(bot, groupIdOrZero = 0, MessageSourceKind.TEMP) } override val originalMessage: MessageChain get() = originalMessageLazy.value + override val isOriginalMessageInitialized: Boolean + get() = originalMessageLazy.isInitialized() + override val sender: Member = with(msg.first().msgHead) { // it must be uin, see #1410 // corresponding test: net.mamoe.mirai.internal.notice.processors.MessageTest.group temp message test 2 @@ -189,6 +198,9 @@ internal class OnlineMessageSourceFromGroupImpl( msg.toMessageChainNoSource(bot, groupIdOrZero = group.id, MessageSourceKind.GROUP) } override val originalMessage: MessageChain get() = originalMessageLazy.value + override val isOriginalMessageInitialized: Boolean + get() = originalMessageLazy.isInitialized() + override val subject: GroupImpl by lazy { val groupCode = msg.first().msgHead.groupInfo?.groupCode diff --git a/mirai-core/src/commonMain/kotlin/message/source/offlineSourceImpl.kt b/mirai-core/src/commonMain/kotlin/message/source/offlineSourceImpl.kt index 3d7129d80..bb83f2fc5 100644 --- a/mirai-core/src/commonMain/kotlin/message/source/offlineSourceImpl.kt +++ b/mirai-core/src/commonMain/kotlin/message/source/offlineSourceImpl.kt @@ -37,13 +37,15 @@ internal class OfflineMessageSourceImplData( override val time: Int, override val fromId: Long, override val targetId: Long, - originalMessageLazy: Lazy, + private val originalMessageLazy: Lazy, override val internalIds: IntArray, ) : OfflineMessageSource(), MessageSourceInternal { object Serializer : MessageSourceSerializerImpl("OfflineMessageSource") override val sequenceIds: IntArray get() = ids override val originalMessage: MessageChain by originalMessageLazy + override val isOriginalMessageInitialized: Boolean + get() = originalMessageLazy.isInitialized() // for override. // if provided, no need to serialize from message @@ -157,7 +159,9 @@ internal fun OfflineMessageSourceImplData( targetId = targetId, originalMessageLazy = lazyOf(originalMessage), internalIds = internalIds -) +).also { + it.originalMessage // initialize lazy, to make isOriginalMessageInitialized true. +} internal fun OfflineMessageSourceImplData( delegate: ImMsgBody.SourceMsg, diff --git a/mirai-core/src/commonMain/kotlin/message/source/outgoingSourceImpl.kt b/mirai-core/src/commonMain/kotlin/message/source/outgoingSourceImpl.kt index 6f60c2dd9..6221aa911 100644 --- a/mirai-core/src/commonMain/kotlin/message/source/outgoingSourceImpl.kt +++ b/mirai-core/src/commonMain/kotlin/message/source/outgoingSourceImpl.kt @@ -88,6 +88,9 @@ internal class OnlineMessageSourceToFriendImpl( ) : OnlineMessageSource.Outgoing.ToFriend(), MessageSourceInternal, OutgoingMessageSourceInternal { object Serializer : MessageSourceSerializerImpl("OnlineMessageSourceToFriend") + override val isOriginalMessageInitialized: Boolean + get() = true + override val bot: Bot get() = sender override val ids: IntArray @@ -119,6 +122,8 @@ internal class OnlineMessageSourceToStrangerImpl( object Serializer : MessageSourceSerializerImpl("OnlineMessageSourceToStranger") + override val isOriginalMessageInitialized: Boolean + get() = true override val bot: Bot get() = sender override val ids: IntArray @@ -149,6 +154,9 @@ internal class OnlineMessageSourceToTempImpl( object Serializer : MessageSourceSerializerImpl("OnlineMessageSourceToTemp") + override val isOriginalMessageInitialized: Boolean + get() = true + override val bot: Bot get() = sender override val ids: IntArray @@ -175,6 +183,9 @@ internal class OnlineMessageSourceToGroupImpl( ) : OnlineMessageSource.Outgoing.ToGroup(), MessageSourceInternal, OutgoingMessageSourceInternal { object Serializer : MessageSourceSerializerImpl("OnlineMessageSourceToGroup") + override val isOriginalMessageInitialized: Boolean + get() = true + override val ids: IntArray get() = sequenceIds override val bot: Bot