# @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`版本之后,实例类型取决于依赖注入机制**