# @Filter
>[info] `@Filter`是消息过滤注解,将此注解放在一个监听函数上,可以按照规定的规则对消息进行过滤。
> 提供`byName`注解:`@Filter.byName(...)`
<br>
以下是此注解的**参数**:
```java
//对接收到的消息进行过滤的关键词或正则表达式,默认为空
String[] value() default {};
//关键词过滤规则,默认为使用正则匹配
KeywordMatchType keywordMatchType() default KeywordMatchType.TRIM_REGEX;
//当有多个关键词的时候,多个关键词如何匹配,默认为仅需任意匹配即可
MostType mostType() default MostType.ANY_MATCH;
// 是否要当在本机(机器人的QQ)被at的时候才接收,默认为false,即不需要at
// 注意!当你使用at=true的时候,value值(即匹配值)所匹配的消息中依旧包含at信息。
// 以酷Q平台为例,当你的bot被at的时候,你所接收到的消息为:"[CQ:at,qq=123456789] hi!"
// 此时,如果你的@Filter是"@Filter(value = "hi!", at=true)",那么你的监听函数将不会被触发。正确写法应当是:
// ① @Filter(value = "[CQ:at,qq=\\d+] *hi!", keywordMatchType = KeywordMatchType.TRIM_REGEX)
// ② @Filter(value = "hi!", keywordMatchType = KeywordMatchType.RE_CQCODE_TRIM_REGEX)
boolean at() default false;
```
>[info] 从 `v1.2.4-BETA`版本后增加以下参数:
```java
/**
* 如果监听类型可以过滤QQ号,则对qq号进行过滤
* 如果是不存在QQ号的消息类型,则此参数将会失效。
* 如果为空数组则为全部匹配
* */
String[] code() default {};
/**
* 与{@link #mostType()} 功能类似,当{@link #code()}存在多个code的时候,判断其匹配规则。
* 默认为任意存在即可
*/
MostType mostCodeType() default MostType.ANY_MATCH;
/**
* 如果监听类型可以过滤群号,则对群号进行过滤
* 如果是不存在群号的消息类型,则此参数将会失效
* 如果为空数组则为全部匹配
*/
String[] group() default {};
/**
* 与{@link #mostType()} 功能类似,当{@link #group()}存在多个group的时候,判断其匹配规则。
* 默认为任意匹配即可。
*/
MostType mostGroupType() default MostType.ANY_MATCH
```
>[info] 从`1.8.0`开始增加以下参数:
```java
//**************** 以下为1.8.0添加 ****************//
/**
* 自定义过滤器的名称列表
* @return 使用的自定义过滤器列表
*/
String[] diyFilter() default {};
/**
* 当存在多个匹配规则的时候,则使用此参数来判断多个结果如果进行匹配。
* 默认为“只要有一个过滤器通过即可”
* @return 多个匹配规则的匹配规则
*/
MostDIYType mostDIYType() default MostDIYType.ANY_MATCH;
```
其中,`KeywordMatchType`和`MostType`为枚举类型,详情请查看`枚举`相关章节。
使用举例:
```java
/**
* 这是一个监听私信消息的监听函数。
* 这个监听函数只会接收消息前后去除空格后内容为'me'的消息
*/
@Listen(MsgGetTypes.privateMsg)
@Filter(value = "me", keywordMatchType = KeywordMatchType.TRIM_REGEX)
public boolean listen1(PrivateMsg privateMsg, MsgSender sender)
```
>[success] 从框架目前的机制来看,每一个监听函数都拥有一个单独的实例对象,您也可以通过这种方式来保证多个监听函数共享同一个实例类对象。
> **`1.0-BETA`版本之后,实例类型取决于依赖注入机制**
- 前言
- 简单介绍
- 我该如何阅读文档
- 视频教程
- 安装与使用
- 开源协议
- 免责&捐助
- 注意事项
- 版本命名规则简介
- 主要功能版本历史
- 功能指引
- 通用API与功能
- 国际化语言
- 异常
- 消息监听
- @Listen
- @OnListen模板
- @Filter
- 消息参数截取
- @Spare
- @Constr
- @Ignore
- @ListenBreak
- @ListenBreakPlugin
- @ListenBody
- 监听响应
- 成功判定与返回值
- 监听上下文
- 动态参数
- 监听消息API
- 异步监听 @Async
- 限流监听 @Limit
- 自定义Http送信器
- 枚举与类型
- 送信器
- SENDER
- SETTER
- GETTER
- 返回值
- 其他位置
- 日志与日志拦截
- 异常处理
- 依赖注入
- 自定义依赖获取
- 批量依赖载入
- 注意事项
- 常量
- 定时任务
- 自定义过滤
- 拦截器
- 拦截器总定义
- 上下文对象总定义
- 监听消息拦截
- 送信器拦截
- 监听函数拦截
- CAT码
- CQ码
- CQCode
- CQ码工具类
- CQ扩展工具类
- AppendList拼接链
- 高级内容
- 阻断机制
- 截断机制
- 自定义枚举类型
- 枚举工厂
- byName注解
- 自定义注解
- 配置
- 文件配置
- 注解配置
- 参数配置
- 多配置
- 多账号
- 自定义账号管理器
- 小心!
- 核心版本与组件如何升级核心
- 核心版本迭代指南
- 核心
- 更新日志
- jar包与依赖
- 监听消息类结构图
- 快速启动
- 模组与扩展
- 模组开发
- 现有模组
- 通用模组-延时任务
- 通用模组-CQ码工具
- 转义器
- CQ码操作工具类
- CQ码模板-CodeTemplate
- CQ码载体-KQCode
- CQ码构建器
- MQ码工具类
- 通用模组-redis-bot管理器
- 通用模组-Debugger
- Debugger-common模块
- Debugger-server模块
- Debugger-client模块
- 通用模组-钉钉机器人
- 组件-Mirai(JVM)
- 快速开始(1.13+)
- springboot-starter
- 注意事项
- 配置
- 额外的内容
- 快速回复
- 额外监听
- CQ码解析
- 组件-酷Q(QQ)-CQ HTTP API(基本失效)
- 快速开始(推荐)
- 快速开始(1.7.x以下,不推荐)
- 快速开始(Springboot启动器)
- 启动器、启动接口与配置类
- 配置
- 文件配置
- 注意事项
- 更新日志
- 额外的内容
- 自定义额外监听
- CQ送信器
- 元事件
- 监听消息类结构图
- 组件-酷Q(QQ)-JCQ(失效)
- 快速开始
- 更新日志
- 额外的内容
- JCQ日志
- 配置
- 注意事项
- 监听消息类结构图
- 组件-酷Q(QQ)-HTTP TO CQ(失效)
- 快速开始(核心1.7.x及以下)
- 启动器、启动接口与配置类
- 配置
- 文件配置
- 注意事项
- 更新日志
- 监听消息类结构图
- 组件-酷Q(QQ)-LEMOC (失效)
- 快速开始(核心1.7.x及以下)
- 配置
- 注意事项
- 更新日志
- 监听消息类结构图
- Springboot快速启动器
- 常见问题汇总
- BUG反馈
- 更新计划总览