@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("复读模式结束")
timeoutMillis
- 超时. 单位为毫秒. -1
为不限制
See Also