From f95482989d7a27cfe62004276601f616ccb55cf8 Mon Sep 17 00:00:00 2001 From: Karlatemp Date: Sat, 31 Jul 2021 19:17:48 +0800 Subject: [PATCH] Fix message rendering error with not-head QuoteReply; fix #1451 --- .../kotlin/message/messageToElems.kt | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/mirai-core/src/commonMain/kotlin/message/messageToElems.kt b/mirai-core/src/commonMain/kotlin/message/messageToElems.kt index 3f186a185..b46cdfd46 100644 --- a/mirai-core/src/commonMain/kotlin/message/messageToElems.kt +++ b/mirai-core/src/commonMain/kotlin/message/messageToElems.kt @@ -40,13 +40,6 @@ internal fun MessageChain.toRichTextElems( val forGroup = messageTarget is Group val elements = ArrayList(this.size) - if (this.anyIsInstance()) { - when (val source = this[QuoteReply]!!.source) { - is MessageSourceInternal -> elements.add(ImMsgBody.Elem(srcMsg = source.toJceData())) - else -> error("unsupported MessageSource implementation: ${source::class.simpleName}. Don't implement your own MessageSource.") - } - } - var longTextResId: String? = null fun transformOneMessage(currentMessage: Message) { @@ -189,19 +182,7 @@ internal fun MessageChain.toRichTextElems( ImMsgBody.Elem(face = currentMessage.toJceData()) } ) - is QuoteReply -> { - if (forGroup) { - when (val source = currentMessage.source) { - is OnlineMessageSource.Incoming.FromGroup -> { - val sender0 = source.sender - if (sender0 !is AnonymousMember) - transformOneMessage(At(sender0)) - // transformOneMessage(PlainText(" ")) - // removed by https://github.com/mamoe/mirai/issues/524 - // 发送 QuoteReply 消息时无可避免的产生多余空格 #524 - } - } - } + is QuoteReply -> { // transformed } is Dice -> transformOneMessage(MarketFaceImpl(currentMessage.toJceStruct())) is MarketFace -> { @@ -255,6 +236,26 @@ internal fun MessageChain.toRichTextElems( } } } + + if (this.anyIsInstance()) { + when (val source = this[QuoteReply]!!.source) { + is MessageSourceInternal -> { + elements.add(ImMsgBody.Elem(srcMsg = source.toJceData())) + if (forGroup) { + if (source is OnlineMessageSource.Incoming.FromGroup) { + val sender0 = source.sender + if (sender0 !is AnonymousMember) + transformOneMessage(At(sender0)) + // transformOneMessage(PlainText(" ")) + // removed by https://github.com/mamoe/mirai/issues/524 + // 发送 QuoteReply 消息时无可避免的产生多余空格 #524 + } + } + } + else -> error("unsupported MessageSource implementation: ${source::class.simpleName}. Don't implement your own MessageSource.") + } + } + this.forEach(::transformOneMessage) if (withGeneralFlags) {