import { ApplicationCommandOptionData, ApplicationCommandOptionType, ChannelType, Client, PermissionResolvable } from 'discord.js';
import { LocalizationMap } from 'discord-api-types/payloads/common';
interface Options {
    debug?: boolean;
    guildId?: string;
}
declare type SlashcommandOptionTypeString = 'Subcommand' | 'SubcommandGroup' | 'String' | 'Integer' | 'Boolean' | 'User' | 'Channel' | 'Role' | 'Mentionable' | 'Number' | 'Attachment';
declare type SlashcommandOptionType = SlashcommandOptionTypeString | ApplicationCommandOptionType;
declare type SlashcommandChannelType = ChannelType;
declare class Slash {
    client: Client;
    GuildSlashCommand: typeof GuildSlashCommand;
    fetchGuildSlashcommands: typeof fetchGuildSlashcommands;
    deleteGuildSlashcommand: typeof deleteGuildSlashcommand;
    deleteAllGuildSlashcommands: typeof deleteAllGuildSlashcommands;
    Slashcommand: typeof Slashcommand;
    fetchSlashcommands: typeof fetchSlashcommands;
    fetchSlashcommandById: typeof fetchSlashcommandById;
    fetchSlashcommandByName: typeof fetchSlashcommandByName;
    deleteSlashcommand: typeof deleteSlashcommand;
    deleteAllSlashcommands: typeof deleteAllSlashcommands;
    /**
     * Initializes the Slash class.
     * @param {Client} client - Discord.Client - The discord client.
     * @param {Options} clientOptions - Options = {}
     * @returns The class instance.
     */
    constructor(client: Client, clientOptions?: Options);
}
declare class GuildSlashCommand {
    protected name: string | null;
    protected description: string | null;
    protected options: ApplicationCommandOptionData[];
    protected guildId: string | null;
    protected type: string | null;
    protected dmPermission: boolean | null;
    protected nameLocalizations: LocalizationMap | null;
    protected descriptionLocalizations: LocalizationMap | null;
    protected defaultMemberPermissions: PermissionResolvable | null;
    /**
     * Creates a new guild slash command.
     * @returns The class instance.
     */
    constructor();
    /**
     * This function sets the guildId property of the class instance to the value of the guildId
     * parameter, and returns the class instance.
     * @param {string} guildId - The ID of the guild.
     * @returns The instance of the class.
     */
    setGuildId(guildId: string): this;
    /**
     * This function takes a string, validates it, and then sets the name property of the object to the
     * lowercase version of the string.
     * @param {string} name - The name of the slash command.
     * @returns The instance of the class.
     */
    setName(name: string): this;
    /**
     * The setDescription function takes a string as an argument, validates it, and then sets the
     * description property of the object to the value of the argument.
     * @param {string} description - The description of the slash command.
     * @returns The instance of the class.
     */
    setDescription(description: string): this;
    /**
     * This function takes an array of objects and checks if the objects have a name, type and
     * description property. If they don't, it throws an error.
     * @param {ApplicationCommandOptionData[]} options - ApplicationCommandOptionData[]
     * @returns The instance of the class.
     */
    setOptions(options: (ApplicationCommandOptionData | SlashcommandOption)[]): this;
    /**
     * This function adds an option to the command
     * @param {ApplicationCommandOptionData} option - ApplicationCommandOptionData
     * @returns The ApplicationCommandData object.
     */
    addOption(option: ApplicationCommandOptionData | SlashcommandOption): this;
    /**
     * This function sets the dmPermission property to the value of the dmPermission parameter, and if
     * the type of the dmPermission parameter is not a boolean, it throws an error.
     * @param {boolean} dmPermission - boolean - Whether or not slashcommand can be used in DMs.
     * @returns The class instance.
     */
    setDmPermission(dmPermission: boolean): this;
    /**
     * This function sets the nameLocalizations property of the object to the value of the
     * nameLocalizations parameter.
     * @param {LocalizationMap} nameLocalizations - LocalizationMap
     * @returns The class instance.
     */
    setNameLocalizations(nameLocalizations: LocalizationMap): this;
    /**
     * This function sets the descriptionLocalizations property of the object to the value of the
     * descriptionLocalizations parameter.
     * @param {LocalizationMap} descriptionLocalizations - LocalizationMap
     * @returns The object itself.
     */
    setDescriptionLocalizations(descriptionLocalizations: LocalizationMap): this;
    /**
     * This function sets the default member permissions for the slash command.
     * @param {PermissionResolvable} defaultMemberPermissions - PermissionResolvable
     * @returns The instance of the class.
     */
    setDefaultMemberPermissions(defaultMemberPermissions: PermissionResolvable): this;
    /**
     * This function creates a slash command in a guild, and returns the slash command object.
     * @returns The slashcommand object.
     */
    register(): Promise<import("discord.js").ApplicationCommand<{}>>;
}
declare class Slashcommand {
    protected name: string | null;
    protected description: string | null;
    protected options: ApplicationCommandOptionData[];
    protected dmPermission: boolean | null;
    protected nameLocalizations: LocalizationMap | null;
    protected descriptionLocalizations: LocalizationMap | null;
    protected defaultMemberPermissions: PermissionResolvable | null;
    /**
     * Create a new slashcommand.
     * @returns The instance of the class.
     */
    constructor();
    /**
     * This function takes a string, validates it, and then sets the name property of the object to the
     * lowercase version of the string.
     * @param {string} name - The name of the new slash command.
     * @returns The instance of the class.
     */
    setName(name: string): this;
    /**
     * The function takes a string as an argument, validates it, and then sets the description property
     * of the object to the value of the argument
     * @param {string} description - The description of the slashcommand.
     * @returns The instance of the class.
     */
    setDescription(description: string): this;
    /**
     * This function takes an array of objects and checks if the objects have a name, type and
     * description property. If they don't, it throws an error.
     * @param {ApplicationCommandOptionData[]} options - ApplicationCommandOptionData[]
     * @returns The instance of the class.
     */
    setOptions(options: (ApplicationCommandOptionData | SlashcommandOption)[]): this;
    /**
     * This function adds an option to the command
     * @param {ApplicationCommandOptionData} option - ApplicationCommandOptionData
     * @returns The ApplicationCommandData object.
     */
    addOption(option: ApplicationCommandOptionData | SlashcommandOption): this;
    /**
     * This function sets the dmPermission property to the value of the dmPermission parameter, and if
     * the type of the dmPermission parameter is not a boolean, it throws an error.
     * @param {boolean} dmPermission - boolean - Whether or not slashcommand can be used in DMs.
     * @returns The class instance.
     */
    setDmPermission(dmPermission: boolean): this;
    /**
     * This function sets the nameLocalizations property of the object to the value of the
     * nameLocalizations parameter.
     * @param {LocalizationMap} nameLocalizations - LocalizationMap
     * @returns The instance of the class.
     */
    setNameLocalizations(nameLocalizations: LocalizationMap): this;
    /**
     * This function sets the descriptionLocalizations property of the object to the value of the
     * descriptionLocalizations parameter.
     * @param {LocalizationMap} descriptionLocalizations - LocalizationMap
     * @returns The instance of the class.
     */
    setDescriptionLocalizations(descriptionLocalizations: LocalizationMap): this;
    /**
     * This function sets the default member permissions for the slash command.
     * @param {PermissionResolvable} defaultMemberPermissions - PermissionResolvable
     * @returns The instance of the class.
     */
    setDefaultMemberPermissions(defaultMemberPermissions: PermissionResolvable): this;
    /**
     * Creates the slash command.
     * @returns The slashcommand object.
     */
    register(): Promise<import("discord.js").ApplicationCommand<{
        guild: import("discord.js").GuildResolvable;
    }> | undefined>;
}
declare class SlashCommandOptionChoice {
    name: string | number | boolean | null;
    value: string | number | boolean | null;
    nameLocalizations: LocalizationMap | null;
    /**
     * Create a new slash command option choice.
     * @returns The object that is being created.
     */
    constructor();
    /**
     * The setName function takes a string, number, or boolean as an argument and sets the name property
     * of the Choice object to the value of the argument.
     * @param {string | number | boolean} name - The name of the choice.
     * @returns The instance of the class.
     */
    setName(name: string | number | boolean): this;
    /**
     * This function sets the value of the choice to the value passed in, and returns the choice.
     * @param {string | number | boolean} value - string | number | boolean
     * @returns The value of the property "value"
     */
    setValue(value: string | number | boolean): this;
    /**
     * This function sets the nameLocalizations property of the object to the value of the
     * nameLocalizations parameter.
     * @param {LocalizationMap} nameLocalizations - LocalizationMap
     * @returns The object itself.
     */
    setNameLocalizations(nameLocalizations: LocalizationMap): this;
}
declare class SlashcommandOption {
    name: string | null;
    description: string | null;
    type: ApplicationCommandOptionType | null;
    required: boolean;
    autocomplete: boolean;
    channelTypes?: SlashcommandChannelType[];
    maxValue?: number;
    minValue?: number;
    choices?: SlashCommandOptionChoice[];
    nameLocalizations: LocalizationMap | null;
    descriptionLocalizations: LocalizationMap | null;
    options: ApplicationCommandOptionData[] | null;
    /**
     * Creates a new SlashcommandOption object.
     * @returns The object that is being created.
     */
    constructor();
    /**
     * This function takes a string, validates it, and then sets the name property of the object to the
     * lowercase version of the string.
     * @param {string} name - The name of the new user.
     * @returns The instance of the class.
     */
    setName(name: string): this;
    /**
     * The function takes a string as an argument, validates it, and then sets the description property
     * of the object to the value of the argument
     * @param {string} description - The description of the task.
     * @returns The instance of the class.
     */
    setDescription(description: string): this;
    /**
     * This function sets the type of the option to the type passed in as a parameter and returns the
     * option.
     * @param {SlashcommandOptionType} type - The type of option.
     * @returns The object itself.
     */
    setType(type: SlashcommandOptionType): this;
    /**
     * This function sets the required property of the class to the value passed in.
     * @param {boolean} required - boolean
     * @returns The instance of the class.
     */
    setRequired(required: boolean): this;
    /**
     * This function sets the autocomplete property of the class to the value passed in as a parameter.
     * @param {boolean} autocomplete - boolean
     * @returns The object itself.
     */
    setAutocomplete(autocomplete: boolean): this;
    /**
     * This function sets the allowed channel types for the slash command.
     * @param {SlashcommandChannelType[]} channelTypes - SlashcommandChannelType[]
     * @returns The object itself.
     */
    setChannelTypes(channelTypes: SlashcommandChannelType[]): this;
    /**
     * This function sets the maxValues property of the object to the value passed in as a parameter and
     * returns the object.
     * @param {number} maxValues - The maximum number of values to return.
     * @returns The object itself.
     */
    setMaxValues(maxValues: number): this;
    /**
     * This function sets the minValue property of the object to the value passed in as a parameter and
     * returns the object.
     * @param {number} minValue - The minimum value of the range.
     * @returns The object itself.
     */
    setMinValue(minValue: number): this;
    /**
     * This function sets the choices for the slash command
     * @param {SlashCommandOptionChoice[]} choices - An array of SlashCommandOptionChoice objects.
     * @returns The object itself.
     */
    setChoices(choices: SlashCommandOptionChoice[]): this;
    /**
     * This function sets the nameLocalizations property of the object to the value of the
     * nameLocalizations parameter.
     * @param {LocalizationMap} nameLocalizations - LocalizationMap
     * @returns The instance of the class.
     */
    setNameLocalizations(nameLocalizations: LocalizationMap): this;
    /**
     * This function sets the descriptionLocalizations property of the object to the value of the
     * descriptionLocalizations parameter.
     * @param {LocalizationMap} descriptionLocalizations - LocalizationMap
     * @returns The instance of the class.
     */
    setDescriptionLocalizations(descriptionLocalizations: LocalizationMap): this;
    /**
     * It takes an array of objects
     * @param {(ApplicationCommandOptionData| SlashcommandOption)[]} options -
     * (ApplicationCommandOptionData| SlashcommandOption)[]
     * @returns The object itself.
     */
    setOptions(options: (ApplicationCommandOptionData | SlashcommandOption)[]): this;
    /**
     * This function adds an option to the option
     * @param {ApplicationCommandOptionData | SlashcommandOption} option - ApplicationCommandOptionData
     * | SlashcommandOption
     * @returns The object itself.
     */
    addOption(option: ApplicationCommandOptionData | SlashcommandOption): this;
}
declare function fetchGuildSlashcommands({ guildId }?: {
    guildId: string;
}): Promise<import("discord.js").Collection<string, import("discord.js").ApplicationCommand<{}>> | undefined>;
declare function fetchSlashcommandById({ id, guildId, }: {
    id: string;
    guildId?: string;
}): Promise<import("discord.js").ApplicationCommand<{
    guild: import("discord.js").GuildResolvable;
}> | undefined>;
declare function fetchSlashcommands(): Promise<import("discord.js").Collection<string, import("discord.js").ApplicationCommand<{
    guild: import("discord.js").GuildResolvable;
}>> | undefined>;
declare function fetchSlashcommandByName({ name, guildId, }: {
    name: string;
    guildId?: string;
}): Promise<import("discord.js").ApplicationCommand<{
    guild: import("discord.js").GuildResolvable;
}> | null>;
declare function deleteGuildSlashcommand({ guildId, name, id, }?: {
    guildId: string;
    name?: string;
    id?: string;
}): Promise<import("discord.js").ApplicationCommand<{}> | undefined>;
declare function deleteSlashcommand({ name, id, }?: {
    name?: string;
    id?: string;
}): Promise<import("discord.js").ApplicationCommand<{
    guild: import("discord.js").GuildResolvable;
}> | undefined>;
declare function deleteAllGuildSlashcommands({ guildId, }?: {
    guildId: string;
}): Promise<(import("discord.js").ApplicationCommand<{}> | null)[] | undefined>;
declare function deleteAllSlashcommands(): Promise<void[] | undefined>;
export { Slash, Slashcommand, SlashcommandOption, SlashCommandOptionChoice, GuildSlashCommand, fetchGuildSlashcommands, fetchSlashcommands, fetchSlashcommandById, fetchSlashcommandByName, deleteGuildSlashcommand, deleteSlashcommand, deleteAllGuildSlashcommands, deleteAllSlashcommands, };
