Interceptor

annotation class Interceptor(val value: String = "", val type: KClass<out AnnotatedEventListenerInterceptor> = AnnotatedEventListenerInterceptor::class, val priority: Int = PriorityConstant.NORMAL)

配合 Listener 使用,为一个监听函数指定一个或多个注解型监听函数拦截器.

Interceptor 中使用的拦截器类型为 AnnotatedEventListenerInterceptor, 而不是普通的 love.forte.simbot.event.EventListenerInterceptor, 需要注意。

专属拦截器的整体优先级低于全局拦截器。有关流程拦截器监听函数拦截器专属监听函数拦截器监听函数过滤器监听器 之间的整体流程顺序大致如下:

        + -------- +
| 流程拦截器 | EventProcessingInterceptor
+ ---+---- +
|
+ -----+----- +
| 监听函数拦截器 | EventListenerInterceptor
+ -----+----- +
|
+ -------+-------- +
| 注解型监听函数拦截器 | AnnotatedEventListenerInterceptor (当前:beforeFilter: true)
+ -------+-------- +
|
+------+----- +
| 监听函数过滤器 | EventFilter
+------+----- +
|
+ -------+-------- +
| 注解型监听函数拦截器 | AnnotatedEventListenerInterceptor (当前:beforeFilter: false)
+ -------+-------- +

+ --+-- +
| 监听器 | EventListener
+ ----- +

Interceptor 是可重复的。当使用的时候,目标函数上需要标记 Listener

@Interceptor(...)
@Interceptor(...)
@Listener
suspend fun GroupEvent.myListener() { ... }

See also

Properties

Link copied to clipboard

此拦截器在所有标记的注解拦截器中的优先级。

Link copied to clipboard

通过 类型 获取所需拦截器。 对于类型的获取,流程如下:

Link copied to clipboard

通过 唯一标识 获取所需拦截器。这个唯一标识一般为注入到bean容器中的唯一标识名称, 你需要保证此 value 对应的元素值的类型即为 AnnotatedEventListenerInterceptor 类型实现类。 当使用 value 的时候(value 不为空字符串时),type的值将会被忽略。