import { type If, Logger } from '../common';
import type { Adapter } from './adapters';
import { Guilds } from './resources/guilds';
import { Users } from './resources/users';
import type { InternalOptions, UsingClient } from '../commands';
import { type GatewayDispatchPayload, GatewayIntentBits } from '../types';
import { Bans } from './resources/bans';
import { Channels } from './resources/channels';
import { Emojis } from './resources/emojis';
import { Members } from './resources/members';
import { Messages } from './resources/messages';
import { Overwrites } from './resources/overwrites';
import { Presences } from './resources/presence';
import { Roles } from './resources/roles';
import { StageInstances } from './resources/stage-instances';
import { Stickers } from './resources/stickers';
import { VoiceStates } from './resources/voice-states';
export { BaseResource } from './resources/default/base';
export { GuildBasedResource } from './resources/default/guild-based';
export { GuildRelatedResource } from './resources/default/guild-related';
export type InferAsyncCache = InternalOptions extends {
    asyncCache: infer P;
} ? P : false;
export type ReturnCache<T> = If<InferAsyncCache, Promise<T>, T>;
export type GuildBased = 'members' | 'voiceStates';
export type GuildRelated = 'emojis' | 'roles' | 'channels' | 'stickers' | 'presences' | 'stageInstances' | 'overwrites' | 'messages' | 'bans';
export type NonGuildBased = 'users' | 'guilds';
export type SeyfertBased = 'onPacket';
type ReturnManagers = {
    [K in NonGuildBased | GuildBased | GuildRelated]: NonNullable<Awaited<ReturnType<NonNullable<Cache[K]>['get']>>>;
};
export * from './adapters/index';
export type CachedEvents = 'READY' | 'GUILD_CREATE' | 'GUILD_UPDATE' | 'GUILD_DELETE' | 'CHANNEL_CREATE' | 'CHANNEL_UPDATE' | 'CHANNEL_DELETE' | 'GUILD_ROLE_CREATE' | 'GUILD_ROLE_UPDATE' | 'GUILD_ROLE_DELETE' | 'GUILD_BAN_ADD' | 'GUILD_BAN_REMOVE' | 'GUILD_EMOJIS_UPDATE' | 'GUILD_STICKERS_UPDATE' | 'GUILD_MEMBER_ADD' | 'GUILD_MEMBER_UPDATE' | 'GUILD_MEMBER_REMOVE' | 'MESSAGE_CREATE' | 'PRESENCE_UPDATE' | 'THREAD_DELETE' | 'THREAD_CREATE' | 'THREAD_UPDATE' | 'USER_UPDATE' | 'VOICE_STATE_UPDATE' | 'STAGE_INSTANCE_CREATE' | 'STAGE_INSTANCE_UPDATE' | 'STAGE_INSTANCE_DELETE';
export type DisabledCache = {
    [P in NonGuildBased | GuildBased | GuildRelated | SeyfertBased]?: boolean;
};
export declare class Cache {
    intents: number;
    adapter: Adapter;
    users?: Users;
    guilds?: Guilds;
    members?: Members;
    voiceStates?: VoiceStates;
    overwrites?: Overwrites;
    roles?: Roles;
    emojis?: Emojis;
    channels?: Channels;
    stickers?: Stickers;
    presences?: Presences;
    stageInstances?: StageInstances;
    messages?: Messages;
    bans?: Bans;
    __logger__?: Logger;
    constructor(intents: number, adapter: Adapter, disabledCache: DisabledCache, client: UsingClient);
    buildCache(disabledCache: DisabledCache, client: UsingClient): void;
    flush(): ReturnCache<void>;
    hasIntent(intent: keyof typeof GatewayIntentBits): boolean;
    get hasGuildsIntent(): boolean;
    get hasRolesIntent(): boolean;
    get hasChannelsIntent(): boolean;
    get hasGuildMembersIntent(): boolean;
    get hasGuildExpressionsIntent(): boolean;
    get hasVoiceStatesIntent(): boolean;
    get hasPrenseceUpdates(): boolean;
    get hasDirectMessages(): boolean;
    get hasModerationIntent(): boolean;
    bulkGet(keys: (readonly [
        NonGuildBased | GuildRelated,
        string
    ] | readonly [
        GuildBased,
        string,
        string
    ])[]): Promise<Partial<{
        messages: ReturnManagers['messages'][];
        users: ReturnManagers['users'][];
        guilds: ReturnManagers['guilds'][];
        members: ReturnManagers['members'][];
        voiceStates: ReturnManagers['voiceStates'][];
        emojis: ReturnManagers['emojis'][];
        roles: ReturnManagers['roles'][];
        channels: ReturnManagers['channels'][];
        stickers: ReturnManagers['stickers'][];
        presences: ReturnManagers['presences'][];
        stageInstances: ReturnManagers['stageInstances'][];
        overwrites: ReturnManagers['overwrites'][];
        bans: ReturnManagers['bans'][];
    }>>;
    bulkPatch(keys: (readonly [
        CacheFrom,
        NonGuildBased,
        any,
        string
    ] | readonly [
        CacheFrom,
        GuildBased | GuildRelated,
        any,
        string,
        string
    ])[]): Promise<void>;
    bulkSet(keys: (readonly [
        CacheFrom,
        NonGuildBased,
        any,
        string
    ] | readonly [
        CacheFrom,
        GuildBased | GuildRelated,
        any,
        string,
        string
    ])[]): Promise<void>;
    onPacket(event: GatewayDispatchPayload): Promise<void>;
    protected onPacketDefault(event: GatewayDispatchPayload): Promise<void>;
    testAdapter(): Promise<void>;
    private testUsersAndMembers;
    private testChannelsAndOverwrites;
}
export declare enum CacheFrom {
    Gateway = 1,
    Rest = 2,
    Test = 3
}
