mirai icon indicating copy to clipboard operation
mirai copied to clipboard

无法在聊天环境忽略指令可选参数

Open Keyezi opened this issue 2 years ago • 3 comments

【样例】 假设有这么一个指令,第一个参数是自动识别成群类型(可选,且默认获取群),第二个参数为文本类型 suspend fun CommandSender.onCommand(group: Group? = getGroupOrNull() , text:String) /指令名 <群> <文本内容> 现在的情况下,mirai会自动将第一个参数识别为群类型,而且必须要填写第一个群的参数 例如:/atall 732700499 你好 如果不填写,则会提示”无法解析 你好 为整数“ image 【建议】 如果mirai的指令参数解析不能将第一个群参数识别为群(且第一个参数是可选的,有默认值),则把当前的参数交给下一个参数解析器识别,如果下一个解析器还是不能识别(且有默认值)就再交给下一个参数解析器识别,以此类推 当所有的解析器都不能识别,再进行报错。

写的有点急,有哪里不理解请指出,的我可以修改下

Keyezi avatar Jul 03 '22 00:07 Keyezi

目前无法解决,建议先将可选参数放到 后面, suspend fun CommandSender.onCommand(text: String, group: Group? = getGroupOrNull()) 这样子就可以忽略 group 了

cssxsh avatar Jul 03 '22 04:07 cssxsh

目前无法解决,建议先将可选参数放到 后面, suspend fun CommandSender.onCommand(text: String, group: Group? = getGroupOrNull()) 这样子就可以忽略 group 了

我知道这么弄可以,但是我有大量文本需要输入,这么搞的话指令做出来可读性可能会差很多 还是希望能完善一下这方面的功能

Keyezi avatar Jul 03 '22 07:07 Keyezi

如果mirai的指令参数解析不能将第一个群参数识别为群(且第一个参数是可选的,有默认值),则把当前的参数交给下一个参数解析器识别,如果下一个解析器还是不能识别(且有默认值)就再交给下一个参数解析器识别,以此类推

不如直接支持不同参数数量的重载,实现上可能会更清晰

AdoptOSS avatar Sep 17 '22 15:09 AdoptOSS