EventChannel
事件通道.
事件通道是监听事件的入口, 但不负责广播事件. 要广播事件, 使用 Event.broadcast 或 IMirai.broadcastEvent.
获取事件通道
EventChannel 不可自行构造, 只能通过 GlobalEventChannel, BotEvent, 或基于一个通道的过滤等操作获得.
全局事件通道
GlobalEventChannel 是单例对象, 表示全局事件通道, 可以获取到在其中广播的所有事件.
BotEvent 事件通道
若只需要监听某个 Bot 的事件, 可通过 Bot.eventChannel 获取到这样的 EventChannel.
通道操作
对通道的操作
过滤通道: 通过 EventChannel.filter. 例如
filter { it is BotEvent }
得到一个只能监听到 BotEvent 的事件通道.转换为 Kotlin 协程 Channel: EventChannel.forwardToChannel
添加 CoroutineContext: context, parentJob, parentScope, exceptionHandler
创建事件监听
EventChannel.subscribe 创建带条件的一个事件监听器.
EventChannel.subscribeAlways 创建一个总是监听事件的事件监听器.
EventChannel.subscribeOnce 创建一个只监听单次的事件监听器.
监听器生命周期
阅读 EventChannel.subscribe 以获取监听器生命周期相关信息.
与 kotlinx-coroutines 交互
mirai EventChannel 设计比 kotlinx-coroutines 的 Flow 稳定版更早. EventChannel 的功能与 Flow 类似, 不过 EventChannel 在 subscribe (类似 Flow.collect) 时有优先级判定, 也允许拦截.
通过 Flow 接收事件
使用 EventChannel.asFlow 获得 Flow, 然后可使用 Flow.collect 等操作.
转发事件到 SendChannel
使用 EventChannel.forwardToChannel 可将事件转发到指定 SendChannel.
Inheritors
Constructors
Functions
创建事件监听并将监听结果发送在 Channel. 将返回值 关闭Channel.close 时将会同时关闭事件监听.
创建一个新的 EventChannel, 该 EventChannel 包含 this.coroutineContext
和添加的 coroutineContexts. coroutineContexts 会覆盖 defaultCoroutineContext 中的重复元素.
创建一个新的 EventChannel, 该 EventChannel 包含 this.coroutineContext
和添加的 coroutineExceptionHandler
创建一个新的 EventChannel, 该 EventChannel 包含 this.coroutineContext 和添加的 coroutineExceptionHandler
EventChannel.filter 的 Java 版本.
添加一个过滤器. 过滤器将在收到任何事件之后, 传递给通过 EventChannel.subscribe 注册的监听器之前调用.
过滤事件的类型. 返回一个只包含 E 类型事件的 EventChannel
指定协程父 Job. 之后在此 EventChannel 下创建的事件监听器都会成为 job 的子任务, 当 job 被取消时, 所有的事件监听器都会被取消.
将 coroutineScope 作为这个 EventChannel 的父作用域.
注册 ListenerHost 中的所有 EventHandler 标注的方法到这个 EventChannel. 查看 EventHandler.
创建一个事件监听器, 监听事件通道中所有 E 及其子类事件.
Java API. 查看 subscribe 获取更多信息.
与 subscribe 的区别是接受 eventClass 参数, 而不使用 reified
泛型. 通常推荐使用具体化类型参数.
支持 Kotlin 带接收者的挂起函数的函数引用的监听方式.
支持 Kotlin 带接收者的函数的函数引用的监听方式.
支持 Kotlin 挂起函数的函数引用的监听方式.
Java API. 查看 subscribeAlways 获取更多信息.
支持 Kotlin 带接收者的挂起函数的函数引用的监听方式.
支持 Kotlin 带接收者的函数的函数引用的监听方式.
支持 Kotlin 挂起函数的函数引用的监听方式.
通过 DSL 订阅来自所有 Bot 的所有好友消息事件. DSL 语法查看 subscribeMessages.
通过 DSL 订阅来自所有 Bot 的所有群会话消息事件. DSL 语法查看 subscribeMessages.
通过 DSL 订阅来自所有 Bot 的所有 GroupTempMessageEvent. DSL 语法查看 subscribeMessages.
通过 DSL 订阅来自所有 Bot 的所有联系人的消息事件.
Java API. 查看 subscribeOnce 获取更多信息.
通过 DSL 订阅来自所有 Bot 的所有 OtherClient 消息事件. DSL 语法查看 subscribeMessages.
通过 DSL 订阅来自所有 Bot 的所有 Stranger 消息事件. DSL 语法查看 subscribeMessages.
通过 DSL 订阅来自所有 Bot 的所 User 消息事件. DSL 语法查看 subscribeMessages.
挂起当前协程, 监听事件 E, 并尝试从这个事件中获取一个值, 在超时时抛出 TimeoutCancellationException
Properties
此事件通道的默认 CoroutineScope.coroutineContext. 将会被添加给所有注册的事件监听器.