import { CommandRatelimit, CommandRatelimitItem, CommandRatelimitOptions } from '../commandratelimit';
import { ApplicationCommandOptionTypes, ApplicationCommandTypes } from '../constants';
import { BaseSet } from '../collections/baseset';
import { BaseCollection } from '../collections/basecollection';
import { Structure } from '../structures/basestructure';
import { InteractionDataApplicationCommand, InteractionDataApplicationCommandOption } from '../structures/interaction';
import { InteractionContext } from './context';
export declare type ParsedArgs = Record<string, any>;
export declare type ParsedErrors = Record<string, Error>;
export declare type CommandRatelimitInfo = {
    item: CommandRatelimitItem;
    ratelimit: CommandRatelimit;
    remaining: number;
};
export declare type CommandRatelimitMetadata = {
    global: boolean;
    now: number;
};
export declare type FailedPermissions = Array<bigint>;
export declare type InteractionCommandInvoker = InteractionCommand | InteractionCommandOption;
/**
 * @category InteractionCommand
 */
export declare type ArgumentConverter = (value: any, context: InteractionContext) => Promise<any> | any;
/**
 * @category InteractionCommand
 */
export declare type ArgumentDefault = ((context: InteractionContext) => Promise<any> | any) | any;
/**
 * @category InteractionCommand
 */
export declare type CommandCallbackDmBlocked = (context: InteractionContext) => Promise<any> | any;
/**
 * @category InteractionCommand
 */
export declare type CommandCallbackLoadingTrigger = (context: InteractionContext) => Promise<any> | any;
/**
 * @category InteractionCommand
 */
export declare type CommandCallbackBefore = (context: InteractionContext) => Promise<boolean> | boolean;
/**
 * @category InteractionCommand
 */
export declare type CommandCallbackBeforeRun = (context: InteractionContext, args: ParsedArgs) => Promise<boolean> | boolean;
/**
 * @category InteractionCommand
 */
export declare type CommandCallbackCancel = (context: InteractionContext) => Promise<any> | any;
/**
 * @category InteractionCommand
 */
export declare type CommandCallbackCancelRun = (context: InteractionContext, args: ParsedArgs) => Promise<any> | any;
/**
 * @category InteractionCommand
 */
export declare type CommandCallbackError = (context: InteractionContext, error: any) => Promise<any> | any;
/**
 * @category InteractionCommand
 */
export declare type CommandCallbackPermissionsFail = (context: InteractionContext, permissions: FailedPermissions) => Promise<any> | any;
/**
* @category InteractionCommand
*/
export declare type CommandCallbackRatelimit = (context: InteractionContext, ratelimits: Array<CommandRatelimitInfo>, metadata: CommandRatelimitMetadata) => Promise<any> | any;
/**
 * @category InteractionCommand
 */
export declare type CommandCallbackRun = (context: InteractionContext, args: ParsedArgs) => Promise<any> | any;
/**
 * @category InteractionCommand
 */
export declare type CommandCallbackRunError = (context: InteractionContext, args: ParsedArgs, error: any) => Promise<any> | any;
/**
 * @category InteractionCommand
 */
export declare type CommandCallbackSuccess = (context: InteractionContext) => Promise<any> | any;
/**
 * @category InteractionCommand
 */
export declare type CommandCallbackValueError = (context: InteractionContext, args: ParsedArgs, errors: ParsedErrors) => Promise<any> | any;
/**
 * Command Options
 * @category Command Options
 */
