使用 subcommand 函数注册的子指令该如何添加 action

  ctx
    .command("test")
    .action(async ({ session, options }, content) => {
      session.send("command test");
    })
    .subcommand("inner1")
    .action(async ({ session, options }, content) => {
      session.send("subcommand inner1");
    });

我尝试这样添加 action 但是无效
image

然后我又尝试了

  ctx.command("test.inner1").action(async ({ session, options }, content) => {
    session.send("test.inner1");
  });

才可以正常运行。

那么 subcommand 该如何使用呢?

2 个赞
ctx
    .command("test")
    .action(async ({ session, options }, content) => {
      session.send("command test");
    })

ctx
    .command("test")
    .subcommand("inner1")
    .action(async ({ session, options }, content) => {
      session.send("subcommand inner1");
    });

改成这样也是可以的:

ctx.command("test/innet1")
5 个赞

我知道这样可以,我也写出来了。

我想知道的是 subcommand 该如何使用?

3 个赞

我已经在上面写了

3 个赞

我的失误。我是 sb。

3 个赞

这样写的话有点麻烦,不清楚 subcommand 的意义何在,直接连起来一起写比较方便

3 个赞

In fact, what OP wrote above is not wrong, but register the Hierarchical subcommand. I think you may want to register a derivative subcommand. In that case, you just add a single dot . before the subcommand name in the invocation of the subcommand function.

3 个赞

不太明白这是什么意思。

我又测试了一下

test inner1 触发了 test 的 action,inner1 是 content

test.inner1.inner1 均不触发任何指令

inner1 触发 inner1 的 action

看起来 subcommand 的作用和直接 comman 的作用差不多。


ctx
    .command("test")
    .subcommand("inner1")
    .action(async ({ session, options }, content) => {
      session.send("subcommand inner1");
    });
ctx.command("test.inner1").action(async ({ session, options }, content) => {
    session.send("subcommand inner1");
  });

这两种写法还是有点区别的。前者的效果是

且使用 test.inner1 无响应

后者的效果是

感觉有点混乱。

最佳实践应该是怎样的?

2 个赞

Read this section first:

3 个赞

谢谢,常看常新。

2 个赞

我们建议,如果一个指令有子指令,那么它不应该有 action。

(你非要写也没问题,能运行,但是平台兼容性会有下降)

4 个赞