diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt index 7057fe3ee..1fdc66593 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt @@ -324,7 +324,7 @@ class MessageSubscribersBuilder>( content { sub in it } /** - * 如果消息内容包含 [sub] + * 如果消息内容包含 [sub] 中的任意一个元素 */ @MessageDsl inline fun contains( @@ -345,6 +345,72 @@ class MessageSubscribersBuilder>( } } + /** + * 如果消息内容包含 [sub] + */ + @MessageDsl + fun containsAny(vararg sub: String): ListeningFilter = + content { sub.any { item -> item in it } } + + /** + * 如果消息内容包含 [sub] 中的任意一个元素 + */ + @MessageDsl + inline fun containsAny( + vararg sub: String, + ignoreCase: Boolean = false, + trim: Boolean = true, + crossinline onEvent: MessageListener + ): Listener { + return if (trim) { + val list = sub.map { it.trim() } + content({ + list.any { toCheck -> it.contains(toCheck, ignoreCase = ignoreCase) } + }, { + onEvent(this, this.message.toString().trim()) + }) + } else { + content({ + sub.any { toCheck -> it.contains(toCheck, ignoreCase = ignoreCase) } + }, { + onEvent(this, this.message.toString()) + }) + } + } + + /** + * 如果消息内容包含 [sub] + */ + @MessageDsl + fun containsAll(vararg sub: String): ListeningFilter = + content { sub.all { item -> item in it } } + + /** + * 如果消息内容包含 [sub] 中的任意一个元素 + */ + @MessageDsl + inline fun containsAll( + vararg sub: String, + ignoreCase: Boolean = false, + trim: Boolean = true, + crossinline onEvent: MessageListener + ): Listener { + return if (trim) { + val list = sub.map { it.trim() } + content({ + list.all { toCheck -> it.contains(toCheck, ignoreCase = ignoreCase) } + }, { + onEvent(this, this.message.toString().trim()) + }) + } else { + content({ + sub.all { toCheck -> it.contains(toCheck, ignoreCase = ignoreCase) } + }, { + onEvent(this, this.message.toString()) + }) + } + } + /** * 如果消息的前缀是 [prefix] */ @@ -538,7 +604,10 @@ class MessageSubscribersBuilder>( * 如果 [filter] 返回 `true` 就执行 `onEvent` */ @MessageDsl - inline fun content(crossinline filter: T.(String) -> Boolean, crossinline onEvent: MessageListener): Listener = + inline fun content( + crossinline filter: T.(String) -> Boolean, + crossinline onEvent: MessageListener + ): Listener = subscriber { if (filter(this, it)) onEvent(this, it) }