mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-12 02:20:28 +08:00
Add fast-paths
This commit is contained in:
parent
49e34f8302
commit
ca0d0969b9
@ -334,7 +334,7 @@ internal fun MsgComm.Msg.toMessageChain(): MessageChain {
|
||||
return buildMessageChain(elements.size + 1) {
|
||||
+MessageSourceFromMsg(delegate = this@toMessageChain)
|
||||
elements.joinToMessageChain(this)
|
||||
}.removeAtAfterQuoteReply().asMessageChain()
|
||||
}.removeAtIfHasQuoteReply()
|
||||
}
|
||||
|
||||
// These two functions are not identical, dont combine.
|
||||
@ -345,23 +345,23 @@ internal fun ImMsgBody.SourceMsg.toMessageChain(): MessageChain {
|
||||
return buildMessageChain(elements.size + 1) {
|
||||
+MessageSourceFromServer(delegate = this@toMessageChain)
|
||||
elements.joinToMessageChain(this)
|
||||
}.removeAtAfterQuoteReply().asMessageChain()
|
||||
}.removeAtIfHasQuoteReply()
|
||||
}
|
||||
|
||||
private fun MessageChain.removeAtAfterQuoteReply(): List<Message> {
|
||||
var last: Message? = null
|
||||
return this.filter { message: Message ->
|
||||
if (message is At) { // 筛除因 QuoteReply 导致的多余的 At
|
||||
if (last != null || last !is QuoteReply) {
|
||||
return@filter true
|
||||
private fun MessageChain.removeAtIfHasQuoteReply(): MessageChain =
|
||||
this
|
||||
/*
|
||||
if (this.any<QuoteReply>()) {
|
||||
var removed = false
|
||||
this.filter {
|
||||
if (it is At && !removed) {
|
||||
false
|
||||
} else {
|
||||
removed = true
|
||||
true
|
||||
}
|
||||
} else if (message is MessageContent) {
|
||||
return@filter true
|
||||
}
|
||||
last = message
|
||||
return@filter false
|
||||
}
|
||||
}
|
||||
}.asMessageChain()
|
||||
} else this*/
|
||||
|
||||
@UseExperimental(MiraiInternalAPI::class, ExperimentalUnsignedTypes::class, MiraiDebugAPI::class, LowLevelAPI::class)
|
||||
internal fun List<ImMsgBody.Elem>.joinToMessageChain(message: MessageChainBuilder) {
|
||||
|
@ -229,6 +229,8 @@ fun Collection<Message>.asMessageChain(): MessageChain = MessageChainImplBySeque
|
||||
@JvmSynthetic
|
||||
fun Iterable<SingleMessage>.asMessageChain(): MessageChain = MessageChainImplByIterable(this)
|
||||
|
||||
inline fun MessageChain.asMessageChain(): MessageChain = this // 避免套娃
|
||||
|
||||
/**
|
||||
* 将 [this] [扁平化后][flatten] 委托为一个 [MessageChain]
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user