|
@@ -11,9 +11,11 @@ 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.message.DeepMessageRefiner.refineDeep
|
|
|
|
|
|
|
+import net.mamoe.mirai.internal.network.protocol.data.proto.MsgTransmit
|
|
|
import net.mamoe.mirai.message.data.*
|
|
import net.mamoe.mirai.message.data.*
|
|
|
|
|
+import net.mamoe.mirai.utils.cast
|
|
|
import net.mamoe.mirai.utils.safeCast
|
|
import net.mamoe.mirai.utils.safeCast
|
|
|
|
|
|
|
|
// internal runtime value, not serializable
|
|
// internal runtime value, not serializable
|
|
@@ -34,7 +36,11 @@ internal data class LongMessageInternal internal constructor(override val conten
|
|
|
|
|
|
|
|
// internal runtime value, not serializable
|
|
// internal runtime value, not serializable
|
|
|
@Suppress("RegExpRedundantEscape", "UnnecessaryVariable")
|
|
@Suppress("RegExpRedundantEscape", "UnnecessaryVariable")
|
|
|
-internal data class ForwardMessageInternal(override val content: String, val resId: String) : AbstractServiceMessage(),
|
|
|
|
|
|
|
+internal data class ForwardMessageInternal(
|
|
|
|
|
+ override val content: String,
|
|
|
|
|
+ val resId: String?,
|
|
|
|
|
+ val fileName: String?,
|
|
|
|
|
+) : AbstractServiceMessage(),
|
|
|
RefinableMessage {
|
|
RefinableMessage {
|
|
|
override val serviceId: Int get() = 35
|
|
override val serviceId: Int get() = 35
|
|
|
|
|
|
|
@@ -60,6 +66,23 @@ internal data class ForwardMessageInternal(override val content: String, val res
|
|
|
val preview = titles
|
|
val preview = titles
|
|
|
val source = xmlFoot.findField("name")
|
|
val source = xmlFoot.findField("name")
|
|
|
|
|
|
|
|
|
|
+ if (fileName != null) { // nested
|
|
|
|
|
+ val transmits = refineContext.getNotNull(MsgTransmits)[fileName]
|
|
|
|
|
+ ?: return SimpleServiceMessage(serviceId, content) // Refine failed
|
|
|
|
|
+ return MessageOrigin(
|
|
|
|
|
+ SimpleServiceMessage(serviceId, content),
|
|
|
|
|
+ null, // Nested don't have resource id
|
|
|
|
|
+ MessageOriginKind.FORWARD
|
|
|
|
|
+ ) + ForwardMessage(
|
|
|
|
|
+ preview = preview,
|
|
|
|
|
+ title = title,
|
|
|
|
|
+ brief = brief,
|
|
|
|
|
+ source = source,
|
|
|
|
|
+ summary = summary.trim(),
|
|
|
|
|
+ nodeList = Mirai.cast<MiraiImpl>().run { transmits.toForwardMessageNodes(bot, refineContext) }
|
|
|
|
|
+ )
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
return MessageOrigin(
|
|
return MessageOrigin(
|
|
|
SimpleServiceMessage(serviceId, content),
|
|
SimpleServiceMessage(serviceId, content),
|
|
|
resId,
|
|
resId,
|
|
@@ -70,7 +93,7 @@ internal data class ForwardMessageInternal(override val content: String, val res
|
|
|
brief = brief,
|
|
brief = brief,
|
|
|
source = source,
|
|
source = source,
|
|
|
summary = summary.trim(),
|
|
summary = summary.trim(),
|
|
|
- nodeList = Mirai.downloadForwardMessage(bot, resId)
|
|
|
|
|
|
|
+ nodeList = Mirai.downloadForwardMessage(bot, resId!!)
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -87,6 +110,8 @@ internal data class ForwardMessageInternal(override val content: String, val res
|
|
|
return substringAfter("$type=\"", "")
|
|
return substringAfter("$type=\"", "")
|
|
|
.substringBefore("\"", "")
|
|
.substringBefore("\"", "")
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ val MsgTransmits = RefineContextKey<Map<String, MsgTransmit.PbMultiMsgNew>>("MsgTransmit")
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|