过滤时间和自定义事件
-
这些过滤啥的看了好久,怎么具体的监听自定义事件,可以控制他们的暂停和继续,有没有大佬给出来例子
-
/** * 正常来说 监听一个事件(Event) 比如群消息事件(GroupMessageEvent) 监听的时间必须继承Event接口 * 写法如下 */ val listener: Listener<GroupMessageEvent> = GlobalEventChannel.subscribeAlways<GroupMessageEvent> { TODO("doSomething") } /** * 取消监听 */ listener.cancel() /** * 或者以subscribe()方法进行监听 * 返回 ListeningStatus.LISTENING 代表继续监听 * 返回 ListeningStatus.STOPPED 代表结束监听 */ GlobalEventChannel.subscribe<GroupMessageEvent> { if (message.isNotEmpty()) { // TODO("doSomething") ListeningStatus.LISTENING } else { ListeningStatus.STOPPED } } /** * 只监听一次事件 */ GlobalEventChannel.subscribeOnce<GroupMessageEvent> { TODO("doSomething") } /** * 如果是自定义事件 可以通过下面的写法进行广播 */ class CustomBroadcastEvent(val broadcastMessage: String): AbstractEvent(), BroadcastControllable // 先创建自定义事件的监听器 GlobalEventChannel.subscribeAlways<CustomBroadcastEvent> { // 打印 println(broadcastMessage) } // new 一个自定义事件 然后进行广播 suspend { CustomBroadcastEvent("hello").broadcast() } /** * 通过过滤监听某些符合条件的事件 */ GlobalEventChannel // 指定要过滤的事件为 群消息事件 .filterIsInstance<GroupMessageEvent>() // 具体过滤策略 .filter { // 例如 只监听某个群里某个人的消息 it.group.id == 987654321L && it.sender.id == 123456789L } .filter { // 过滤时间 也可以用 && 写在上面 // 只监听中午12点后的消息 Calendar.getInstance().apply { timeInMillis = (it.time * 1000).toLong() }.get(Calendar.HOUR_OF_DAY) >= 12 } // 下面订阅监听的操作同上 .subscribeAlways<GroupMessageEvent> { TODO("doSomething") }
大概就是这样吧 另外没有暂停监听 如果不想要监听了就直接取消监听 需要的时候在创建就好了 或者 搞个布尔值来控制 True监听 false不监听
-
@舔狗___ 我研究研究,多谢指点