/**
* 正常来说 监听一个事件(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不监听