子指令如何实现多段别名以及其他相关问题

我有一段测试代码

ctx.command("test.sub").action(async ({ session }) => {
    return "subcommand";
  });

我给 test 起别名 测试sub 起别名 子指令
我的想法是通过 测试 子指令 触发子指令 action
单独的 子指令 不触发任何效果

我进行了如下设置


然后结果如下

该如何实现我的想法呢?

以上是本贴的主要问题,其他问题还有:

  1. 当我有几十个子指令时,如何快速给每个子指令起别名?如果每个用户都要逐个设置的话,会不会因为插件配置太繁琐而放弃使用该插件?

    (我的指令命名加上了我的插件名为前缀,还有多级指令,比较长,真正使用时可能需要用户自己起别名才比较方便使用

    我的做法是

    function commandName(command: string) {
      return `${name}.${command}`;
    }
    

    其中 name 为 export 的插件名

    用例 ctx.command(commandName("checkout <content:text>"))

  2. 指令别名无法编辑,想改动只能删除再新建。

3 个赞
ctx.command('foo').alias('fooo')
  .subcommand('bar').alias('.baar')
foo bar // ok
fooo bar // ok
foo baar // ok
fooo baar // ok

这里注意一个点:子指令的 alias 写 .baar 或者 foo.baar 都可以,但是不能写 baar(不然视为单独的指令),也不能写 fooo.baar(仅匹配本名)。

知道了如何通过代码添加子指令,对应的控制台配置方法类似,只有一种可行做法,就是 {父指令本名}.{子指令别名}

空格的调用是基于子指令的,你配置带点的格式自然支持空格调用,但是反过来不行。

4 个赞

改动了一些配置之后我的指令别名不知道为什么被清空了,又得全部一个个手动配置 :cry:

1 个赞

现在控制台alias有bug,基本处于不可用状态。webui#306

1 个赞