import type { GuildMemberStructure } from '../client';
import type { UsingClient } from '../commands';
import type { ObjectToLower, StructPropState, StructStates, ToClass } from '../common/types/util';
import type { APIGuild, APIPartialGuild, GatewayGuildCreateDispatchData, RESTPatchAPIGuildJSONBody } from '../types';
import { BaseGuild } from './extra/BaseGuild';
import type { DiscordBase } from './extra/DiscordBase';
export interface Guild extends ObjectToLower<Omit<APIGuild, 'stickers' | 'emojis' | 'roles'>>, DiscordBase {
}
declare const Guild_base: ToClass<Omit<BaseGuild, keyof ObjectToLower<APIPartialGuild>>, Guild>;
export declare class Guild<State extends StructStates = 'api'> extends Guild_base {
    joinedAt: StructPropState<number, State, 'create'>;
    memberCount: StructPropState<number, State, 'create'>;
    large: StructPropState<boolean, State, 'create'>;
    unavailable?: StructPropState<boolean, State, 'create'>;
    constructor(client: UsingClient, data: APIGuild | GatewayGuildCreateDispatchData);
    webhooks: {
        list: () => Promise<import("../client").WebhookStructure[]>;
    };
    get maxStickers(): MaxStickers;
    get maxEmojis(): MaxEmojis;
    fetchOwner(force?: boolean): Promise<GuildMemberStructure | null>;
    templates: {
        fetch: (code: string) => Promise<import("../client").GuildTemplateStructure>;
        list: () => Promise<import("../client").GuildTemplateStructure[]>;
        create: (body: import("../types").RESTPostAPIGuildTemplatesJSONBody) => Promise<import("../client").GuildTemplateStructure>;
        sync: (code: string) => Promise<import("../client").GuildTemplateStructure>;
        edit: (code: string, body: import("../types").RESTPatchAPIGuildTemplateJSONBody) => Promise<import("../client").GuildTemplateStructure>;
        delete: (code: string) => Promise<import("../client").GuildTemplateStructure>;
    };
    stickers: {
        list: () => Promise<import("../client").StickerStructure[]>;
        create: (payload: import("./Sticker").CreateStickerBodyRequest, reason?: string) => Promise<import("../client").StickerStructure>;
        edit: (stickerId: string, body: import("../types").RESTPatchAPIGuildStickerJSONBody, reason?: string) => Promise<import("../client").StickerStructure>;
        fetch: (stickerId: string, force?: boolean) => Promise<import("../client").StickerStructure>;
        delete: (stickerId: string, reason?: string) => Promise<void>;
    };
    members: {
        resolve: (resolve: import("../common").GuildMemberResolvable) => Promise<GuildMemberStructure | undefined>;
        search: (query?: import("../types").RESTGetAPIGuildMembersSearchQuery) => Promise<GuildMemberStructure[]>;
        unban: (id: string, reason?: string) => Promise<never>;
        ban: (id: string, body?: import("../types").RESTPutAPIGuildBanJSONBody, reason?: string) => Promise<void>;
        kick: (id: string, reason?: string) => Promise<void>;
        edit: (id: string, body: import("../types").RESTPatchAPIGuildMemberJSONBody, reason?: string) => Promise<GuildMemberStructure>;
        add: (id: string, body: import("../types").RESTPutAPIGuildMemberJSONBody) => Promise<GuildMemberStructure | undefined>;
        addRole: (memberId: string, id: string) => Promise<never>;
        removeRole: (memberId: string, id: string) => Promise<never>;
        fetch: (memberId: string, force?: boolean) => Promise<GuildMemberStructure>;
        list: (query?: import("../types").RESTGetAPIGuildMembersQuery, force?: boolean) => Promise<GuildMemberStructure[]>;
    };
    moderationRules: {
        list: () => Promise<import("../client").AutoModerationRuleStructure[]>;
        create: (body: import("../types").RESTPostAPIAutoModerationRuleJSONBody) => Promise<import("../client").AutoModerationRuleStructure>;
        delete: (ruleId: string, reason?: string) => Promise<never>;
        fetch: (ruleId: string) => Promise<import("../client").AutoModerationRuleStructure>;
        edit: (ruleId: string, body: import("../types").RESTPatchAPIAutoModerationRuleJSONBody, reason?: string) => Promise<import("../client").AutoModerationRuleStructure>;
    };
    roles: {
        create: (body: import("../types").RESTPostAPIGuildRoleJSONBody) => Promise<import("../client").GuildRoleStructure>;
        list: (force?: boolean) => Promise<import("../client").GuildRoleStructure[]>;
        edit: (roleId: string, body: import("../types").RESTPatchAPIGuildRoleJSONBody, reason?: string) => Promise<import("../client").GuildRoleStructure>;
        delete: (roleId: string, reason?: string) => Promise<import("../client").GuildRoleStructure>;
        editPositions: (body: import("../types").RESTPatchAPIGuildRolePositionsJSONBody) => Promise<import("../client").GuildRoleStructure[]>;
    };
    channels: {
        list: (force?: boolean) => Promise<import("./channels").AllChannels[]>;
        fetch: (id: string, force?: boolean) => Promise<import("./channels").AllChannels>;
        create: (body: import("../types").RESTPostAPIGuildChannelJSONBody) => Promise<import("./channels").AllChannels>;
        delete: (id: string, reason?: string) => Promise<import("./channels").AllChannels>;
        edit: (id: string, body: import("../types").RESTPatchAPIChannelJSONBody, reason?: string) => Promise<import("./channels").AllChannels>;
        editPositions: (body: import("../types").RESTPatchAPIGuildChannelPositionsJSONBody) => Promise<never>;
    };
    emojis: {
        edit: (emojiId: string, body: import("../types").RESTPatchAPIGuildEmojiJSONBody, reason?: string) => Promise<import("../client").GuildEmojiStructure>;
        create: (body: Parameters<import("../common").EmojiShorter["create"]>[1]) => Promise<import("../client").GuildEmojiStructure>;
        fetch: (emojiId: string, force?: boolean) => Promise<import("../client").GuildEmojiStructure>;
        list: (force?: boolean) => Promise<import("../client").GuildEmojiStructure[]>;
    };
    bans: {
        fetch: (userId: string, force?: boolean) => Promise<import("../client").GuildBanStructure>;
        list: (query?: import("../types").RESTGetAPIGuildBansQuery, force?: boolean) => Promise<import("../client").GuildBanStructure[]>;
        create: (memberId: string, body?: Parameters<import("../common/shorters/bans").BanShorter["create"]>[2], reason?: string) => Promise<void>;
        remove: (memberId: string, reason?: string) => Promise<never>;
        bulkCreate: (body: Parameters<import("../common/shorters/bans").BanShorter["bulkCreate"]>[1], reason?: string) => Promise<import("../types").RESTPostAPIGuildBulkBanResult>;
    };
    edit(body: RESTPatchAPIGuildJSONBody, reason?: string): Promise<Guild<"api">>;
}
/** Maximun custom guild emojis per level */
export type MaxEmojis = 50 | 100 | 150 | 250;
/** Maximun custom guild stickers per level */
export type MaxStickers = 5 | 15 | 30 | 60;
export {};
