import { ApplicationCommand, ApplicationCommandOptionType, ApplicationCommandSubCommandData, ApplicationCommandSubGroupData, ApplicationCommandType, AutocompleteInteraction, ChatInputApplicationCommandData, ChatInputCommandInteraction, Collection, CommandInteractionOptionResolver, Snowflake } from 'discord.js';
import { APIApplicationCommandOptionBase } from 'discord-api-types/payloads/v10/_interactions/_applicationCommands/_chatInput/base';
import { BaseCommandMeta, CommandDiscovery } from '../command.discovery';
interface BaseSlashCommandMeta {
    category?: string;
    guilds?: Snowflake[];
    discordResponse?: ApplicationCommand;
}
export interface ChatInputSlashCommandMeta extends BaseSlashCommandMeta, ChatInputApplicationCommandData {
    type: ApplicationCommandType.ChatInput;
}
export interface SubcommandSlashCommandMeta extends BaseSlashCommandMeta, ApplicationCommandSubCommandData {
    type: ApplicationCommandOptionType.Subcommand;
}
export interface SubcommandGroupSlashCommandMeta extends BaseCommandMeta, ApplicationCommandSubGroupData {
    type: ApplicationCommandOptionType.SubcommandGroup;
}
export type SlashCommandMeta = ChatInputSlashCommandMeta | SubcommandSlashCommandMeta | SubcommandGroupSlashCommandMeta;
export interface OptionMeta extends APIApplicationCommandOptionBase<ApplicationCommandOptionType> {
    resolver?: keyof CommandInteractionOptionResolver;
}
/**
 * Represents a slash command discovery.
 */
export declare class SlashCommandDiscovery extends CommandDiscovery<SlashCommandMeta> {
    readonly subcommands: Collection<string, SlashCommandDiscovery>;
    /**
     * Returns the command description.
     */
    getDescription(): string;
    /**
     * Sets the command description.
     * @param command The command discovery.
     */
    setSubcommand(command: SlashCommandDiscovery): void;
    /**
     * Ensures a subcommand exists.
     * @param command
     */
    ensureSubcommand(command: SlashCommandDiscovery): SlashCommandDiscovery;
    /**
     * Returns the subcommand.
     * @param name
     */
    getSubcommand(name: string): SlashCommandDiscovery;
    /**
     * Returns the subcommands.
     */
    getSubcommands(): Collection<string, SlashCommandDiscovery>;
    /**
     * Returns raw options from metadata.
     */
    getRawOptions(): Record<string, OptionMeta>;
    /**
     * Returns the options.
     */
    getOptions(): any;
    /**
     * Executes the command.
     * @param interaction
     * @param depth
     */
    execute(interaction: ChatInputCommandInteraction | AutocompleteInteraction, depth?: number): any;
    /**
     * Returns whether the discovery is a slash command.
     */
    isSlashCommand(): this is SlashCommandDiscovery;
    /**
     * Returns the JSON representation of the discovery.
     */
    toJSON(): {
        options: any;
        type: ApplicationCommandType.ChatInput;
        category?: string;
        guilds?: Snowflake[];
        discordResponse?: ApplicationCommand;
        description: string;
        descriptionLocalizations?: import("discord.js").LocalizationMap;
        name: string;
        nameLocalizations?: import("discord.js").LocalizationMap;
        dmPermission?: boolean;
        defaultMemberPermissions?: import("discord.js").PermissionResolvable | null;
        nsfw?: boolean;
        contexts?: readonly import("discord.js").InteractionContextType[];
        integrationTypes?: readonly import("discord.js").ApplicationIntegrationType[];
    } | {
        options: any;
        type: ApplicationCommandOptionType.Subcommand;
        category?: string;
        guilds?: Snowflake[];
        discordResponse?: ApplicationCommand;
        name: string;
        description: string;
        descriptionLocalizations?: import("discord.js").LocalizationMap;
        nameLocalizations?: import("discord.js").LocalizationMap;
        autocomplete?: never;
    } | {
        options: any;
        type: ApplicationCommandOptionType.SubcommandGroup;
        guilds?: Snowflake[];
        category?: string;
        discordResponse?: ApplicationCommand;
        name: string;
        nameLocalizations?: import("discord.js").LocalizationMap;
        dmPermission?: boolean;
        defaultMemberPermissions?: import("discord.js").PermissionResolvable | null;
        nsfw?: boolean;
        contexts?: readonly import("discord.js").InteractionContextType[];
        integrationTypes?: readonly import("discord.js").ApplicationIntegrationType[];
        description: string;
        descriptionLocalizations?: import("discord.js").LocalizationMap;
        autocomplete?: never;
    };
}
export {};
