import { GuildTextBasedChannel, Guild, Message, Role, TextChannel } from 'discord.js';
import { ExtendedInteraction, ExtendedMessage, CustomizableEmbed, CustomizableButton } from './typedef';
import { EndResolve } from './handler/manageGiveaway';
/**
 * **Documentation Url** of the type: https://simplyd.js.org/docs/systems/giveaway#requirements
 */
export interface Requirements {
    type: 'Role' | 'Guild' | 'None';
    id: string;
}
/**
 * **Documentation Url** of the type: https://simplyd.js.org/docs/systems/giveaway#giveawaybuttons
 */
export interface GiveawayButtons {
    enter?: CustomizableButton;
    end?: CustomizableButton;
    reroll?: CustomizableButton;
}
/**
 * **Documentation Url** of the type: https://simplyd.js.org/docs/systems/giveaway#giveawayembeds
 */
export interface GiveawayEmbeds {
    giveaway?: CustomizableEmbed;
    load?: CustomizableEmbed;
    result?: CustomizableEmbed;
}
/**
 * **Documentation Url** of the options: https://simplyd.js.org/docs/systems/giveaway#giveawayoptions
 */
export declare type giveawayOptions = {
    prize?: string;
    winners?: number;
    channel?: GuildTextBasedChannel | TextChannel;
    time?: string;
    buttons?: GiveawayButtons;
    manager?: Role | string;
    requirements?: Requirements;
    pingRole?: Role | string;
    embed?: GiveawayEmbeds;
    type?: 'Label' | 'Emoji' | 'Both';
    strict?: boolean;
};
/**
 * **Documentation Url** of the resolve: https://simplyd.js.org/docs/systems/giveaway#giveawayresolve
 */
export interface GiveawayResolve {
    message: Message;
    winners: number;
    prize: string;
    endsAt: number;
    requirements: {
        type: 'None' | 'Role' | 'Guild';
        value: Guild | Role;
    };
}
/**
 * A **Powerful** yet simple giveaway system | *Required: **manageGiveaway()
 * @param msgOrInt
 * @param options
 * @link `Documentation:` https://simplyd.js.org/docs/systems/giveway
 * @example simplydjs.giveaway(interaction)
 */
export declare function giveaway(msgOrInt: ExtendedMessage | ExtendedInteraction, options?: giveawayOptions): Promise<GiveawayResolve | EndResolve>;
