mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-04 15:40:13 +08:00
Fix MessageSource.originalMessage: now offline sources does not have MessageSource in their originalMessage
This commit is contained in:
parent
b65afd8533
commit
ad6e951be8
@ -306,7 +306,7 @@ internal fun List<MsgComm.Msg>.toMessageChain(
|
||||
bot: Bot?,
|
||||
botId: Long,
|
||||
groupIdOrZero: Long,
|
||||
onlineSource: Boolean,
|
||||
onlineSource: Boolean?,
|
||||
messageSourceKind: MessageSourceKind
|
||||
): MessageChain {
|
||||
val elements = this.flatMap { it.msgBody.richText.elems }
|
||||
@ -324,17 +324,23 @@ internal fun List<MsgComm.Msg>.toMessageChain(
|
||||
}
|
||||
}
|
||||
return buildMessageChain(elements.size + 1 + ptts.size) {
|
||||
if (onlineSource) {
|
||||
checkNotNull(bot) { "bot is null" }
|
||||
when (onlineSource) {
|
||||
true -> {
|
||||
checkNotNull(bot) { "bot is null" }
|
||||
|
||||
when (messageSourceKind) {
|
||||
MessageSourceKind.TEMP -> +OnlineMessageSourceFromTempImpl(bot, this@toMessageChain)
|
||||
MessageSourceKind.GROUP -> +OnlineMessageSourceFromGroupImpl(bot, this@toMessageChain)
|
||||
MessageSourceKind.FRIEND -> +OnlineMessageSourceFromFriendImpl(bot, this@toMessageChain)
|
||||
MessageSourceKind.STRANGER -> +OnlineMessageSourceFromStrangerImpl(bot, this@toMessageChain)
|
||||
}
|
||||
}
|
||||
false -> {
|
||||
+OfflineMessageSourceImplData(bot, this@toMessageChain, botId)
|
||||
}
|
||||
null -> {
|
||||
|
||||
when (messageSourceKind) {
|
||||
MessageSourceKind.TEMP -> +OnlineMessageSourceFromTempImpl(bot, this@toMessageChain)
|
||||
MessageSourceKind.GROUP -> +OnlineMessageSourceFromGroupImpl(bot, this@toMessageChain)
|
||||
MessageSourceKind.FRIEND -> +OnlineMessageSourceFromFriendImpl(bot, this@toMessageChain)
|
||||
MessageSourceKind.STRANGER -> +OnlineMessageSourceFromStrangerImpl(bot, this@toMessageChain)
|
||||
}
|
||||
} else {
|
||||
+OfflineMessageSourceImplData(bot, this@toMessageChain, botId)
|
||||
}
|
||||
elements.joinToMessageChain(groupIdOrZero, messageSourceKind, botId, this)
|
||||
addAll(ptts)
|
||||
@ -352,12 +358,13 @@ internal fun ImMsgBody.SourceMsg.toMessageChain(
|
||||
if (elements.isEmpty())
|
||||
error("elements for SourceMsg is empty")
|
||||
return buildMessageChain(elements.size + 1) {
|
||||
/*
|
||||
+OfflineMessageSourceImplData(
|
||||
delegate = this@toMessageChain,
|
||||
botId = botId,
|
||||
messageSourceKind = messageSourceKind,
|
||||
groupIdOrZero = groupIdOrZero
|
||||
)
|
||||
)*/
|
||||
elements.joinToMessageChain(groupIdOrZero, messageSourceKind, botId, this)
|
||||
}.cleanupRubbishMessageElements()
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ internal class OnlineMessageSourceFromFriendImpl(
|
||||
bot,
|
||||
bot.id,
|
||||
0,
|
||||
false,
|
||||
null,
|
||||
MessageSourceKind.FRIEND
|
||||
)
|
||||
}
|
||||
@ -121,7 +121,7 @@ internal class OnlineMessageSourceFromStrangerImpl(
|
||||
bot,
|
||||
bot.id,
|
||||
0,
|
||||
false,
|
||||
null,
|
||||
MessageSourceKind.STRANGER
|
||||
)
|
||||
}
|
||||
@ -185,7 +185,7 @@ internal class OnlineMessageSourceFromTempImpl(
|
||||
bot,
|
||||
bot.id,
|
||||
groupIdOrZero = 0,
|
||||
onlineSource = false,
|
||||
onlineSource = null,
|
||||
MessageSourceKind.TEMP
|
||||
)
|
||||
}
|
||||
@ -212,7 +212,7 @@ internal data class OnlineMessageSourceFromGroupImpl(
|
||||
override val ids: IntArray get() = sequenceIds
|
||||
override val time: Int get() = msg.first().msgHead.msgTime
|
||||
override val originalMessage: MessageChain by lazy {
|
||||
msg.toMessageChain(bot, bot.id, groupIdOrZero = group.id, onlineSource = false, MessageSourceKind.GROUP)
|
||||
msg.toMessageChain(bot, bot.id, groupIdOrZero = group.id, onlineSource = null, MessageSourceKind.GROUP)
|
||||
}
|
||||
|
||||
override val sender: Member by lazy {
|
||||
|
@ -75,13 +75,17 @@ internal class OfflineMessageSourceImplData(
|
||||
|
||||
other as OfflineMessageSourceImplData
|
||||
|
||||
val originElems = originElems
|
||||
if (originElems != null) {
|
||||
if (originElems == other.originElems) return true
|
||||
}
|
||||
|
||||
if (kind != other.kind) return false
|
||||
if (!ids.contentEquals(other.ids)) return false
|
||||
if (botId != other.botId) return false
|
||||
if (time != other.time) return false
|
||||
if (fromId != other.fromId) return false
|
||||
if (targetId != other.targetId) return false
|
||||
// TODO: 2021-01-09: 解决 QuoteReply 的 MessageSource 因为 originalMessage 造成的死循环
|
||||
if (originalMessage != other.originalMessage) return false
|
||||
if (!internalIds.contentEquals(other.internalIds)) return false
|
||||
|
||||
@ -95,7 +99,6 @@ internal class OfflineMessageSourceImplData(
|
||||
result = 31 * result + time
|
||||
result = 31 * result + fromId.hashCode()
|
||||
result = 31 * result + targetId.hashCode()
|
||||
// TODO: 2021-01-09: 解决 QuoteReply 的 MessageSource 因为 originalMessage 造成的死循环
|
||||
result = 31 * result + originalMessage.hashCode()
|
||||
result = 31 * result + internalIds.contentHashCode()
|
||||
return result
|
||||
@ -131,7 +134,7 @@ internal fun OfflineMessageSourceImplData(
|
||||
null,
|
||||
botId,
|
||||
groupIdOrZero = head.groupInfo?.groupCode ?: 0,
|
||||
onlineSource = false,
|
||||
onlineSource = null,
|
||||
messageSourceKind = kind
|
||||
),
|
||||
ids = delegate.mapToIntArray { it.msgHead.msgSeq },
|
||||
|
Loading…
Reference in New Issue
Block a user