MessageSelectBuilder

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

selectMessages 时的 DSL 构建器.

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

See also

Functions

always
Link copied to clipboard
open override fun always(onEvent: MessageListener<M, Any?>): Nothing

无触发条件, 每次收到消息都执行 onEvent

at
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

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

消息内容包含目标为 BotAt

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

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

case
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>)
contains
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 中的任意一个元素

containsAll
Link copied to clipboard
fun containsAll(vararg sub: String, ignoreCase: Boolean = false, trim: Boolean = true): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>
containsAny
Link copied to clipboard
fun containsAny(vararg sub: String, ignoreCase: Boolean = false, trim: Boolean = true): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>
containsReply
Link copied to clipboard
open infix override fun String.containsReply(reply: String): Nothing

消息内容包含 this 则回复 reply

open infix override fun String.containsReply(replier: suspend M.(String) -> Any?): Nothing

消息内容包含 this 则执行 replier 并将其返回值回复给发信对象.

content
Link copied to clipboard
fun content(filter: M.(String) -> Boolean): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>

如果 filter 返回 true

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

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

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

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

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

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

endsWith
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

endsWithReply
Link copied to clipboard
open infix override fun String.endsWithReply(replier: suspend M.(String) -> Any?): Nothing

不考虑空格, 消息内容this 结尾则执行 replier 并将其返回值回复给发信对象.

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

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

infix fun Regex.finding(block: suspend M.(MatchResult) -> R)

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

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

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

findingReply
Link copied to clipboard
open infix override fun Regex.findingReply(replier: suspend M.(MatchResult) -> Any?): Nothing

消息内容可由正则表达式查找(Regex.find), 则执行 replier 并将其返回值回复给发信对象.

has
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)
invoke
Link copied to clipboard
fun MessageSelectionTimeoutChecker.invoke(block: suspend () -> R)

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

operator fun String.invoke(block: MessageListener<M, R>)
invoke00
Link copied to clipboard
fun MessageSelectionTimeoutChecker.invoke00(block: suspend () -> R)
invoke000
Link copied to clipboard
fun MessageSelectionTimeoutChecker.invoke000(block: suspend () -> R): <ERROR CLASS>?
mapping
Link copied to clipboard
open override fun <N : Any> mapping(mapper: M.(String) -> N?, onEvent: suspend M.(N) -> R): Nothing

如果 mapper 返回值非空, 就执行 onEvent

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

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

infix fun Regex.matching(block: MessageListener<M, R>)
fun matching(regex: Regex, onEvent: suspend M.(MatchResult) -> Unit)

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

matchingReply
Link copied to clipboard
open infix override fun Regex.matchingReply(replier: suspend M.(MatchResult) -> Any?): Nothing

消息内容可由正则表达式匹配(Regex.matchEntire), 则执行 replier 并将其返回值回复给发信对象.

newListeningFilter
Link copied to clipboard
open fun newListeningFilter(filter: M.(String) -> Boolean): MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>
quoteReply
Link copied to clipboard
open infix override fun MessageSelectionTimeoutChecker.quoteReply(message: String): Nothing
open infix override fun MessageSelectionTimeoutChecker.quoteReply(message: Message): Nothing

open infix override fun MessageSelectionTimeoutChecker.quoteReply(block: suspend () -> Any?): Nothing

在超时后引用回复原消息

open infix override fun MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>.quoteReply(toReply: String): Nothing
open infix override fun MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>.quoteReply(toReply: Message): Nothing

启动监听器, 在 Bot 未被禁言且消息满足条件 this 时引用回复原消息

open infix override fun MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>.quoteReply(replier: suspend M.(String) -> Any?): Nothing

启动监听器, 在 Bot 未被禁言且消息满足条件 this 时执行 replier 并以其返回值回复原消息 返回值 Unit 将被忽略, Message 将被直接回复, 其他内容将会 Any.toString 后发送

quoteReply00
Link copied to clipboard
infix fun MessageSelectionTimeoutChecker.quoteReply00(message: String)
infix fun MessageSelectionTimeoutChecker.quoteReply00(block: suspend () -> Any?)
infix fun MessageSelectionTimeoutChecker.quoteReply00(message: Message)
quoteReply000
Link copied to clipboard
infix fun MessageSelectionTimeoutChecker.quoteReply000(message: String): <ERROR CLASS>?
infix fun MessageSelectionTimeoutChecker.quoteReply000(block: suspend () -> Any?): <ERROR CLASS>?
infix fun MessageSelectionTimeoutChecker.quoteReply000(message: Message): <ERROR CLASS>?
reply
Link copied to clipboard
open infix override fun String.reply(reply: String): Nothing
open infix override fun String.reply(reply: Message): Nothing

当发送的消息内容为 this 就回复 reply

open infix override fun String.reply(replier: suspend M.(String) -> Any?): Nothing

当发送的消息内容为 this 就执行并回复 replier 的返回值

open infix override fun MessageSelectionTimeoutChecker.reply(message: String): Nothing
open infix override fun MessageSelectionTimeoutChecker.reply(message: Message): Nothing

open infix override fun MessageSelectionTimeoutChecker.reply(block: suspend () -> Any?): Nothing

在超时后回复原消息

open infix override fun MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>.reply(toReply: String): Nothing
open infix override fun MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>.reply(message: Message): Nothing

启动监听器, 在 Bot 未被禁言且消息满足条件 this 时回复原消息

open infix override fun MessageSubscribersBuilder.ListeningFilter<M, Unit, R, Any?>.reply(replier: suspend M.(String) -> Any?): Nothing

启动监听器, 在 Bot 未被禁言且消息满足条件 this 时执行 replier 并以其返回值回复. 返回值 Unit 将被忽略, Message 将被直接回复, 其他内容将会 Any.toString 后发送.

reply00
Link copied to clipboard
infix fun MessageSelectionTimeoutChecker.reply00(message: String)
infix fun MessageSelectionTimeoutChecker.reply00(block: suspend () -> Any?)
infix fun MessageSelectionTimeoutChecker.reply00(message: Message)
reply000
Link copied to clipboard
infix fun MessageSelectionTimeoutChecker.reply000(message: String): <ERROR CLASS>?
infix fun MessageSelectionTimeoutChecker.reply000(block: suspend () -> Any?): <ERROR CLASS>?
infix fun MessageSelectionTimeoutChecker.reply000(message: Message): <ERROR CLASS>?
sentBy
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?>

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

sentByAdministrator
Link copied to clipboard

如果是管理员发的消息

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

如果是好友发来的消息

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

如果是群临时会话消息

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

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

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

如果是群主发的消息

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

如果是陌生人发来的消息

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

如果是群临时会话消息

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

如果是来自这个群的消息

startsWith
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

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

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

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

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

timeout00
Link copied to clipboard
fun timeout00(timeoutMillis: Long): MessageSelectionTimeoutChecker
timeoutException
Link copied to clipboard
fun timeoutException(timeoutMillis: Long, exception: () -> Throwable = { throw MessageSelectionTimeoutException() })

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

Properties

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

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