/*!
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at https://mozilla.org/MPL/2.0/.
 */
import { APIButtonComponentWithCustomId, ButtonStyle } from "discord-api-types/v10";
import { ButtonInteraction, ButtonBuilder, InteractionButtonComponentData, JSONEncodable } from "discord.js";
import { RexButtonInteraction } from "../interactions/components/button.js";
import { rexExecuteFunComponentModal } from "../types/types.js";
type buttonType = InteractionButtonComponentData | APIButtonComponentWithCustomId;
/**
 * creates a reusable button that can be used for when you use the same button for command output
 */
export declare class RexButtonComponent extends ButtonBuilder {
    private execute?;
    private autoDefer?;
    private deferEphemeral;
    private debounceDelay?;
    private auditDelay?;
    private useFailover?;
    constructor(customId: string);
    constructor(data: Partial<buttonType> & ({
        custom_id: string;
    } | {
        customId: string;
    }));
    get customId(): string;
    /**
     * turns this button into an useable js object
     * @returns {APIButtonComponentWithCustomId}
     */
    toJSON(): APIButtonComponentWithCustomId;
    /**
     * Set style of the button
     * @param style button style except link style
     * @returns button
     */
    setStyle(style: Exclude<ButtonStyle, ButtonStyle.Link>): this;
    /**
     * set the function that will be executed with each interaction for this button
     * @param fun the function
     * @returns this
     */
    setExecute(fun: rexExecuteFunComponentModal<RexButtonInteraction>): this;
    /**
     * auto defer a message when there hasn't been an reply within 2.5 seconds minus ping
     * (does not work for autocomplete)
     * make sure to not use interaction.reply
     * @param defer whether there should be automatically be deferred when not responding within 2.5 seconds
     * @param ephemeral whether the auto defer should be ephemeral or not (by default false)
     */
    setAutoDefer(defer: boolean, ephemeral?: boolean): this;
    /**
     * set the delay in milliseconds for how long a debounce should last, if not set then it will be 1 second
     * @param delay delay in milliseconds
     */
    setDebounceDelay(delay: number): this;
    /**
     * set the delay in milliseconds for how long an audit should last, if not set it will be by default 1 second.
     * @param delay delay in seconds
     * @description an audit is similar to throttle but sends the most recent edit/update attempt instead of the next attempt
     * @see https://rxjs.dev/api/index/function/audit for a visual example for how audit works
     */
    setAuditDelay(delay: number): this;
    /**
     * Set if the message.edit route should be used if the interaction has expired or a rate limited had occurred
     * @param value wether you want to use the fail over
     * @returns this
     */
    setUseFailOver(value: boolean): this;
    /**
     * @ignore internal
     */
    run(inter: ButtonInteraction): unknown;
    /**
     * @deprecated not available in RexButtonComponent
     * @returns
     * @ignore not supported
     */
    setURL(): this;
    url: null;
    /**
     * Copy this button for cases where you want to use the same button but dynamic options
     * @requires executeFunction to be set with .setExecute before copy!
     */
    copy(): RexButtonComponent;
    /**
     * create a button from an existing button without the extra features from RexButtonComponent compared to a normal discord.js button
     * @param other
     * @returns
     */
    static from(other: JSONEncodable<APIButtonComponentWithCustomId> | APIButtonComponentWithCustomId): RexButtonComponent;
}
export {};
