import { RequestTypes } from 'detritus-client-rest';
import { ShardClient } from '../client';
import { BaseCollection } from '../collections/basecollection';
import { BaseSet } from '../collections/baseset';
import { GuildExplicitContentFilterTypes, GuildNSFWLevels, Locales, MfaLevels, PremiumGuildTiers } from '../constants';
import { PermissionTools, UrlQuery } from '../utils';
import { BaseStructure, BaseStructureData } from './basestructure';
import { Channel, ChannelGuildCategory, ChannelGuildStageVoice, ChannelGuildStore, ChannelGuildText, ChannelGuildThread, ChannelGuildVoice } from './channel';
import { Emoji } from './emoji';
import { Member } from './member';
import { Message } from './message';
import { Presence } from './presence';
import { Role } from './role';
import { StageInstance } from './stageinstance';
import { Sticker } from './sticker';
import { User } from './user';
import { VoiceRegion } from './voiceregion';
import { VoiceState } from './voicestate';
/**
 * Base Guild Structure
 * @category Structure
 */
export declare class BaseGuild extends BaseStructure {
    readonly _keys: BaseSet<string>;
    features: BaseSet<string>;
    icon: null | string;
    id: string;
    name: string;
    constructor(client: ShardClient, data?: BaseStructureData, isClone?: boolean);
    get acronym(): string;
    get canHaveBanner(): boolean;
    get canHaveDiscoveryFeatures(): boolean;
    get canHaveNews(): boolean;
    get canHavePublic(): boolean;
    get canHaveSplash(): boolean;
    get canHaveStore(): boolean;
    get canHaveVanityUrl(): boolean;
    get canHaveVipRegions(): boolean;
    get createdAt(): Date;
    get createdAtUnix(): number;
    get iconUrl(): null | string;
    get isDiscoverable(): boolean;
    get isPartnered(): boolean;
    get isPublic(): boolean;
    get isVerified(): boolean;
    get jumpLink(): string;
    get widgetImageUrl(): string;
    get widgetUrl(): string;
    hasFeature(feature: string): boolean;
    iconUrlFormat(format?: null | string, query?: UrlQuery): null | string;
    widgetImageUrlFormat(query?: UrlQuery): string;
    widgetUrlFormat(options?: RequestTypes.RouteWidget): string;
    ack(): Promise<any>;
    addMember(userId: string, options: RequestTypes.AddGuildMember): Promise<any>;
    addMemberRole(userId: string, roleId: string): Promise<any>;
    beginPrune(options?: RequestTypes.BeginGuildPrune): Promise<any>;
    createBan(userId: string, options: RequestTypes.CreateGuildBan): Promise<any>;
    createChannel(options: RequestTypes.CreateGuildChannel): Promise<Channel>;
    createEmoji(options: RequestTypes.CreateGuildEmoji): Promise<Emoji>;
    createIntegration(options: RequestTypes.CreateGuildIntegration): Promise<any>;
    createRole(options: RequestTypes.CreateGuildRole): Promise<Role>;
    createSticker(options: RequestTypes.CreateGuildSticker): Promise<Sticker>;
    createTemplate(options: RequestTypes.CreateGuildTemplate): Promise<import("./template").Template>;
    delete(): Promise<any>;
    deleteChannel(channelId: string, options?: RequestTypes.DeleteChannel): Promise<Channel>;
    deleteEmoji(emojiId: string, options?: RequestTypes.DeleteGuildEmoji): Promise<any>;
    deleteIntegration(integrationId: string, options?: RequestTypes.DeleteGuildIntegration): Promise<any>;
    deletePremiumSubscription(subscriptionId: string): Promise<any>;
    deleteRole(roleId: string, options?: RequestTypes.DeleteGuildRole): Promise<any>;
    deleteSticker(stickerId: string): Promise<any>;
    deleteTemplate(templateId: string): Promise<any>;
    edit(options: RequestTypes.EditGuild): Promise<Guild>;
    editChannel(channelId: string, options: RequestTypes.EditChannel): Promise<Channel>;
    editChannelPositions(channels: RequestTypes.EditGuildChannels, options?: RequestTypes.EditGuildChannelsExtra): Promise<any>;
    editEmbed(options: RequestTypes.EditGuildEmbed): Promise<any>;
    editEmoji(emojiId: string, options: RequestTypes.EditGuildEmoji): Promise<Emoji>;
    editIntegration(integrationId: string, options: RequestTypes.EditGuildIntegration): Promise<any>;
    editMember(userId: string, options: RequestTypes.EditGuildMember): Promise<any>;
    editMfaLevel(options: RequestTypes.EditGuildMfaLevel): Promise<any>;
    editNick(nick: string, options?: RequestTypes.EditGuildNick): Promise<any>;
    editRole(roleId: string, options: RequestTypes.EditGuildRole): Promise<Role>;
    editRolePositions(roles: RequestTypes.EditGuildRolePositions, options?: RequestTypes.EditGuildRolePositionsExtra): Promise<BaseCollection<string, Role>>;
    editSticker(stickerId: string, options?: RequestTypes.EditGuildSticker): Promise<Sticker>;
    editVanityUrl(code: string, options?: RequestTypes.EditGuildVanity): Promise<any>;
    editVoiceState(userId: string, options: RequestTypes.EditGuildVoiceState): Promise<any>;
    fetchApplications(channelId?: string): Promise<any>;
    fetchAuditLogs(options: RequestTypes.FetchGuildAuditLogs): Promise<BaseCollection<string, import("./auditlog").AuditLog>>;
    fetchBans(): Promise<import("../rest/types").RestResponses.FetchGuildBans>;
    fetchChannels(): Promise<BaseCollection<string, Channel>>;
    fetchEmbed(): Promise<any>;
    fetchEmoji(emojiId: string): Promise<Emoji>;
    fetchEmojis(): Promise<BaseCollection<string, Emoji>>;
    fetchInvites(): Promise<BaseCollection<string, import("./invite").Invite>>;
    fetchIntegrations(): Promise<BaseCollection<string, import("./integration").Integration>>;
    fetchMember(userId: string): Promise<Member>;
    fetchMembers(options: RequestTypes.FetchGuildMembers): Promise<BaseCollection<string, Member>>;
    fetchMembersSearch(options: RequestTypes.FetchGuildMembersSearch): Promise<BaseCollection<string, Member>>;
    fetchPremiumSubscriptions(): Promise<BaseCollection<string, import("./premiumsubscription").PremiumSubscription>>;
    fetchPruneCount(): Promise<any>;
    fetchRoles(): Promise<BaseCollection<string, Role>>;
    fetchSticker(stickerId: string): Promise<Sticker>;
    fetchStickers(): Promise<BaseCollection<string, Sticker>>;
    fetchTemplates(): Promise<BaseCollection<string, import("./template").Template>>;
    fetchVanityUrl(): Promise<any>;
    fetchVoiceRegions(): Promise<BaseCollection<string, VoiceRegion>>;
    fetchWebhooks(): Promise<BaseCollection<string, import("./webhook").Webhook>>;
    fetchWidget(): Promise<any>;
    fetchWidgetJson(): Promise<any>;
    fetchWidgetPng(options?: RequestTypes.FetchGuildWidgetPng): Promise<any>;
    join(options: RequestTypes.JoinGuild): Promise<any>;
    leave(): Promise<any>;
    removeBan(userId: string, options?: RequestTypes.RemoveGuildBan): Promise<any>;
    removeMember(userId: string, options?: RequestTypes.RemoveGuildMember): Promise<any>;
    removeMemberRole(userId: string, roleId: string, options?: RequestTypes.RemoveGuildBan): Promise<any>;
    requestMembers(options: {
        limit?: number;
        presences?: boolean;
        query: string;
        timeout?: number;
        userIds?: Array<string>;
    }): Promise<{
        members: BaseCollection<string, Member>;
        nonce: string;
        notFound: BaseSet<string>;
        presences: BaseCollection<string, Presence>;
    }>;
    search(options: RequestTypes.SearchOptions, retry?: boolean): Promise<any>;
    syncIntegration(integrationId: string): Promise<any>;
    mergeValue(key: string, value: any): void;
    toString(): string;
}
/**
 * Partial Guild Structure
 * @category Structure
 */