export interface InteractionCommandOptions {
    _file?: string;
    default_permission?: boolean;
    defaultPermission?: boolean;
    description?: string;
    name?: string;
    options?: Array<InteractionCommandOption | InteractionCommandOptionOptions | typeof InteractionCommandOption>;
    type?: ApplicationCommandTypes;
    disableDm?: boolean;
    global?: boolean;
    guildIds?: Array<string>;
    metadata?: Record<string, any>;
    permissions?: Array<bigint | number>;
    permissionsClient?: Array<bigint | number>;
    permissionsIgnoreClientOwner?: boolean;
    ratelimit?: boolean | CommandRatelimitOptions | null;
    ratelimits?: Array<CommandRatelimitOptions>;
    triggerLoadingAfter?: number;
    triggerLoadingAsEphemeral?: boolean;
    onDmBlocked?: CommandCallbackDmBlocked;
    onLoadingTrigger?: CommandCallbackLoadingTrigger;
    onBefore?: CommandCallbackBefore;
    onBeforeRun?: CommandCallbackBeforeRun;
    onCancel?: CommandCallbackCancel;
    onCancelRun?: CommandCallbackCancelRun;
    onError?: CommandCallbackError;
    onPermissionsFail?: CommandCallbackPermissionsFail;
    onPermissionsFailClient?: CommandCallbackPermissionsFail;
    onRatelimit?: CommandCallbackRatelimit;
    run?: CommandCallbackRun;
    onRunError?: CommandCallbackRunError;
    onSuccess?: CommandCallbackSuccess;
    onValueError?: CommandCallbackValueError;
}
export interface InteractionCommandOptionOptions {
    _file?: string;
    choices?: Array<InteractionCommandOptionChoice | InteractionCommandOptionChoiceOptions>;
    default?: ArgumentDefault;
    description?: string;
    name?: string;
    options?: Array<InteractionCommandOption | InteractionCommandOptionOptions | typeof InteractionCommandOption>;
    required?: boolean;
    type?: ApplicationCommandOptionTypes | StringConstructor | BooleanConstructor | NumberConstructor | string;
    value?: ArgumentConverter;
    disableDm?: boolean;
    label?: string;
    metadata?: Record<string, any>;
    permissions?: Array<bigint | number>;
    permissionsClient?: Array<bigint | number>;
    permissionsIgnoreClientOwner?: boolean;
    ratelimit?: boolean | CommandRatelimitOptions | null;
    ratelimits?: Array<CommandRatelimitOptions>;
    triggerLoadingAfter?: number;
    triggerLoadingAsEphemeral?: boolean;
    onDmBlocked?: CommandCallbackDmBlocked;
    onLoadingTrigger?: CommandCallbackLoadingTrigger;
    onBefore?: CommandCallbackBefore;
    onBeforeRun?: CommandCallbackBeforeRun;
    onCancel?: CommandCallbackCancel;
    onCancelRun?: CommandCallbackCancelRun;
    onError?: CommandCallbackError;
    onPermissionsFail?: CommandCallbackPermissionsFail;
    onPermissionsFailClient?: CommandCallbackPermissionsFail;
    onRatelimit?: CommandCallbackRatelimit;
    run?: CommandCallbackRun;
    onRunError?: CommandCallbackRunError;
    onSuccess?: CommandCallbackSuccess;
    onValueError?: CommandCallbackValueError;
}
export interface InteractionCommandOptionChoiceOptions {
    name?: string;
    value?: number | string;
}
export declare class InteractionCommand<ParsedArgsFinished = ParsedArgs> extends Structure {
    readonly _file?: string;
    readonly _keys: BaseSet<string>;
    readonly _keysSkipDifference: BaseSet<string>;
    _options?: BaseCollection<string, InteractionCommandOption>;
    defaultPermission: boolean;
    description: string;
    ids: BaseCollection<string, string>;
    global: boolean;
    guildIds?: BaseSet<string>;
    name: string;
    type: ApplicationCommandTypes;
    disableDm?: boolean;
    metadata: Record<string, any>;
    permissions?: Array<bigint>;
    permissionsClient?: Array<bigint>;
    permissionsIgnoreClientOwner?: boolean;
    ratelimits: Array<CommandRatelimit>;
    triggerLoadingAfter?: number;
    triggerLoadingAsEphemeral?: boolean;
    onDmBlocked?(context: InteractionContext): Promise<any> | any;
    onLoadingTrigger?(context: InteractionContext): Promise<any> | any;
    onBefore?(context: InteractionContext): Promise<boolean> | boolean;
    onBeforeRun?(context: InteractionContext, args: ParsedArgs): Promise<boolean> | boolean;
    onCancel?(context: InteractionContext): Promise<any> | any;
    onCancelRun?(context: InteractionContext, args: ParsedArgs): Promise<any> | any;
    onError?(context: InteractionContext, args: ParsedArgs, error: any): Promise<any> | any;
    onPermissionsFail?(context: InteractionContext, permissions: FailedPermissions): Promise<any> | any;
    onPermissionsFailClient?(context: InteractionContext, permissions: FailedPermissions): Promise<any> | any;
    onRatelimit?(context: InteractionContext, ratelimits: Array<CommandRatelimitInfo>, metadata: CommandRatelimitMetadata): Promise<any> | any;
    run?(context: InteractionContext, args: ParsedArgsFinished): Promise<any> | any;
    onRunError?(context: InteractionContext, args: ParsedArgsFinished, error: any): Promise<any> | any;
    onSuccess?(context: InteractionContext, args: ParsedArgsFinished): Promise<any> | any;
    onValueError?(context: InteractionContext, args: ParsedArgs, errors: ParsedErrors): Promise<any> | any;
    constructor(data?: InteractionCommandOptions);
    get _optionsKey(): string;
    get fullName(): string;
    get hash(): string;
    get hasRun(): boolean;
    get isGroup(): boolean;
    get isContextCommand(): boolean;
    get isContextCommandMessage(): boolean;
    get isContextCommandUser(): boolean;
    get isSlashCommand(): boolean;
    get key(): string;
    get length(): number;
    get lengthOptions(): number;
    get options(): Array<InteractionCommandOption> | undefined;
    set options(value: Array<InteractionCommandOption> | undefined);
    getInvoker(data: InteractionDataApplicationCommand): InteractionCommandInvoker | null;
    getInvokerOption(options: BaseCollection<string, InteractionDataApplicationCommandOption>): InteractionCommandOption | null;
    _transferValuesToChildren(): void;
    mergeValue(key: string, value: any): void;
}
export declare class InteractionCommandOption<ParsedArgsFinished = ParsedArgs> extends Structure {
    readonly parent?: InteractionCommand | InteractionCommandOption;
    readonly _file?: string;
    readonly _keys: BaseSet<string>;
    _options?: BaseCollection<string, InteractionCommandOption>;
    choices?: Array<InteractionCommandOptionChoice>;
    description: string;
    name: string;
    required?: boolean;
    type: ApplicationCommandOptionTypes;
    default?: ArgumentDefault;
    disableDm?: boolean;
    label?: string;
    metadata: Record<string, any>;
    permissions?: Array<bigint>;
    permissionsClient?: Array<bigint>;
    permissionsIgnoreClientOwner?: boolean;
    ratelimits?: Array<CommandRatelimit>;
    triggerLoadingAfter?: number;
    triggerLoadingAsEphemeral?: boolean;
    value?: ArgumentConverter;
    onDmBlocked?(context: InteractionContext): Promise<any> | any;
    onLoadingTrigger?(context: InteractionContext): Promise<any> | any;
    onBefore?(context: InteractionContext): Promise<boolean> | boolean;
    onBeforeRun?(context: InteractionContext, args: ParsedArgs): Promise<boolean> | boolean;
    onCancel?(context: InteractionContext): Promise<any> | any;
    onCancelRun?(context: InteractionContext, args: ParsedArgs): Promise<any> | any;
    onError?(context: InteractionContext, args: ParsedArgs, error: any): Promise<any> | any;
    onPermissionsFail?(context: InteractionContext, permissions: FailedPermissions): Promise<any> | any;
    onPermissionsFailClient?(context: InteractionContext, permissions: FailedPermissions): Promise<any> | any;
    onRatelimit?(context: InteractionContext, ratelimits: Array<CommandRatelimitInfo>, metadata: CommandRatelimitMetadata): Promise<any> | any;
    run?(context: InteractionContext, args: ParsedArgsFinished): Promise<any> | any;
    onRunError?(context: InteractionContext, args: ParsedArgsFinished, error: any): Promise<any> | any;
    onSuccess?(context: InteractionContext, args: ParsedArgsFinished): Promise<any> | any;
    onValueError?(context: InteractionContext, args: ParsedArgs, errors: ParsedErrors): Promise<any> | any;
    constructor(data?: InteractionCommandOptionOptions);
    get _choicesKey(): string;
    get _optionsKey(): string;
    get fullName(): string;
    get hasRun(): boolean;
    get isSubCommand(): boolean;
    get isSubCommandGroup(): boolean;
    get key(): string;
    get length(): number;
    get lengthChoices(): number;
    get lengthOptions(): number;
    get options(): Array<InteractionCommandOption> | undefined;
    set options(value: Array<InteractionCommandOption> | undefined);
    getInvoker(option: InteractionDataApplicationCommandOption): InteractionCommandOption | null;
    addChoice(name: InteractionCommandOptionChoice | InteractionCommandOptionChoiceOptions): InteractionCommandOptionChoice;
    addChoice(name: string, value: number | string): InteractionCommandOptionChoice;
    addOption(value: InteractionCommandOption | InteractionCommandOptionOptions | typeof InteractionCommandOption): InteractionCommandOption;
    setChoices(value?: Array<InteractionCommandOptionChoice | InteractionCommandOptionChoiceOptions>): this;
    setDescription(value: string): this;
    setName(value: string): this;
    setOptions(value?: Array<InteractionCommandOption | InteractionCommandOptionOptions>): this;
    setRequired(value: boolean): this;
    setType(value: ApplicationCommandOptionTypes): this;
    _transferValuesToChildren(parent: InteractionCommand | InteractionCommandOption): void;
    mergeValue(key: string, value: any): void;
}
export declare class InteractionCommandOptionChoice extends Structure {
    readonly _keys: BaseSet<string>;
    name: string;
    value: number | string;
    constructor(data?: InteractionCommandOptionChoiceOptions);
    get key(): string;
    get length(): number;
}
