MessageSelectBuilder

abstract class MessageSelectBuilder<M : MessageEvent, R> : MessageSelectBuilderUnit<M, R>

selectMessages 时的 DSL 构建器.

它是特殊化的消息监听 (EventChannel.subscribeMessages) DSL, 屏蔽了一些 reply DSL 以确保作用域安全性

See also

Functions

Link copied to clipboard
fun at(target: Long): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>
fun at(target: User): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>

消息内容包含目标为 targetAt

Link copied to clipboard
fun atAll(): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>
Link copied to clipboard
fun atBot(): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>

消息内容包含目标为 BotAt

fun atBot(onEvent: suspend M.(String) -> R)

消息内容包含目标为 BotAt, 就执行 onEvent

Link copied to clipboard
fun case(    equals: String,     ignoreCase: Boolean = false,     trim: Boolean = true): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>
fun case(    equals: String,     ignoreCase: Boolean = false,     trim: Boolean = true,     onEvent: MessageListener<M, R>)
Link copied to clipboard
fun contains(sub: String, ignoreCase: Boolean = false): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>
fun contains(    sub: String,     ignoreCase: Boolean = false,     trim: Boolean = true,     onEvent: MessageListener<M, R>)

消息内容包含 sub 中的任意一个元素

Link copied to clipboard
fun containsAll(    vararg sub: String,     ignoreCase: Boolean = false,     trim: Boolean = true): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>
Link copied to clipboard
fun containsAny(    vararg sub: String,     ignoreCase: Boolean = false,     trim: Boolean = true): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>
Link copied to clipboard
fun content(filter: M.(String) -> Boolean): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>

如果 filter 返回 true

Link copied to clipboard
abstract fun default(onEvent: MessageListener<M, R>)

当其他条件都不满足时的默认处理.

Link copied to clipboard
fun defaultQuoteReply(block: suspend () -> Any?)

当其他条件都不满足时引用回复原消息.

Link copied to clipboard
fun defaultReply(block: suspend () -> Any?)

当其他条件都不满足时回复原消息.

Link copied to clipboard
fun endsWith(suffix: String, trim: Boolean = true): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>

如果消息的结尾是 suffix

fun endsWith(    suffix: String,     removeSuffix: Boolean = true,     trim: Boolean = true,     onEvent: suspend M.(String) -> R)

如果消息的结尾是 suffix

Link copied to clipboard
fun finding(regex: Regex): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>

消息内容可由正则表达式查找(Regex.find)

@JvmName(name = "findingExtension")
infix fun Regex.finding(block: suspend M.(MatchResult) -> R)

如果消息内容Regex.find 不为空

fun finding(regex: Regex, onEvent: suspend M.(MatchResult) -> Unit)

消息内容可由正则表达式查找(Regex.find), 就执行 onEvent

Link copied to clipboard
inline fun <N : SingleMessage> has(): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>

消息内容包含 N 类型的 Message

inline fun <N : SingleMessage> has(noinline onEvent: suspend M.(N) -> R)
Link copied to clipboard
fun MessageSelectionTimeoutChecker.invoke(block: suspend () -> R)

返回一个限制本次 select 的最长等待时间的 Deferred

operator fun String.invoke(block: MessageListener<M, R>)
Link copied to clipboard
fun matching(regex: Regex): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>

消息内容可由正则表达式匹配(Regex.matchEntire)

@JvmName(name = "matchingExtension")
infix fun Regex.matching(block: MessageListener<M, R>)
fun matching(regex: Regex, onEvent: suspend M.(MatchResult) -> Unit)

消息内容可由正则表达式匹配(Regex.matchEntire), 就执行 onEvent

Link copied to clipboard
open fun newListeningFilter(filter: M.(String) -> Boolean): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>
Link copied to clipboard
fun sentBy(qq: Long): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>
fun sentBy(friend: User): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>
fun sentBy(qq: Long, onEvent: MessageListener<M, R>)

如果是这个人发的消息. 消息可以是好友消息也可以是群消息

fun sentBy(name: String): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>

如果是这个人发的消息. 消息目前只会是群消息

Link copied to clipboard

如果是管理员发的消息

Link copied to clipboard
fun sentByFriend(): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>
fun sentByFriend(onEvent: MessageListener<FriendMessageEvent, R>)

如果是好友发来的消息

Link copied to clipboard
fun sentByGroupTemp(): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>

如果是群临时会话消息

Link copied to clipboard
fun sentByOperator(): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>

如果是管理员或群主发的消息

Link copied to clipboard
fun sentByOwner(): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>

如果是群主发的消息

Link copied to clipboard
fun sentByStranger(): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>
fun sentByStranger(onEvent: MessageListener<StrangerMessageEvent, R>)

如果是陌生人发来的消息

Link copied to clipboard
fun sentFrom(groupId: Long): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>
fun sentFrom(group: Group): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>

如果是来自这个群的消息

Link copied to clipboard
fun startsWith(prefix: String, trim: Boolean = true): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>

如果消息的前缀是 prefix

fun startsWith(    prefix: String,     removePrefix: Boolean = true,     trim: Boolean = true,     onEvent: suspend M.(String) -> R)

如果消息的前缀是 prefix

Link copied to clipboard
fun timeout(timeoutMillis: Long): MessageSelectionTimeoutChecker

返回一个限制本次 select 的最长等待时间的 Deferred

fun timeout(timeoutMillis: Long, block: suspend () -> R)

限制本次 select 的最长等待时间, 当超时后执行 block 以完成 select

Link copied to clipboard
fun timeoutException(timeoutMillis: Long, exception: () -> Throwable)

限制本次 select 的最长等待时间, 当超时后抛出 TimeoutCancellationException

Properties

Link copied to clipboard
val subscriber: (M.(String) -> Boolean, MessageListener<M, Any?>) -> Unit

invoke 这个 lambda 时, 它将会把 消息事件的处理器 注册给事件, 并返回注册完成返回的监听器.