Skip to content

Order 指令

命令式指令。将指令分为「指令头」和「指令参数」两个部分,其中「指令头」用于区分不同的指令,「指令参数」用于进行功能的实现。通常用于最普遍的触发-响应场景。

text
Q: #bind 114514191
A: 绑定成功!

指令属性

Order 指令拥有三个独有属性,它的定义如下:

ts
type OrderConfig = CommandCfg & {
    type: Order["type"];
    headers: string[];
    regexps: string[] | string[][];
};

type

  • 类型: "order"

必填项,固定值 order,用于标记这是一个 Order 类型指令。

headers

必填项。表示该指令的所有指令头。

需要注意的是,所有的指令头的前面都会被添加上指令起始符 , 如果你不希望某一个指令头被自动追加指令起始符,请在该指令头前放添加双下划线 __

ts
const helpCmd = {
    // ...
    headers: [
        "__菜单"
    ]
}

regexps

必填项,表示该指令的所有正则匹配。该字段的值允许为一维或二维字符串数组,它们的含义分别是:

  • 一维数组时,表示一个正则表达式。数组由「正则匹配单元」组成,如 [ "(add|rem)", "\\d+" ], 在生成最终的正则表达式时,该指令头和该数组的所有元素被拼接起来,如 /#example *(add|rem) *\d+/
  • 二维数组时,表示若干个正则表达式。数组由上一点提到的一维数组组成。

入口函数

Order 指令的入口函数定义方式为:

ts
import { defineDirective } from "@/modules/command/main";

export default defineDirective( "order", i => {
  // 入口函数内容
} );

下面对参数 i 中与其他指令行为有所不同的属性做出说明:

matchResult

其类型如下:

ts
interface OrderMatchResult {
    type: "order";
    header: string;
    match: string[];
}

匹配到的指令头,如当用户输入 #info 行秋 时,此处 header#info

match

匹配到的参数结果,与指令定义的正则(regexps)中参数的位置一一对应,当用户未输入指令的某个可选参数时,该参数所在的数组位置的值为 空字符串""。给出以下示例:

ts
const information: OrderConfig = {
    type: "order",
    headers: [ "info" ],
    regexps: [ "[\\w\\u4e00-\\u9fa5]+", "(-skill)?" ],
    // ...
};

当用户输入 #info 行秋#info 行秋 -skill 时,matchResult.match 的值分别为如下结果:

yaml
# 用户输入:#info 行秋
- [ "行秋", "" ]
# 用户输入:#info 行秋 -skill
- [ "行秋", "-skill" ]

示例

下面是一个完整的 Order 指令示例:

ts
/* 指令配置 */
const qa: OrderConfig = {
  type: "order",
  cmdKey: "silvery-star.echo",
  desc: ["复读", "[任意内容]"],
  headers: ["echo"],
  main: "achieves/echo",
  regexps: [".+"],
  detail: "触发案例:#echo 今天是一个当复读机的好日子"
};

/* achieves/echo.ts */
import { defineDirective } from "@/modules/command/main";

export default defineDirective( "order", async i => {
    await i.sendMessage( i.messageData.raw_message );
} );

Released under the MIT License.