Fix MessageSource.originalMessage: now offline sources does not have MessageSource in their originalMessage

This commit is contained in:
Him188 2021-01-10 03:44:58 +08:00
parent b65afd8533
commit ad6e951be8
3 changed files with 28 additions and 18 deletions

View File

@ -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,7 +324,8 @@ internal fun List<MsgComm.Msg>.toMessageChain(
}
}
return buildMessageChain(elements.size + 1 + ptts.size) {
if (onlineSource) {
when (onlineSource) {
true -> {
checkNotNull(bot) { "bot is null" }
when (messageSourceKind) {
@ -333,9 +334,14 @@ internal fun List<MsgComm.Msg>.toMessageChain(
MessageSourceKind.FRIEND -> +OnlineMessageSourceFromFriendImpl(bot, this@toMessageChain)
MessageSourceKind.STRANGER -> +OnlineMessageSourceFromStrangerImpl(bot, this@toMessageChain)
}
} else {
}
false -> {
+OfflineMessageSourceImplData(bot, this@toMessageChain, botId)
}
null -> {
}
}
elements.joinToMessageChain(groupIdOrZero, messageSourceKind, botId, this)
addAll(ptts)
}.cleanupRubbishMessageElements()
@ -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()
}

View File

@ -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 {

View File

@ -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 },