UNPKG

@zhengxs/wechaty-plugin-assistant

Version:
97 lines (95 loc) 2.48 kB
import { default as minimist } from 'minimist'; import { Assistant, ConversationContext } from '../interfaces'; export interface OptionParams { alias?: string; type?: 'string' | 'boolean'; description?: string; } export declare class Option { name: string; alias?: string | undefined; type?: 'string' | 'boolean' | undefined; description: string | undefined; assistant: Assistant; constructor(name: string, opts?: OptionParams); toString(): string; } export interface CommandOptions { summary?: string | undefined; description?: string | undefined; required?: boolean; disabled?: boolean; raw?: boolean; default?: boolean; } export type ActionHandler = (ctx: ConversationContext, args: minimist.ParsedArgs & { raw: string[]; }) => Promise<unknown> | unknown; export declare class Command { #private; /** * 命令名称 */ name: string; /** * 是否需要输入项 */ required: boolean; /** * 是否禁用 */ disabled?: boolean; /** * 是否默认命令 */ default?: boolean; /** * 父级指令 */ parent?: Command; constructor(name: string, options?: CommandOptions); get commands(): Map<string, Command>; summary(): string | undefined; summary(summary: string): Command; usage(): string; addCommand(command: Command): this; /** * @param name - 命令名称 * @param options - 命令配置 */ add(cmd: Command): Command; add(name: string, options?: CommandOptions): Command; /** * @param name - 命令名称 * @param options - 命令配置 */ register(name: string, action: ActionHandler): Command; register(name: string, options: CommandOptions, action: ActionHandler): Command; /** * @param name - 参数名 * @param opts - 参数 */ option(name: string, opts?: OptionParams): this; /** * @param argv - 原始参数 * @returns 解析好的参数 */ protected parseArgs(argv: string[]): minimist.ParsedArgs & { raw: string[]; }; /** * @param handler - 处理函数 * @returns */ action(handler: ActionHandler): Promise<this>; /** * @param argv - 原始参数 * @param params - 回应参数 * @example * * ```sh * $ /mj --help * ``` */ parse(ctx: ConversationContext, argv: string[]): Promise<void> | void; }