export declare class GuildPartial extends BaseGuild {
    readonly _keys: BaseSet<string>;
    banner: null | string;
    description: null | string;
    nsfw: boolean;
    nsfwLevel: GuildNSFWLevels;
    splash: null | string;
    vanityUrlCode: null | string;
    verificationLevel: number;
    welcomeScreen: GuildWelcomeScreen | null;
    constructor(client: ShardClient, data?: BaseStructureData, isClone?: boolean);
    get bannerUrl(): null | string;
    get splashUrl(): null | string;
    bannerUrlFormat(format?: null | string, query?: UrlQuery): null | string;
    splashUrlFormat(format?: null | string, query?: UrlQuery): null | string;
    mergeValue(key: string, value: any): void;
}
/**
 * Guild Structure
 * @category Structure
 */
export declare class Guild extends GuildPartial {
    readonly _keys: BaseSet<string>;
    readonly _keysMerge: BaseSet<string>;
    readonly _keysSkipDifference: BaseSet<string>;
    readonly _channelIds: BaseSet<string>;
    readonly _threadIds: BaseSet<string>;
    afkChannelId: null | string;
    afkTimeout: number;
    applicationCommandCount: number;
    applicationId?: null | string;
    banner: null | string;
    defaultMessageNotifications: number;
    description: null | string;
    embedChannelId: null | string;
    embedEnabled: boolean;
    explicitContentFilter: GuildExplicitContentFilterTypes;
    emojis: BaseCollection<string, Emoji>;
    features: BaseSet<string>;
    discoverySplash: null | string;
    hasMetadata: boolean;
    icon: null | string;
    id: string;
    isPartial: boolean;
    isReady: boolean;
    joinedAtUnix: number;
    large: boolean;
    lazy: boolean;
    left: boolean;
    maxMembers: number;
    maxPresences: number;
    maxVideoChannelUsers: number;
    memberCount: number;
    members: BaseCollection<string, Member>;
    mfaLevel: MfaLevels;
    name: string;
    nsfw: boolean;
    nsfwLevel: GuildNSFWLevels;
    ownerId: string;
    preferredLocale: Locales;
    premiumSubscriptionCount: number;
    premiumTier: PremiumGuildTiers;
    publicUpdatesChannelId: null | string;
    region: string;
    roles: BaseCollection<string, Role>;
    rulesChannelId: null | string;
    splash: null | string;
    stageInstances: BaseCollection<string, StageInstance>;
    stickers: BaseCollection<string, Sticker>;
    systemChannelFlags: number;
    systemChannelId: null | string;
    unavailable: boolean;
    vanityUrlCode: null | string;
    verificationLevel: number;
    welcomeScreen: GuildWelcomeScreen | null;
    widgetChannelId: null | string;
    widgetEnabled: boolean;
    constructor(client: ShardClient, data?: BaseStructureData, isClone?: boolean);
    get afkChannel(): Channel | null;
    get allTextChannels(): BaseCollection<string, ChannelGuildText>;
    get allVoiceChannels(): BaseCollection<string, ChannelGuildStageVoice | ChannelGuildVoice>;
    get categoryChannels(): BaseCollection<string, ChannelGuildCategory>;
    get channels(): BaseCollection<string, Channel>;
    get defaultRole(): null | Role;
    get discoverySplashUrl(): null | string;
    get hasSystemChannelSuppressJoinNotifications(): boolean;
    get hasSystemChannelSuppressPremiumSubscriptions(): boolean;
    get joinedAt(): Date | null;
    get maxAttachmentSize(): number;
    get maxBitrate(): number;
    get maxEmojis(): number;
    get me(): Member | null;
    get messages(): BaseCollection<string, Message>;
    get owner(): null | User;
    get preferredLocaleText(): string;
    get presences(): BaseCollection<string, Presence>;
    get publicUpdatesChannel(): Channel | null;
    get rulesChannel(): Channel | null;
    get stageVoiceChannels(): BaseCollection<string, ChannelGuildStageVoice>;
    get storeChannels(): BaseCollection<string, ChannelGuildStore>;
    get systemChannel(): Channel | null;
    get textChannels(): BaseCollection<string, ChannelGuildText>;
    get threads(): BaseCollection<string, ChannelGuildThread>;
    get voiceChannels(): BaseCollection<string, ChannelGuildVoice>;
    get voiceStates(): BaseCollection<string, VoiceState>;
    can(permissions: PermissionTools.PermissionChecks, member?: Member | null, options?: {
        ignoreAdministrator?: boolean;
        ignoreOwner?: boolean;
    }): boolean;
    discoverySplashUrlFormat(format?: null | string, query?: UrlQuery): null | string;
    hasSystemChannelFlag(flag: number): boolean;
    isOwner(userId: string): boolean;
    fetchVoiceRegion(): Promise<VoiceRegion>;
    mergeValue(key: string, value: any): void;
}
/**
 * Guild Me Structure
 * @category Structure
 */
