mirai-core / net.mamoe.mirai.event / whileSelectMessages

whileSelectMessages

@SinceMirai("0.29.0") suspend inline fun <reified T : ContactMessage> T.whileSelectMessages(timeoutMillis: Long = -1, filterContext: Boolean = true, crossinline selectBuilder: MessageSelectBuilder<T, Boolean>.() -> Unit): Unit

挂起当前协程, 等待任意一个事件监听器返回 false 后返回.

创建的所有事件监听器都会判断发送人信息 (isContextIdenticalWith), 监听之后的所有消息.

selectBuilder DSL 类似于 subscribeMessages 的 DSL, 屏蔽了一些 reply DSL 以确保类型安全

reply("开启复读模式")

whileSelectMessages {
    "stop" {
        reply("已关闭复读")
        false // 停止循环
    }
    // 也可以使用 startsWith("") { true } 等 DSL
    default {
        reply(message)
        true // 继续循环
    }
    timeout(3000) {
        // on
        true
    }
} // 等待直到 `false`

reply("复读模式结束")

Parameters

timeoutMillis - 超时. 单位为毫秒. -1 为不限制

See Also

subscribe

subscribeMessages

nextMessage