Fix ForwardMessage not rendering when message contains &

This commit is contained in:
Karlatemp 2021-08-02 23:16:27 +08:00
parent d8819bd615
commit 6079cbb6e0
No known key found for this signature in database
GPG Key ID: 21FBDDF664FF06F8

View File

@ -11,7 +11,6 @@ package net.mamoe.mirai.internal.message
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.Mirai import net.mamoe.mirai.Mirai
import net.mamoe.mirai.internal.MiraiImpl
import net.mamoe.mirai.internal.asQQAndroidBot import net.mamoe.mirai.internal.asQQAndroidBot
import net.mamoe.mirai.internal.getMiraiImpl import net.mamoe.mirai.internal.getMiraiImpl
import net.mamoe.mirai.internal.network.protocol.data.proto.MsgTransmit import net.mamoe.mirai.internal.network.protocol.data.proto.MsgTransmit
@ -158,6 +157,10 @@ internal fun RichMessage.Key.longMessage(brief: String, resId: String, timeSecon
} }
private fun String.xmlEnc():String {
return this.replace("&", "&")
}
internal fun RichMessage.Key.forwardMessage( internal fun RichMessage.Key.forwardMessage(
resId: String, resId: String,
timeSeconds: Long, timeSeconds: Long,
@ -165,29 +168,29 @@ internal fun RichMessage.Key.forwardMessage(
): ForwardMessageInternal = with(forwardMessage) { ): ForwardMessageInternal = with(forwardMessage) {
val template = """ val template = """
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<msg serviceID="35" templateID="1" action="viewMultiMsg" brief="${brief.take(30)}" <msg serviceID="35" templateID="1" action="viewMultiMsg" brief="${brief.take(30).xmlEnc()}"
m_resid="$resId" m_fileName="$timeSeconds" m_resid="$resId" m_fileName="$timeSeconds"
tSum="3" sourceMsgId="0" url="" flag="3" adverSign="0" multiMsgFlag="0"> tSum="3" sourceMsgId="0" url="" flag="3" adverSign="0" multiMsgFlag="0">
<item layout="1" advertiser_id="0" aid="0"> <item layout="1" advertiser_id="0" aid="0">
<title size="34" maxLines="2" lineSpace="12">${title.take(50)}</title> <title size="34" maxLines="2" lineSpace="12">${title.take(50).xmlEnc()}</title>
${ ${
when { when {
preview.size > 4 -> { preview.size > 4 -> {
preview.take(3).joinToString("") { preview.take(3).joinToString("") {
"""<title size="26" color="#777777" maxLines="2" lineSpace="12">$it</title>""" """<title size="26" color="#777777" maxLines="2" lineSpace="12">${it.xmlEnc()}</title>"""
} + """<title size="26" color="#777777" maxLines="2" lineSpace="12">...</title>""" } + """<title size="26" color="#777777" maxLines="2" lineSpace="12">...</title>"""
} }
else -> { else -> {
preview.joinToString("") { preview.joinToString("") {
"""<title size="26" color="#777777" maxLines="2" lineSpace="12">$it</title>""" """<title size="26" color="#777777" maxLines="2" lineSpace="12">${it.xmlEnc()}</title>"""
} }
} }
} }
} }
<hr hidden="false" style="0"/> <hr hidden="false" style="0"/>
<summary size="26" color="#777777">${summary.take(50)}</summary> <summary size="26" color="#777777">${summary.take(50).xmlEnc()}</summary>
</item> </item>
<source name="${source.take(50)}" icon="" action="" appid="-1"/> <source name="${source.take(50).xmlEnc()}" icon="" action="" appid="-1"/>
</msg> </msg>
""".trimIndent().replace("\n", " ").trim() """.trimIndent().replace("\n", " ").trim()
return ForwardMessageInternal(template, resId, null, forwardMessage) return ForwardMessageInternal(template, resId, null, forwardMessage)