export declare class GuildMe extends BaseGuild {
    readonly _keys: BaseSet<string>;
    owner: boolean;
    permissions: bigint;
    constructor(client: ShardClient, data?: BaseStructureData, isClone?: boolean);
    can(permissions: PermissionTools.PermissionChecks, options?: {
        ignoreAdministrator?: boolean;
        ignoreOwner?: boolean;
    }): boolean;
    mergeValue(key: string, value: any): void;
}
/**
 * Guild Welcome Screen, used in [[Guild]]
 * @category Structure
 */
export declare class GuildWelcomeScreen extends BaseStructure {
    readonly _uncloneable = true;
    readonly _keys: BaseSet<string>;
    description: string;
    welcomeChannels: BaseCollection<string, GuildWelcomeScreenChannel>;
    constructor(client: ShardClient, data?: BaseStructureData, isClone?: boolean);
    mergeValue(key: string, value: any): void;
}
/**
 * Guild Welcome Screen Channel, used in [[GuildWelcomeScreen]]
 * @category Structure
 */
export declare class GuildWelcomeScreenChannel extends BaseStructure {
    readonly _uncloneable = true;
    readonly _keys: BaseSet<string>;
    readonly guildWelcomeScreen: GuildWelcomeScreen;
    channelId: string;
    description: string;
    emojiId?: string;
    emojiName: string | null;
    constructor(guildWelcomeScreen: GuildWelcomeScreen, data: BaseStructureData);
}
