Add MessageChain.foreachContent(lambda) and Message.hasContent()

This commit is contained in:
Him188 2020-02-19 19:56:00 +08:00
parent d108de672c
commit abe5db2023

View File

@ -38,6 +38,7 @@ import kotlin.reflect.KProperty
interface MessageChain : Message, MutableList<Message> { interface MessageChain : Message, MutableList<Message> {
// region Message override // region Message override
override operator fun contains(sub: String): Boolean override operator fun contains(sub: String): Boolean
override fun followedBy(tail: Message): MessageChain override fun followedBy(tail: Message): MessageChain
// endregion // endregion
@ -67,6 +68,36 @@ interface MessageChain : Message, MutableList<Message> {
} }
} }
/**
* 遍历每一个有内容的消息, [At], [AtAll], [PlainText], [Image], [Face], [XMLMessage]
*/
inline fun MessageChain.foreachContent(block: (Message) -> Unit) {
this.forEachIndexed { index: Int, message: Message ->
if (message is At) {
if (index == 0 || this[index - 1] !is QuoteReply) {
block(message)
}
} else if (message.hasContent()) {
block(message)
}
}
}
/**
* 判断这个 [Message] 是否含有内容, 即是否为 [At], [AtAll], [PlainText], [Image], [Face], [XMLMessage]
*/
fun Message.hasContent(): Boolean {
return when (this) {
is At,
is AtAll,
is PlainText,
is Image,
is Face,
is XMLMessage -> true
else -> false
}
}
/** /**
* 提供一个类型的值. 若不存在则会抛出异常 [NoSuchElementException] * 提供一个类型的值. 若不存在则会抛出异常 [NoSuchElementException]
*/ */