import { BaseStructure } from './index.js';
import { ShewenyError } from '../helpers/index.js';
import type { ShewenyClient } from '../client/Client.js';
import type { SelectMenuInteraction } from 'discord.js';
import type { Awaitable, SelectMenuData, CustomId } from '../typescript/index.js';
/**
 * Represents an Select Menu structure
 * @extends {BaseStructure}
 */
export declare abstract class SelectMenu extends BaseStructure {
    /**
     * Cooldown of a button in seconds
     * @type {number}
     */
    cooldown: number;
    /**
     * Custom id for one or more select menus
     * @type {CustomId}
     */
    customId: CustomId;
    /**
     * Constructor for build a Select Menu
     * @param {ShewenyClient} [client] Client framework
     * @param {CustomId} [customId] Custom id for one or more select menus
     * @param {SelectMenuData | undefined} [options] The options of the select menu
     */
    constructor(client: ShewenyClient, customId: CustomId, options?: SelectMenuData);
    /**
     * This function is executed before executing the `execute` function
     * @param {SelectMenuInteraction} interaction Select Menu interaction
     * @returns {any | Promise<any>}
     */
    before?(interaction: SelectMenuInteraction): Awaitable<unknown>;
    /**
     * Main function `execute` for the select menus
     * @param {SelectMenuInteraction} interaction Select Menus interaction
     * @returns {any | Promise<any>}
     */
    abstract execute(interaction: SelectMenuInteraction): Awaitable<unknown>;
    /**
     * Register a select menu in collections
     * @returns {Collection<string[]| RegExp[], SelectMenu | ShewenyError>} The select menus collection
     */
    register(): Promise<SelectMenu | ShewenyError>;
    /**
     * Reload a select menu
     * @returns {Promise<Collection<string[]| RegExp[], SelectMenu> | ShewenyError>} The select menus collection
     */
    reload(): Promise<SelectMenu | ShewenyError>;
    /**
     * Unregister a select menu from collections
     * @returns {boolean}
     */
    unregister(): boolean;
}
