import { SlashCommandBuilder, ApplicationCommandType, ApplicationCommandDataResolvable } from 'discord.js';
import type { AoiClient, AwaitCommand } from 'aoi.js';
export declare class CommandManagerError extends Error {
    constructor(message: string);
}
export interface ICommand extends AwaitCommand {
    data: SlashCommandBuilder | Record<string, any>;
    type?: ApplicationCommandType;
}
export interface ApplicationCommandManagerOptions {
    path?: string;
    guildIds?: string[];
    showTable?: boolean;
    checkUpdates?: boolean;
    validateCommands?: boolean;
}
export declare class ApplicationCommandManager {
    #private;
    constructor(bot: AoiClient, options?: ApplicationCommandManagerOptions);
    /**
     * Load all application commands inside a directory.
     * @param dir - Application commands directory.
     * @throws {CommandManagerError} If the directory is invalid or commands are invalid
     */
    load(dir: string): Promise<void>;
    /**
     * Sync all application commands with the Discord API.
     * @param guildIDs - Optional array of guild IDs to sync commands to
     * @throws {CommandManagerError} If guild IDs are invalid or sync fails
     */
    sync(guildIDs?: string[]): Promise<void>;
    /**
     * Clear all cached commands.
     * @returns {ApplicationCommandManager}
     */
    clearCommands(): ApplicationCommandManager;
    /**
     * Returns the number of cached commands.
     * @returns {number}
     */
    commandSize(): number;
    /**
     * Get all registered commands
     * @returns {ApplicationCommandDataResolvable[]}
     */
    getCommands(): ApplicationCommandDataResolvable[];
    /**
     * Command specifications directory.
     */
    get directory(): string | null;
}
