/// <reference types="mongoose/types/aggregate" />
/// <reference types="mongoose/types/callback" />
/// <reference types="mongoose/types/collection" />
/// <reference types="mongoose/types/connection" />
/// <reference types="mongoose/types/cursor" />
/// <reference types="mongoose/types/document" />
/// <reference types="mongoose/types/error" />
/// <reference types="mongoose/types/expressions" />
/// <reference types="mongoose/types/helpers" />
/// <reference types="mongoose/types/middlewares" />
/// <reference types="mongoose/types/indexes" />
/// <reference types="mongoose/types/models" />
/// <reference types="mongoose/types/mongooseoptions" />
/// <reference types="mongoose/types/pipelinestage" />
/// <reference types="mongoose/types/populate" />
/// <reference types="mongoose/types/query" />
/// <reference types="mongoose/types/schemaoptions" />
/// <reference types="mongoose/types/schematypes" />
/// <reference types="mongoose/types/session" />
/// <reference types="mongoose/types/types" />
/// <reference types="mongoose/types/utility" />
/// <reference types="mongoose/types/validation" />
/// <reference types="mongoose/types/virtuals" />
/// <reference types="mongoose" />
/// <reference types="mongoose/types/inferschematype" />
import { Leveling } from "..";
import type { AnnounceToggleTypes, CachedOptions, CanvasLeaderboardTypes, CanvasRankProfileTypes, CanvasResponse, CanvasResponseWithQuery, ColorType, LeaderboardCanvasOptions, LeaderboardFormatted, LeaderboardFormattedResponse, LeaderboardOptions, LeaderboardUser, OptionalOptions, ServerToggleTypes, Settings, UserToggles, Users, Weekly } from "../interfaces";
export declare class API {
    #private;
    constructor(client: Leveling);
    get servers(): {
        /**
         * Get a certain server's data
         */
        get: (guildId: string) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            data: import("mongoose").FlattenMaps<Settings & {
                _id: import("mongoose").Types.ObjectId;
            }>;
        }>;
        setWebhook: (guildId: string, options: {
            name?: string | null;
            image?: string | null;
        }) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            message: string;
        }>;
        /**
         * Fetch multiple servers data
         */
        fetchAll: (guildIds?: string[]) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            data: never[] | (import("mongoose").FlattenMaps<Settings> & {
                _id: import("mongoose").Types.ObjectId;
            })[];
        }>;
        /**
         * Toggle on/off certain features for the server.
         */
        toggle: (guildId: string, type: ServerToggleTypes) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            message: string;
        }>;
        /**
         * Set the cooldown for XP earned on a certain server or create a custom cooldown for certain roles.
         * NOTE: This is in seconds!
         */
        cooldown: (guildId: string, seconds: number, roles?: string[]) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            message: string;
        }>;
        /**
         * Set the min/max XP earned for messages on a certain server.
         */
        setXP: (guildId: string, options: {
            min?: number;
            max?: number;
        }) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            message: string;
        }>;
        weekly: {
            /**
             * Set/Reset a certain channel for the weekly leaderboard announcements
             */
            setChannel: (guildId: string, channelId: string) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
            /**
             * Set/Reset weekly leaderboard ping roles
             * These role(s) will get mentioned when a new weekly leaderboard is posted.
             */
            setRoles: (guildId: string, roles: string[]) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
        };
        /**
         * Import leaderboards from other bots
         */
        import: (guildId: string, targetGuildId: string, type?: "amari" | "mee6") => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            message: string;
        }>;
        announce: {
            /**
             * Toggle on/off certain features for a certain server.
             */
            toggle: (guildId: string, type: AnnounceToggleTypes) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
            /**
             * Set/Reset the content/embeds for certain types on a certain server.
             */
            setMessage: (guildId: string, type: "dm" | "channel", options: OptionalOptions) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
            /**
             * Set/Reset the announcement channel for level ups.
             */
            setChannel: (guildId: string, channelId: string) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
        };
        levels: {
            /**
             * Add a level to a certain server.
             * NOTE: (add: Will add roles to the users once they level up, remove: Will remove roles from the user once they level up)
             */
            add: (guildId: string, level: number, options?: {
                levelName?: string | undefined;
                add?: string[] | undefined;
                remove?: string[] | undefined;
                options?: OptionalOptions | undefined;
            } | undefined) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
            /**
             * Remove a certain level from a certain server.
             */
            remove: (guildId: string, level: number) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
            /**
             * Set/Reset a certain level's (ADD) roles
             * These roles will get added once the user reaches this level
             */
            addRoles: (guildId: string, level: number, roles: string[]) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
            /**
             * Set/Reset a certain level's (REMOVE) roles
             * These roles will get removed once the user reaches this level
             */
            removeRoles: (guildId: string, level: number, roles: string[]) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
            /**
             * Set/Reset a certain level's announcement message for a certain server.
             */
            setMessage: (guildId: string, options: OptionalOptions, level: number) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
            get: (guildId: string, level: number) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                data: {
                    level: number;
                    levelName: string;
                    options: import("..").Options;
                    roles: {
                        add: string[];
                        remove: string[];
                    };
                };
            }>;
            getLevelName: (guildId: string, level: number) => Promise<{
                status: true;
                message: string;
            }>;
        };
        multipliers: {
            /**
             * Add a multiplier to a certain server.
             */
            add: (guildId: string, multiplier: number, options?: {
                roles?: string[];
                channels?: string[];
            }) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
            /**
             * Remove a multiplier from a certain server.
             */
            remove: (guildId: string, multiplier: number) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
            /**
             * Add/Remove certain channels from being able to use this multiplier in a certain server.
             */
            channels: (guildId: string, multiplier: number, channels: string[]) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
            /**
             * Add/Remove certain roles from being able to use this multiplier in a certain server.
             */
            roles: (guildId: string, multiplier: number, roles: string[]) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
        };
        ignore: {
            /**
             * Toggle on/off certain channels from being ignored in a certain server. (they will not gain XP)
             */
            channels: (guildId: string, channels: string[]) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
            /**
             * Toggle on/off certain roles from being ignored in a certain server. (they will not gain XP)
             */
            roles: (guildId: string, roles: string[]) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
            /**
             * Toggle on/off certain users from being ignored in a certain server. (they will not gain XP)
             */
            users: (guildId: string, users: string[]) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
        };
        leaderboard: {
            /**
             * Get the leaderboard for a certain server.
             */
            get: <D>(guildId: string, options?: LeaderboardOptions, board?: D | undefined) => Promise<{
                status: false;
                message: string;
            } | LeaderboardFormattedResponse<LeaderboardUser[]>>;
            /**
             * Get the formatted leaderboard for a certain server.
             * This will fetch the users information to have their Discord info in the returned data.
             */
            formatted: <D_1>(guildId: string, options?: LeaderboardOptions, forceStatic?: boolean, board?: D_1 | undefined) => Promise<{
                status: false;
                message: string;
            } | LeaderboardFormattedResponse<LeaderboardFormatted[]>>;
            /**
             * Set the leaderboard background (or color) for a certain server
             * NOTE: Only available to 'canvacord' leaderboard type
             */
            setBackground: (guildId: string, options: {
                url?: string | null;
                color?: string | null;
            }) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
        };
        /**
         * Delete all data belonging to a certain server (main data)
         */
        delete: (guildId: string) => Promise<{
            status: boolean;
            message: string;
            data: {
                data: CachedOptions<Settings> | null;
                weekly: CachedOptions<Weekly>[];
                users: CachedOptions<Users>[];
            };
        }>;
        users: {
            get: (guildId: string) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                data: never[] | (import("mongoose").FlattenMaps<Users> & {
                    _id: import("mongoose").Types.ObjectId;
                })[];
            }>;
            count: (guildId: string) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                data: {
                    count: number;
                };
            }>;
            reset: (guildId: string) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                data: {
                    count: number;
                    users: never[] | (import("mongoose").FlattenMaps<Users> & {
                        _id: import("mongoose").Types.ObjectId;
                    })[];
                };
            }>;
            left: (guildId: string, dry?: boolean) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                data: {
                    count: number;
                    deleted: boolean;
                };
            }>;
        };
    };
    get users(): {
        stats: {
            /**
             * Increments the stats count for the type provided.
             * - Supports custom stats counters (default: 'messages', 'voice')
             * - 'voice' is total minutes spent in a voice channel.
             */
            inc: (userId: string, guildId: string, type: string, count?: number) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
            /**
             * Decrements the stats count for the type provided.
             * - Supports custom stats counters (default: 'messages', 'voice')
             * - 'voice' is total minutes spent in a voice channel.
             */
            dec: (userId: string, guildId: string, type: string, count?: number) => Promise<{
                status: false;
                message: string;
            } | {
                status: true;
                message: string;
            }>;
        };
        /**
         * Get a user's rank position for a server.
         */
        position: (userId: string, guildId: string, sort?: "ascending" | "descending") => Promise<number>;
        /**
         * Get a user's profile data for a server.
         */
        get: (userId: string, guildId: string) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            data: import("mongoose").FlattenMaps<Users & {
                _id: import("mongoose").Types.ObjectId;
            }>;
        }>;
        /**
         * Get all profile data for a server
         */
        fetchAll: (userId: string) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            data: never[] | (import("mongoose").FlattenMaps<Users> & {
                _id: import("mongoose").Types.ObjectId;
            })[];
        }>;
        /**
         * Toggle certain features for a user on a server.
         */
        toggle: (userId: string, guildId: string, type: UserToggles) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            message: string;
        }>;
        /**
         * [WARNING]: This should only be used for internal use, as any XP added will trigger a "levelup" event
         */
        appendXP: (userId: string, guildId: string, xp: number, voiceMinutes?: number, handledInternally?: boolean) => Promise<boolean | null>;
        /**
         * Set a level for a user on a certain server.
         */
        setLevel: (userId: string, guildId: string, level: number) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            message: string;
        }>;
        /**
         * Set/Reset a background for a user on a certain server.
         */
        setBackground: (userId: string, guildId: string, background?: string) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            message: string;
        }>;
        /**
         * Set/Reset a background for a user on a certain server.
         */
        setForeground: (userId: string, guildId: string, foreground?: string) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            message: string;
        }>;
        /**
         * Set/Reset color(s) for a user on a certain server.
         */
        setColor: (userId: string, guildId: string, type: ColorType, color?: string | number) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            message: string;
        }>;
        /**
         * Set XP for a user on a certain server.
         */
        setXP: (userId: string, guildId: string, xp: number) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            message: string;
        }>;
        /**
         * Create a user's profile in a certain server.
         * NOTE: The package will automatically create it once they send a message or earn xp
         */
        create: (userId: string, guildId: string) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            data: import("mongoose").FlattenMaps<Users & {
                _id: import("mongoose").Types.ObjectId;
            }>;
        }>;
        delete: {
            /**
             * Delete all data for a user.
             */
            all: (userId: string) => Promise<{
                status: false;
                message: string;
            } | {
                status: boolean;
                data: never[] | (import("mongoose").Document<unknown, {}, Users> & Users & {
                    _id: import("mongoose").Types.ObjectId;
                })[];
                message: string;
            }>;
            /**
             * Delete a user's data for a certain server.
             */
            guild: (userId: string, guildId: string) => Promise<{
                status: false;
                message: string;
            } | {
                status: boolean;
                message: string;
                data: import("mongoose").Document<unknown, {}, Users> & Users & {
                    _id: import("mongoose").Types.ObjectId;
                };
            }>;
        };
        /**
         * Mass delete certain users data from the system
         * NOTE: Deletes ALL the users profiles for ALL servers
         */
        purge: (dry: boolean | undefined, users: string[]) => Promise<{
            status: false;
            message: string;
        } | {
            status: boolean;
            message: string;
            data: never[] | (import("mongoose").FlattenMaps<Users> & {
                _id: import("mongoose").Types.ObjectId;
            })[];
        }>;
    };
    get weekly(): {
        /**
         * Get a server's weekly data (or a certain weeklyId's info)
         */
        get: (guildId: string, weeklyId?: string) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            data: import("mongoose").FlattenMaps<Weekly & {
                _id: import("mongoose").Types.ObjectId;
            }>;
        }>;
        /**
         * Get all of the weekly data for a server.
         */
        fetchAll: (guildId: string) => Promise<{
            status: false;
            message: string;
        } | {
            status: true;
            data: never[] | (import("mongoose").FlattenMaps<Weekly> & {
                _id: import("mongoose").Types.ObjectId;
            })[];
        }>;
        /**
         * Get the server's weekly leaderboard data.
         */
        leaderboard: (guildId: string, weeklyId?: string, options?: LeaderboardOptions) => Promise<{
            status: false;
            message: string;
        } | LeaderboardFormattedResponse<LeaderboardFormatted[]>>;
    };
    /**
     * Get the rank card for the user for a certain server.
     * Returns an image buffer
     */
    getRankCard(userId: string, guildId: string, type?: CanvasRankProfileTypes): CanvasResponse;
    /**
     * Get a server's leaderboard
     * Returns an image buffer
     */
    getLeaderboard(guildId: string, options?: Omit<LeaderboardCanvasOptions, "background" | "backgroundColor">, type?: CanvasLeaderboardTypes, isWeekly?: boolean, details?: {
        title?: string;
        subtitle?: string;
        image?: string;
        backgroundUrl?: string;
        backgroundColor?: string;
    } | null | undefined, weeklyId?: string): CanvasResponseWithQuery;
}
