import { RequestTypes } from 'detritus-client-rest';
import { ShardClient } from '../client';
import { BaseCollection } from '../collections/basecollection';
import { BaseSet } from '../collections/baseset';
import { ApplicationCommandOptionTypes, ApplicationCommandPermissionTypes, ApplicationCommandTypes } from '../constants';
import { BaseStructure, BaseStructureData } from './basestructure';
import { User } from './user';
/**
 * Application Command Structure
 * @category Structure
 */
export declare class ApplicationCommand extends BaseStructure {
    readonly _keys: BaseSet<string>;
    applicationId: string;
    defaultPermission: boolean;
    description: string;
    guildId?: string;
    id: string;
    name: string;
    options?: BaseCollection<string, ApplicationCommandOption>;
    type: ApplicationCommandTypes;
    version: string;
    constructor(client: ShardClient, data: BaseStructureData, isClone?: boolean);
    get _optionsKey(): string;
    get hash(): string;
    get key(): string;
    edit(options: RequestTypes.EditApplicationCommand | RequestTypes.EditApplicationGuildCommand): Promise<ApplicationCommand>;
    delete(): Promise<any>;
    mergeValue(key: string, value: any): void;
}
/**
 * Application Command Option Structure
 * @category Structure
 */
export declare class ApplicationCommandOption extends BaseStructure {
    readonly _keys: BaseSet<string>;
    readonly command: ApplicationCommand;
    choices?: BaseCollection<string, ApplicationCommandOptionChoice>;
    description: string;
    name: string;
    options?: BaseCollection<string, ApplicationCommandOption>;
    required: boolean;
    type: ApplicationCommandOptionTypes;
    constructor(command: ApplicationCommand, data: BaseStructureData, isClone?: boolean);
    get _choicesKey(): string;
    get _optionsKey(): string;
    get key(): string;
    mergeValue(key: string, value: any): void;
}
/**
 * Application Command Option Choice Structure
 * @category Structure
 */
export declare class ApplicationCommandOptionChoice extends BaseStructure {
    readonly _keys: BaseSet<string>;
    readonly option: ApplicationCommandOption;
    name: string;
    value: string | number;
    constructor(option: ApplicationCommandOption, data: BaseStructureData, isClone?: boolean);
    get key(): string;
}
/**
 * Application Command Permissions Structure
 * @category Structure
 */
export declare class ApplicationCommandPermissions extends BaseStructure {
    readonly _keys: BaseSet<string>;
    applicationId: string;
    guildId: string;
    id: string;
    permissions: BaseCollection<string, ApplicationCommandPermission>;
    constructor(client: ShardClient, data: BaseStructureData, isClone?: boolean);
    mergeValue(key: string, value: any): void;
}
/**
 * Application Command Permission Structure
 * @category Structure
 */
export declare class ApplicationCommandPermission extends BaseStructure {
    readonly _keys: BaseSet<string>;
    readonly commandPermissions: ApplicationCommandPermissions;
    id: string;
    permission: boolean;
    type: ApplicationCommandPermissionTypes;
    constructor(commandPermissions: ApplicationCommandPermissions, data: BaseStructureData, isClone?: boolean);
    get isRole(): boolean;
    get isUser(): boolean;
    get user(): User | null;
}
