From 6e75f8dd348761398a5e69a8b0b90c3e2dc67f8d Mon Sep 17 00:00:00 2001 From: Him188 <Him188@mamoe.net> Date: Wed, 6 May 2020 12:55:31 +0800 Subject: [PATCH] Implement event priority for `nextMessage` --- .../kotlin/net.mamoe.mirai/message/utils.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/utils.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/utils.kt index 2ecf885a6..efd8ba683 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/utils.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/utils.kt @@ -15,6 +15,7 @@ package net.mamoe.mirai.message import kotlinx.coroutines.Deferred import kotlinx.coroutines.async +import net.mamoe.mirai.event.Listener import net.mamoe.mirai.event.syncFromEvent import net.mamoe.mirai.event.syncFromEventOrNull import net.mamoe.mirai.message.data.MessageChain @@ -47,9 +48,10 @@ fun MessageEvent.isContextIdenticalWith(another: MessageEvent): Boolean { @JvmSynthetic suspend inline fun <reified P : MessageEvent> P.nextMessage( timeoutMillis: Long = -1, + priority: Listener.EventPriority = Listener.EventPriority.MONITOR, noinline filter: suspend P.(P) -> Boolean = { true } ): MessageChain { - return syncFromEvent<P, P>(timeoutMillis) { + return syncFromEvent<P, P>(timeoutMillis, priority) { takeIf { this.isContextIdenticalWith(this@nextMessage) }?.takeIf { filter(it, it) } }.message } @@ -68,10 +70,11 @@ suspend inline fun <reified P : MessageEvent> P.nextMessage( @JvmSynthetic suspend inline fun <reified P : MessageEvent> P.nextMessageOrNull( timeoutMillis: Long, + priority: Listener.EventPriority = Listener.EventPriority.MONITOR, noinline filter: suspend P.(P) -> Boolean = { true } ): MessageChain? { require(timeoutMillis > 0) { "timeoutMillis must be > 0" } - return syncFromEventOrNull<P, P>(timeoutMillis) { + return syncFromEventOrNull<P, P>(timeoutMillis, priority) { takeIf { this.isContextIdenticalWith(this@nextMessageOrNull) }?.takeIf { filter(it, it) } }?.message } @@ -83,10 +86,11 @@ suspend inline fun <reified P : MessageEvent> P.nextMessageOrNull( inline fun <reified P : MessageEvent> P.nextMessageAsync( timeoutMillis: Long = -1, coroutineContext: CoroutineContext = EmptyCoroutineContext, + priority: Listener.EventPriority = Listener.EventPriority.MONITOR, noinline filter: suspend P.(P) -> Boolean = { true } ): Deferred<MessageChain> { return this.bot.async(coroutineContext) { - nextMessage(timeoutMillis, filter) + nextMessage(timeoutMillis, priority, filter) } } @@ -99,11 +103,12 @@ inline fun <reified P : MessageEvent> P.nextMessageAsync( inline fun <reified P : MessageEvent> P.nextMessageOrNullAsync( timeoutMillis: Long, coroutineContext: CoroutineContext = EmptyCoroutineContext, + priority: Listener.EventPriority = Listener.EventPriority.MONITOR, noinline filter: suspend P.(P) -> Boolean = { true } ): Deferred<MessageChain?> { require(timeoutMillis > 0) { "timeoutMillis must be > 0" } return this.bot.async(coroutineContext) { - nextMessageOrNull(timeoutMillis, filter) + nextMessageOrNull(timeoutMillis, priority, filter) } }