MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接

    请教一个自定义子命令别名的问题

    开发交流
    4
    10
    682
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • P
      popjdh 最后由 编辑

      在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均为有默认值的字符串数组

      1 条回复 最后回复 回复 引用 0
      • Orisland
        Orisland 摸鱼 最后由 Orisland 编辑

         @SubCommand("function_1_name")
         @Description("xxxxx")
            public void simg(CommandSenderOnMessage sender) throws IOException{}
        

        java这么写是正确的啊,原来kotlin不能用的吗?在SubCommand里传入的名称将代替原方法名,作为命令注册。

        P 1 条回复 最后回复 回复 引用 0
        • P
          popjdh @Orisland 最后由 编辑

          @orisland 如果注解的值是字面量肯定没问题,就是想把一个成员变量放进去,这样就能在配置文件里面修改子命令的名称,不用重新编译一遍_(:з」∠)_

          Orisland 1 条回复 最后回复 回复 引用 0
          • Orisland
            Orisland 摸鱼 @popjdh 最后由 编辑

            @popjdh 是不是和生命周期与加载顺序有关,配置文件的读取的代码行和命令注册写反了导致命令注册的时候该配置文件仍未加载(空)
            (你倒是给堆栈异常的信息啊)。

            P 1 条回复 最后回复 回复 引用 0
            • Karlatemp
              Karlatemp 最后由 编辑

              jvm注解值本来只能给常量,建议寻找java相关的书籍阅读

              P 1 条回复 最后回复 回复 引用 0
              • P
                popjdh @Karlatemp 最后由 编辑

                @karlatemp 这个我已经了解了,那有没有别的方法给子命令设置别名,类似secondaryNames = CommandConfig.config这样的

                1 条回复 最后回复 回复 引用 0
                • Karlatemp
                  Karlatemp 最后由 编辑

                  目前没有

                  1 条回复 最后回复 回复 引用 0
                  • P
                    popjdh @Orisland 最后由 编辑

                    @orisland 如果在注解值里面用成员变量, 会提示Error: An annotation argument must be a compile-time constant, 我以前没怎么用过注解的值, 不知道这个只能用常量(. 不过也没其他方法给子命令设置别名了.
                    如果用SimpleCommand, 然后用一个参数表示子命令倒也能达到效果. 不过我另一个帖子有提到那个命令默认给了所有人权限, 不知道怎么取消这个, 默认给所有人权限的话就没法用权限系统了.

                    1 条回复 最后回复 回复 引用 1
                    • H
                      hundun000 ⭐2021⭐ 最后由 编辑

                      你想要的功能对应这个issue把,还是待开发状态
                      https://github.com/mamoe/mirai-console/issues/352

                      Him188 created this issue in mamoe/mirai-console

                      open 为 CompositeCommand.SubCommand 增加 secondaryNames #1813

                      P 1 条回复 最后回复 回复 引用 1
                      • P
                        popjdh @hundun000 最后由 编辑

                        @hundun000 这样的,那就等后续更新了_(:з」∠)_

                        1 条回复 最后回复 回复 引用 0
                        • 1 / 1
                        • First post
                          Last post
                        Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact