请教一个自定义子命令别名的问题
-
在
CompositeCommand
中, 主指令可以在使用object
类型的成员变量作为别名, 而子命令的别名是使用注解的参数的形式传入的, 那怎么自定义子命令的名称呢?object ConfigCommand: CompositeCommand( SetuPlugin, primaryName = "/Setu-Config", secondaryNames = CommandConfig.config ) { @SubCommand(value = CommandConfig.configGet) //error suspend fun CommandSender.get() { } }
如上是我的代码片段,
CommandConfig
为object
类型并继承了AutoSavePluginConfig
.CommandConfig.config
和CommandConfig.configGet
均为有默认值的字符串数组 -
@SubCommand("function_1_name") @Description("xxxxx") public void simg(CommandSenderOnMessage sender) throws IOException{}
java
这么写是正确的啊,原来kotlin
不能用的吗?在SubCommand
里传入的名称将代替原方法名,作为命令注册。 -
@orisland 如果注解的值是字面量肯定没问题,就是想把一个成员变量放进去,这样就能在配置文件里面修改子命令的名称,不用重新编译一遍_(:з」∠)_
-
@popjdh 是不是和生命周期与加载顺序有关,配置文件的读取的代码行和命令注册写反了导致命令注册的时候该配置文件仍未加载(空)
(你倒是给堆栈异常的信息啊)。 -
jvm注解值本来只能给常量,建议寻找java相关的书籍阅读
-
@karlatemp 这个我已经了解了,那有没有别的方法给子命令设置别名,类似
secondaryNames = CommandConfig.config
这样的 -
目前没有
-
@orisland 如果在注解值里面用成员变量, 会提示
Error: An annotation argument must be a compile-time constant
, 我以前没怎么用过注解的值, 不知道这个只能用常量(. 不过也没其他方法给子命令设置别名了.
如果用SimpleCommand
, 然后用一个参数表示子命令倒也能达到效果. 不过我另一个帖子有提到那个命令默认给了所有人权限, 不知道怎么取消这个, 默认给所有人权限的话就没法用权限系统了. -
你想要的功能对应这个issue把,还是待开发状态
https://github.com/mamoe/mirai-console/issues/352 -
@hundun000 这样的,那就等后续更新了_(:з」∠)_