advanced-command-handler
Version:
A package to help you create a bot with only 1 main file, directories for your events/commands, with some helpers classes and functions.
89 lines (88 loc) • 3.84 kB
TypeScript
import { Channel, Emoji, Guild, GuildMember, Message, Snowflake, User } from 'discord.js';
import { TextChannelLike } from '../types';
import { Command } from './commands';
import { ArgumentContext } from './contexts';
import { Event } from './Event';
declare type ArgumentValidator = (argument: string, ctx: ArgumentContext) => boolean;
declare type ArgumentParser<T> = (argument: string, ctx: ArgumentContext) => T | null | Promise<T | null>;
export declare type ArgumentFunction<T> = (options: ArgumentBuilder<T>) => Argument<T>;
export declare class Argument<T> {
type: ArgumentType;
options: ArgumentOptions<T>;
validator: ArgumentValidator;
parser: ArgumentParser<T>;
constructor(type: ArgumentType, options: ArgumentOptions<T>, validator: ArgumentValidator, parser: ArgumentParser<T>);
}
export declare class CommandArgument<T> {
name: string;
index: number;
coalescing: boolean;
defaultValue: T | undefined;
description: string;
optional: boolean;
parse: ArgumentParser<T>;
type: ArgumentType;
validate: ArgumentValidator;
constructor(name: string, index: number, argument: Argument<T>);
get isSimple(): boolean;
}
export declare function booleanArgument(options?: ArgumentBuilder<boolean>): Argument<boolean>;
export declare function channelArgument(options?: ArgumentBuilder<Channel>): Argument<Channel>;
export declare function choiceArgument(options: ArgumentBuilder<string> & {
values: string[];
}): Argument<string>;
export declare function commandArg(options?: ArgumentBuilder<Command>): Argument<Command>;
export declare function emojiArgument(options?: ArgumentBuilder<Emoji>): Argument<Emoji>;
export declare function enumArgument<E extends Record<string, V>, V>(options: ArgumentBuilder<V> & {
values: E;
}): Argument<V>;
export declare function eventArgument(options?: ArgumentBuilder<Event>): Argument<Event>;
export declare function floatArgument(options?: ArgumentBuilder<number>): Argument<number>;
export declare function guildArgument(options?: ArgumentBuilder<Guild>): Argument<Guild>;
export declare function guildMemberArgument(options?: ArgumentBuilder<GuildMember>): Argument<GuildMember>;
export declare function intArgument(options?: ArgumentBuilder<number>): Argument<number>;
export declare function messageArgument(options?: ArgumentBuilder<Message>): Argument<Message>;
export declare function snowflakeArgument(options?: ArgumentBuilder<Snowflake>): Argument<string>;
export declare function stringArgument(options?: ArgumentBuilder<string> & {
regex?: RegExp;
}): Argument<string>;
export declare function regexArgument(options?: ArgumentBuilder<RegExp>): Argument<RegExp>;
export declare function textChannelArgument(options?: ArgumentBuilder<TextChannelLike>): Argument<import("discord.js").TextChannel | import("discord.js").NewsChannel>;
export declare function userArgument(options?: ArgumentBuilder<User>): Argument<User>;
interface ArgumentOptions<T> {
coalescing?: boolean;
defaultValue?: T;
description?: string;
optional?: boolean;
}
declare type ArgumentBuilder<T> = {
description?: string;
coalescing?: boolean;
} | {
description?: string;
defaultValue?: T;
} | {
description?: string;
optional?: boolean;
};
export declare enum ArgumentType {
BOOLEAN = "boolean",
CHANNEL = "channel",
COMMAND = "command",
CHOICE = "choice",
EMOJI = "emoji",
ENUM = "enum",
EVENT = "event",
FLOAT = "float",
GUILD = "guild",
GUILD_MEMBER = "guild_member",
INTEGER = "integer",
MESSAGE = "message",
REGEX = "regex",
ROLE = "role",
SNOWFLAKE = "snowflake",
STRING = "string",
TEXT_CHANNEL = "text_channel",
USER = "user"
}
export {};