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 P.nextMessage( timeoutMillis: Long = -1, + priority: Listener.EventPriority = Listener.EventPriority.MONITOR, noinline filter: suspend P.(P) -> Boolean = { true } ): MessageChain { - return syncFromEvent(timeoutMillis) { + return syncFromEvent(timeoutMillis, priority) { takeIf { this.isContextIdenticalWith(this@nextMessage) }?.takeIf { filter(it, it) } }.message } @@ -68,10 +70,11 @@ suspend inline fun P.nextMessage( @JvmSynthetic suspend inline fun 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(timeoutMillis) { + return syncFromEventOrNull(timeoutMillis, priority) { takeIf { this.isContextIdenticalWith(this@nextMessageOrNull) }?.takeIf { filter(it, it) } }?.message } @@ -83,10 +86,11 @@ suspend inline fun P.nextMessageOrNull( inline fun P.nextMessageAsync( timeoutMillis: Long = -1, coroutineContext: CoroutineContext = EmptyCoroutineContext, + priority: Listener.EventPriority = Listener.EventPriority.MONITOR, noinline filter: suspend P.(P) -> Boolean = { true } ): Deferred { return this.bot.async(coroutineContext) { - nextMessage(timeoutMillis, filter) + nextMessage(timeoutMillis, priority, filter) } } @@ -99,11 +103,12 @@ inline fun P.nextMessageAsync( inline fun P.nextMessageOrNullAsync( timeoutMillis: Long, coroutineContext: CoroutineContext = EmptyCoroutineContext, + priority: Listener.EventPriority = Listener.EventPriority.MONITOR, noinline filter: suspend P.(P) -> Boolean = { true } ): Deferred { require(timeoutMillis > 0) { "timeoutMillis must be > 0" } return this.bot.async(coroutineContext) { - nextMessageOrNull(timeoutMillis, filter) + nextMessageOrNull(timeoutMillis, priority, filter) } }