指令 (Command)
TIP
指令系统是 Koishi 的核心功能之一。通过 ctx.command()
方法获得的是指令的实例,它含有下面的方法:
Argv 对象
Argv 对象会作为 cmd.action()
, cmd.userFields()
等方法的回调函数中的第一个参数。它具有以下的属性:
- args:
any[]
参数列表 - options:
{}
选项列表 - next:
Next
中间件的 next 回调函数 - session:
Session
所在的会话对象
实例方法
cmd.option(name, desc?, config?)
- name:
string
选项的名字 - desc:
string
选项的描述 - config:
OptionConfig
- 返回值:
this
为指令添加一个选项。
ts
type DomainType = string | RegExp | ((source: string) => any)
cmd.removeOption(name)
- name:
string
指令的名称 - 返回值:
this
删除一个选项。注意:如果你为一个选项注册了多个别名,则删除任何一个别名都相当于删除整个选项。
cmd.usage(text)
- text:
string
使用方法说明 - 返回值:
this
为指令添加使用方法。多次调用此方法只会保留最后一次的定义。
cmd.example(example)
- example:
text
使用示例 - 返回值:
this
为指令添加使用示例。多次调用此方法会一并保留并显示在帮助的最后面。
cmd.action(action, prepend?)
- action:
CommandAction
执行函数 - prepend:
boolean
是否前置 - 返回值:
this
为指令添加执行函数。
ts
type Awaitable<T> = [T] extends [Promise<unknown>] ? T : T | Promise<T>
type CommandAction = (argv: Argv, ...args: any[]) => Awaitable<string | void>
cmd.before(action, append?)
- action:
CommandAction
执行函数 - append:
boolean
是否后置 - 返回值:
this
为指令添加检测函数。
cmd.userFields(fields)
- fields:
FieldCollector<UserField>
要请求的用户字段 - 返回值:
this
如果指令需要用到用户数据,你可以提前声明,这样有助于合并多次请求,从而提高性能。 参见按需加载章节。
ts
type FieldCollector<K extends string> =
| Iterable<K>
| ((argv: Argv, fields: Set<K>) => void)
cmd.channelFields(fields)
- fields:
FieldCollector<ChannelField>
要请求的频道字段 - 返回值:
this
如果指令需要用到频道数据,你可以提前声明,这样有助于合并多次请求,从而提高性能。 参见按需加载章节。
cmd.alias(name, config?)
- name:
string
要设置的别名 - config:
Command.Alias
- config.args:
any[]
要带的参数列表,将与传入的参数合并 - config.options:
Dict
要带的选项列表,将与传入的选项合并
- config.args:
- 返回值:
this
设置指令别名。
cmd.subcommand(name, desc?, config?)
- name:
string
指令名以及可能的参数 - desc:
string
指令的描述 - config:
Command.Config
指令的配置 - 返回值:
Command
注册或修改的指令
注册或修改子指令。子指令会继承当期指令的上下文。参见 子指令 和 注册子指令 章节。
cmd.parse(input)
- input:
Argv
令牌化的输入,通常是Argv.parse()
的返回值 - 返回值:
Argv
解析结果,包含了args
和options
等属性
解析一段指令调用文本。
cmd.execute(argv, next?)
- argv:
Argv
执行配置- argv.args:
any[]
指令的参数列表 - argv.options:
Record<string, any>
指令的选项 - argv.session:
Session
当前的会话对象
- argv.args:
- next:
Next
所处的中间件的next
回调函数 - 返回值:
Promise<string>
执行函数的返回结果,可用于指令插值
执行当前指令。
cmd.dispose()
- 返回值:
void
移除当前指令及其所有子指令。