import { Client, Message, TextBasedChannel, VoiceState, type GuildChannel, type GuildMember, type PartialGuildMember } from "discord.js";
import { EventEmitter } from "eventemitter3";
import type { CachedOptions, Options, Settings, UserCache, Users } from "./interfaces";
import { Database } from "./services";
import { API } from "./services/api";
export * from "./canvas/leaderboard/custom";
export type * from "./interfaces";
export type * from "./services";
export type * from "./services/api";
export * from "./utils";
export declare class Leveling extends Database {
    #private;
    client: Client;
    /**
     * The manager to configure the leveling data ()
     */
    api: API;
    constructor(client: Client, mongodbURI: string, dbName?: string);
    private webhook;
    /**
     * Emits when the cooldown is added for the user
     */
    onCooldown(listener: (message: Message<true>, cooldown: UserCache) => unknown): EventEmitter<string | symbol, any>;
    /**
     * Emits when someone levels up in a server.
     */
    onLevelUp(listener: (member: GuildMember, profile: Users & {
        _id: string;
    }, server: Settings & {
        _id: string;
    }, level: number, channel: GuildChannel | null) => unknown): EventEmitter<string | symbol, any>;
    private send;
    /**
     * Emits when someone gains xp in a server.
     */
    onXP(listener: (member: GuildMember, profile: Users & {
        _id: string;
    }, server: Settings & {
        _id: string;
    }, xp: number) => unknown): EventEmitter<string | symbol, any>;
    /**
     * Use this to start listening for events and automatically handle xp/leveling
     */
    start(): Promise<true | undefined>;
    voiceStateUpdate(old: VoiceState, voice: VoiceState): Promise<void>;
    guildMemberRemove(m: GuildMember | PartialGuildMember): Promise<void>;
    messageCreate(message: Message): Promise<null | undefined>;
    sendOptions(user: Users, db: Settings, member: GuildMember, options: Options, channel: TextBasedChannel): Promise<void | Message<true> | import("discord.js").APIMessage | null>;
    getOptions(options: Options, user: Users, member: GuildMember): Promise<object>;
    /**
     * This is only for internal use!
     *
     */
    handleLevelups(member: GuildMember, currentChannel: TextBasedChannel | null, xp: number, db?: CachedOptions<Settings> | null, voiceMinutes?: number, isLevelup?: boolean | null): Promise<null | undefined>;
}
