discord.js-commando
Version:
The official command framework for Discord.js
501 lines (424 loc) • 19.9 kB
TypeScript
declare module 'discord.js-commando' {
import { Client, ClientEvents, ClientOptions, Collection, Guild, GuildResolvable, Message, MessageAttachment, MessageEditOptions, MessageEmbed, MessageOptions, MessageAdditions, MessageReaction, PermissionResolvable, PermissionString, StringResolvable, User, UserResolvable } from 'discord.js';
export class Argument {
private constructor(client: CommandoClient, info: ArgumentInfo);
private obtainInfinite(msg: CommandoMessage, vals?: string[], promptLimit?: number): Promise<ArgumentResult>;
private static validateInfo(client: CommandoClient, info: ArgumentInfo): void;
public default: ArgumentDefault;
public emptyChecker: Function;
public error: string;
public infinite: boolean;
public key: string;
public label: string;
public max: number;
public min: number;
public oneOf: string[];
public parser: Function;
public prompt: string;
public type: ArgumentType;
public validator: Function;
public wait: number;
public isEmpty(val: string, msg: CommandoMessage): boolean;
public obtain(msg: CommandoMessage, val?: string, promptLimit?: number): Promise<ArgumentResult>;
public parse(val: string, msg: CommandoMessage): any | Promise<any>;
public validate(val: string, msg: CommandoMessage): boolean | string | Promise<boolean | string>;
}
export class ArgumentCollector {
public constructor(client: CommandoClient, args: ArgumentInfo[], promptLimit?: number);
public args: Argument[];
public readonly client: CommandoClient;
public promptLimit: number;
public obtain(msg: CommandoMessage, provided?: any[], promptLimit?: number): Promise<ArgumentCollectorResult>;
}
export abstract class ArgumentType {
public constructor(client: CommandoClient, id: string);
public readonly client: CommandoClient;
public id: string;
public isEmpty(val: string, msg: CommandoMessage, arg: Argument): boolean;
public abstract parse(val: string, msg: CommandoMessage, arg: Argument): any | Promise<any>;
public abstract validate(val: string, msg: CommandoMessage, arg: Argument): boolean | string | Promise<boolean | string>;
}
export class ArgumentUnionType extends ArgumentType {
public types: ArgumentType[];
public parse(val: string, msg: CommandoMessage, arg: Argument): any | Promise<any>;
public validate(val: string, msg: CommandoMessage, arg: Argument): string | boolean | Promise<string | boolean>;
}
export abstract class Command {
public constructor(client: CommandoClient, info: CommandInfo);
private _globalEnabled: boolean;
private _throttles: Map<string, object>;
private throttle(userID: string): object;
private static validateInfo(client: CommandoClient, info: CommandInfo);
public aliases: string[];
public argsCollector: ArgumentCollector;
public argsCount: number;
public argsSingleQuotes: boolean;
public argsType: string;
public readonly client: CommandoClient;
public clientPermissions: PermissionResolvable[];
public defaultHandling: boolean;
public description: string;
public details: string;
public examples: string[];
public format: string;
public group: CommandGroup;
public groupID: string;
public guarded: boolean;
public guildOnly: boolean;
public hidden: boolean;
public memberName: string;
public name: string;
public nsfw: boolean;
public ownerOnly: boolean;
public patterns: RegExp[];
public throttling: ThrottlingOptions;
public unknown: boolean;
public userPermissions: PermissionResolvable[];
public hasPermission(message: CommandoMessage, ownerOverride?: boolean): boolean | string;
public isEnabledIn(guild: GuildResolvable, bypassGroup?: boolean): boolean;
public isUsable(message?: Message): boolean;
public onBlock(message: CommandoMessage, reason: string, data?: object): Promise<Message | Message[]>;
public onBlock(message: CommandoMessage, reason: 'guildOnly' | 'nsfw'): Promise<Message | Message[]>;
public onBlock(message: CommandoMessage, reason: 'permission', data: { response?: string }): Promise<Message | Message[]>;
public onBlock(message: CommandoMessage, reason: 'clientPermissions', data: { missing: PermissionString[] }): Promise<Message | Message[]>;
public onBlock(message: CommandoMessage, reason: 'throttling', data: { throttle: object, remaining: number }): Promise<Message | Message[]>;
public onError(err: Error, message: CommandoMessage, args: object | string | string[], fromPattern: false, result?: ArgumentCollectorResult): Promise<Message | Message[]>;
public onError(err: Error, message: CommandoMessage, args: string[], fromPattern: true, result?: ArgumentCollectorResult): Promise<Message | Message[]>;
public reload(): void;
public abstract run(message: CommandoMessage, args: object | string | string[], fromPattern: boolean, result?: ArgumentCollectorResult): Promise<Message | Message[] | null> | null;
public setEnabledIn(guild: GuildResolvable, enabled: boolean): void;
public unload(): void;
public usage(argString?: string, prefix?: string, user?: User): string;
public static usage(command: string, prefix?: string, user?: User): string;
}
export class CommandDispatcher {
public constructor(client: CommandoClient, registry: CommandoRegistry);
private _awaiting: Set<string>;
private _commandPatterns: object;
private _results: Map<string, CommandoMessage>;
private buildCommandPattern(prefix: string): RegExp;
private cacheCommandoMessage(message: Message, oldMessage: Message, cmdMsg: CommandoMessage, responses: Message | Message[]): void;
private handleMessage(message: Message, oldMessage?: Message): Promise<void>;
private inhibit(cmdMsg: CommandoMessage): Inhibition;
private matchDefault(message: Message, pattern: RegExp, commandNameIndex?: number, prefixless?: boolean): CommandoMessage;
private parseMessage(message: Message): CommandoMessage;
private shouldHandleMessage(message: Message, oldMessage?: Message): boolean;
public readonly client: CommandoClient;
public inhibitors: Set<Function>;
public registry: CommandoRegistry;
public addInhibitor(inhibitor: Inhibitor): boolean;
public removeInhibitor(inhibitor: Inhibitor): boolean;
}
export class CommandFormatError extends FriendlyError {
public constructor(msg: CommandoMessage);
}
export class CommandGroup {
public constructor(client: CommandoClient, id: string, name?: string, guarded?: boolean);
public readonly client: CommandoClient;
public commands: Collection<string, Command>
public guarded: boolean;
public id: string;
public name: string;
public isEnabledIn(guild: GuildResolvable): boolean;
public reload(): void;
public setEnabledIn(guild: GuildResolvable, enabled: boolean): void;
}
export class CommandoMessage extends Message {
public argString: string | null;
public command: Command | null;
public isCommand: boolean;
public patternMatches: string[] | null;
public responsePositions: { [key: string]: number } | null;
public responses: { [key: string]: CommandoMessage[] } | null;
public readonly guild: CommandoGuild;
private deleteRemainingResponses(): void;
private editCurrentResponse(id: string, options: MessageEditOptions | Exclude<MessageAdditions, MessageAttachment>): Promise<CommandoMessage | CommandoMessage[]>;
private editResponse(response: CommandoMessage | CommandoMessage[], options: RespondEditOptions): Promise<CommandoMessage | CommandoMessage[]>;
private finalize(responses: (CommandoMessage | CommandoMessage[])[]): void;
private respond(options: RespondOptions): Promise<CommandoMessage | CommandoMessage[]>;
public anyUsage(argString?: string, prefix?: string, user?: User): string;
public code: CommandoMessage['say'];
public direct: CommandoMessage['say'];
public embed(embed: MessageEmbed, content?: StringResolvable, options?: (MessageOptions & { split?: false }) | MessageAdditions): Promise<CommandoMessage>;
public embed(embed: MessageEmbed, content?: StringResolvable, options?: (MessageOptions & { split: true | Exclude<MessageOptions['split'], boolean> }) | MessageAdditions): Promise<CommandoMessage[]>;
public initCommand(command?: Command, argString?: string[], patternMatches?: string[]): this;
public parseArgs(): string | string[];
public replyEmbed: CommandoMessage['embed'];
public run(): Promise<null | CommandoMessage | CommandoMessage[]>;
public say(
content: StringResolvable | (MessageOptions & { split?: false }) | MessageAdditions,
options?: (MessageOptions & { split?: false }) | MessageAdditions
): Promise<CommandoMessage>;
public say(
content: StringResolvable | (MessageOptions & { split: true | Exclude<MessageOptions['split'], boolean> }) | MessageAdditions,
options?: (MessageOptions & { split: true | Exclude<MessageOptions['split'], boolean> }) | MessageAdditions
): Promise<CommandoMessage[]>;
public usage(argString?: string, prefix?: string, user?: User): string;
public static parseArgs(argString: string, argCount?: number, allowSingleQuote?: boolean): string[];
}
export class CommandoClient extends Client {
public constructor(options?: CommandoClientOptions);
private _commandPrefix: string;
public commandPrefix: string;
public dispatcher: CommandDispatcher;
public options: CommandoClientOptions;
public readonly owners: User[];
public provider: SettingProvider;
public registry: CommandoRegistry;
public settings: GuildSettingsHelper;
public isOwner(user: UserResolvable): boolean;
public setProvider(provider: SettingProvider | Promise<SettingProvider>): Promise<void>;
public on<K extends keyof CommandoClientEvents>(event: K, listener: (...args: CommandoClientEvents[K]) => void): this;
public once<K extends keyof CommandoClientEvents>(event: K, listener: (...args: CommandoClientEvents[K]) => void): this;
public emit<K extends keyof CommandoClientEvents>(event: K, ...args: CommandoClientEvents[K]): boolean;
}
export { CommandoClient as Client };
export class CommandoGuild extends Guild {
private _commandPrefix: string;
private _commandsEnabled: object;
private _groupsEnabled: object;
private _settings: GuildSettingsHelper;
public commandPrefix: string;
public readonly settings: GuildSettingsHelper;
public commandUsage(command?: string, user?: User): string;
public isCommandEnabled(command: CommandResolvable): boolean;
public isGroupEnabled(group: CommandGroupResolvable): boolean;
public setCommandEnabled(command: CommandResolvable, enabled: boolean): void;
public setGroupEnabled(group: CommandGroupResolvable, enabled: boolean): void;
}
export class CommandoRegistry {
public constructor(client?: CommandoClient);
public readonly client: CommandoClient;
public commands: Collection<string, Command>;
public commandsPath: string;
public groups: Collection<string, CommandGroup>;
public types: Collection<string, ArgumentType>;
public unknownCommand?: Command;
public findCommands(searchString?: string, exact?: boolean, message?: Message | CommandoMessage): Command[];
public findGroups(searchString?: string, exact?: boolean): CommandGroup[];
public registerCommand(command: Command | Function): CommandoRegistry;
public registerCommands(commands: Command[] | Function[], ignoreInvalid?: boolean): CommandoRegistry;
public registerCommandsIn(options: string | {}): CommandoRegistry;
public registerDefaultCommands(commands?: DefaultCommandsOptions): CommandoRegistry;
public registerDefaultGroups(): CommandoRegistry;
public registerDefaults(): CommandoRegistry;
public registerDefaultTypes(types?: DefaultTypesOptions): CommandoRegistry;
public registerGroup(group: CommandGroup | Function | { id: string, name?: string, guarded?: boolean } | string, name?: string, guarded?: boolean): CommandoRegistry;
public registerGroups(groups: CommandGroup[] | Function[] | { id: string, name?: string, guarded?: boolean }[] | string[][]): CommandoRegistry;
public registerType(type: ArgumentType | Function): CommandoRegistry;
public registerTypes(type: ArgumentType[] | Function[], ignoreInvalid?: boolean): CommandoRegistry;
public registerTypesIn(options: string | {}): CommandoRegistry;
public reregisterCommand(command: Command | Function, oldCommand: Command): void;
public resolveCommand(command: CommandResolvable): Command;
public resolveCommandPath(group: string, memberName: string): string;
public resolveGroup(group: CommandGroupResolvable): CommandGroup;
public unregisterCommand(command: Command): void;
}
export class FriendlyError extends Error {
public constructor(message: string);
}
export class GuildSettingsHelper {
public constructor(client: CommandoClient, guild: CommandoGuild);
public readonly client: CommandoClient;
public guild: CommandoGuild;
public clear(): Promise<void>;
public get(key: string, defVal?: any): any;
public remove(key: string): Promise<any>;
public set(key: string, val: any): Promise<any>;
}
export abstract class SettingProvider {
public abstract clear(guild: Guild | string): Promise<void>;
public abstract destroy(): Promise<void>;
public abstract get(guild: Guild | string, key: string, defVal?: any): any;
public abstract init(client: CommandoClient): Promise<void>;
public abstract remove(guild: Guild | string, key: string): Promise<any>;
public abstract set(guild: Guild | string, key: string, val: any): Promise<any>;
public static getGuildID(guild: Guild | string): string;
}
export class SQLiteProvider extends SettingProvider {
public constructor(db: any | Promise<any>);
public readonly client: CommandoClient;
public db: any;
private deleteStmt: any;
private insertOrReplaceStmt: any;
private listeners: Map<any, any>;
private settings: Map<any, any>;
public clear(guild: Guild | string): Promise<void>;
public destroy(): Promise<void>;
public get(guild: Guild | string, key: string, defVal?: any): any;
public init(client: CommandoClient): Promise<void>;
public remove(guild: Guild | string, key: string): Promise<any>;
public set(guild: Guild | string, key: string, val: any): Promise<any>;
private setupGuild(guild: string, settings: {}): void;
private setupGuildCommand(guild: CommandoGuild, command: Command, settings: {}): void;
private setupGuildGroup(guild: CommandoGuild, group: CommandGroup, settings: {}): void;
private updateOtherShards(key: string, val: any): void;
}
export class SyncSQLiteProvider extends SettingProvider {
public constructor(db: any | Promise<any>);
public readonly client: CommandoClient;
public db: any;
private deleteStmt: any;
private insertOrReplaceStmt: any;
private listeners: Map<any, any>;
private settings: Map<any, any>;
public clear(guild: Guild | string): Promise<void>;
public destroy(): Promise<void>;
public get(guild: Guild | string, key: string, defVal?: any): any;
public init(client: CommandoClient): Promise<void>;
public remove(guild: Guild | string, key: string): Promise<any>;
public set(guild: Guild | string, key: string, val: any): Promise<any>;
private setupGuild(guild: string, settings: {}): void;
private setupGuildCommand(guild: CommandoGuild, command: Command, settings: {}): void;
private setupGuildGroup(guild: CommandoGuild, group: CommandGroup, settings: {}): void;
private updateOtherShards(key: string, val: any): void;
}
export class util {
public static disambiguation(items: any[], label: string, property?: string): string;
public static escapeRegex(str: string): string;
public static paginate<T>(items: T[], page?: number, pageLength?: number): {
items: T[],
page: number,
maxPage: number,
pageLength: number
};
public static readonly permissions: { [K in PermissionString]: string };
}
export const version: string;
export interface ArgumentCollectorResult<T = object> {
values: T | null;
cancelled?: 'user' | 'time' | 'promptLimit';
prompts: Message[];
answers: Message[];
}
type ArgumentDefault = any | Function;
export interface ArgumentInfo {
key: string;
label?: string;
prompt: string;
error?: string;
type?: string;
max?: number;
min?: number;
oneOf?: string[];
default?: ArgumentDefault;
infinite?: boolean;
validate?: Function;
parse?: Function;
isEmpty?: Function;
wait?: number;
}
export interface ArgumentResult {
value: any | any[];
cancelled?: 'user' | 'time' | 'promptLimit';
prompts: Message[];
answers: Message[];
}
type CommandGroupResolvable = CommandGroup | string;
export interface CommandInfo {
name: string;
aliases?: string[];
autoAliases?: boolean;
group: string;
memberName: string;
description: string;
format?: string;
details?: string;
examples?: string[];
nsfw?: boolean;
guildOnly?: boolean;
ownerOnly?: boolean;
clientPermissions?: PermissionResolvable[];
userPermissions?: PermissionResolvable[];
defaultHandling?: boolean;
throttling?: ThrottlingOptions;
args?: ArgumentInfo[];
argsPromptLimit?: number;
argsType?: string;
argsCount?: number;
argsSingleQuotes?: boolean;
patterns?: RegExp[];
guarded?: boolean;
hidden?: boolean;
unknown?: boolean;
}
interface CommandoClientEvents extends ClientEvents {
commandBlock:
| [CommandoMessage, string, object?]
| [CommandoMessage, 'guildOnly' | 'nsfw']
| [CommandoMessage, 'permission', { response?: string }]
| [CommandoMessage, 'throttling', { throttle: object, remaining: number }]
| [CommandoMessage, 'clientPermissions', { missing: string }];
commandCancel: [Command, string, CommandoMessage];
commandError:
| [Command, Error, CommandoMessage, object | string | string[], false]
| [Command, Error, CommandoMessage, string[], true];
commandPrefixChange: [CommandoGuild, string];
commandRegister: [Command, CommandoRegistry];
commandReregister: [Command, Command];
commandRun: [Command, Promise<any>, CommandoMessage, object | string | string[], boolean];
commandStatusChange: [CommandoGuild, Command, boolean];
commandUnregister: [Command];
groupRegister: [CommandGroup, CommandoRegistry];
groupStatusChange: [CommandoGuild, CommandGroup, boolean];
typeRegister: [ArgumentType, CommandoRegistry];
unknownCommand: [CommandoMessage];
providerReady: [SettingProvider];
}
export interface CommandoClientOptions extends ClientOptions {
commandPrefix?: string;
commandEditableDuration?: number;
nonCommandEditable?: boolean;
owner?: string | string[] | Set<string>;
invite?: string;
}
type CommandResolvable = Command | string;
interface DefaultCommandsOptions {
help?: boolean;
prefix?: boolean;
eval?: boolean;
ping?: boolean;
unknownCommand?: boolean;
commandState?: boolean;
}
interface DefaultTypesOptions {
string?: boolean;
integer?: boolean;
float?: boolean;
boolean?: boolean;
user?: boolean;
member?: boolean;
role?: boolean;
channel?: boolean;
textChannel?: boolean;
voiceChannel?: boolean;
categoryChannel?: boolean;
message?: boolean;
customEmoji?: boolean;
defaultEmoji?: boolean;
command?: boolean;
group?: boolean;
}
type Inhibitor = (msg: CommandoMessage) => false | string | Inhibition;
export interface Inhibition {
reason: string;
response?: Promise<Message>;
}
export interface ThrottlingOptions {
usages: number;
duration: number;
}
type ResponseType = 'reply' | 'plain' | 'direct' | 'code';
interface RespondOptions {
content: StringResolvable | MessageOptions;
fromEdit?: boolean;
options?: MessageOptions;
lang?: string;
type?: ResponseType;
}
interface RespondEditOptions {
content: StringResolvable | MessageEditOptions | Exclude<MessageAdditions, MessageAttachment>;
options?: MessageEditOptions | Exclude<MessageAdditions, MessageAttachment>;
type?: ResponseType;
}
}