ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 消息参数截取 >[success] 核心`v1.14.0`追加 >[warning] 核心`v1.15.1`之前存在如果结尾不是`{{...}}`则匹配会报错的问题。核心`v1.15.1`修复。 有些时候,可能你想要从消息中提取出来一段指定的内容,但是却总感觉截取字符串很麻烦。这时候,或许消息参数截取能够帮到你。 当你的`@Filter`注解的`keywordMatchType`参数是与**正则相关**的类型(例如`REGEX`或`FIND`),那么你便可以使用消息参数提取功能。 ## **语法** 消息参数提取需要遵循一定的规则,其规则为:**`{{name,[,regex]}}`**,即被双大括号`{{}}`包裹的键值对。其中,name代表了提取出来的值的名称,regex代表这个值的匹配规则。当不存在regex的时候,匹配规则默认为`.+` 举几个例子: - **@Filter("我今年{{age,\\d+}}岁了")** age是变量名,此变量的匹配规则为`\d+`, 而在匹配的时候,对应的匹配正则为:`我今年(\\d+)岁了` - **@Filter("我是{{name}}")** name是变量名,此变量的匹配规则为默认的`.+`, 而在匹配的时候,对应的匹配正则为:`我是(.+)` ## **使用** 知道了语法,那么如何使用呢?先举个例子: ```java @Beans public class Test{ /** 监听正则为 'number is (\\d+)'的消息,并提取\\d+为number参数 */ @Listen(MsgGetTypes.privateMsg) @Filter("number is {{number,\\d+}}") public void test1(PrivateMsg msg, MsgSender sender, @FilterValue("number") Long number){ sender.SENDER.sendPrivateMsg(msg, "您的号码为:" + number); } // ... } ``` 从上面的代码示例可以看到,在方法参数栏中通过`@FilterValue(...)`注解标注指定的变量,并填入你想要获取的对应变量名,即可将提取到的值作为变量使用了。 ## **@FilterValue** `@FilterValue(...)`注解可以标注在方法参数上,以指定提取变量赋值给对应的方法参数,此注解只有一个参数`value`,即代表提取的变量名。其中,方法参数的数据类型可以自动进行简单的类型转化,例如转为数字类型。转化通过`hutool`工具完成。