/// <reference types="node" />
/** @module Shard */
import type ShardManager from "./ShardManager";
import type Client from "../Client";
import TypedEmitter from "../util/TypedEmitter";
import Bucket from "../rest/Bucket";
import { GatewayOPCodes } from "../Constants";
import type { UpdatePresenceOptions, RequestGuildMembersOptions, UpdateVoiceStateOptions, SendStatuses, BotActivity, ShardStatus, RequestSoundboardSoundsOptions } from "../types/gateway";
import type Member from "../structures/Member";
import type { ShardEvents } from "../types/events";
import type Soundboard from "../structures/Soundboard";
import WebSocket from "ws";
import { inspect } from "node:util";
/** Represents a gateway connection to Discord. See {@link ShardEvents | Shard Events} for a list of events. */
export default class Shard extends TypedEmitter<ShardEvents> {
    private _compressor;
    private _connectTimeout;
    private _getAllUsersCount;
    private _getAllUsersQueue;
    private _guildCreateTimeout;
    private _heartbeatInterval;
    private _requestMembersPromise;
    private _requestSoundboardSoundsPromise;
    client: Client;
    connectAttempts: number;
    connecting: boolean;
    globalBucket: Bucket;
    id: number;
    lastHeartbeatAck: boolean;
    lastHeartbeatReceived: number;
    lastHeartbeatSent: number;
    latency: number;
    manager: ShardManager;
    preReady: boolean;
    presence: Required<UpdatePresenceOptions>;
    presenceUpdateBucket: Bucket;
    ready: boolean;
    reconnectInterval: number;
    resumeURL: string | null;
    sequence: number;
    sessionID: string | null;
    status: ShardStatus;
    ws: WebSocket | null;
    constructor(id: number, manager: ShardManager);
    private _ready;
    private _resume;
    private checkReady;
    private createGuild;
    private initialize;
    private onPacket;
    private onWSClose;
    private onWSError;
    private onWSMessage;
    private onWSOpen;
    private restartGuildCreateTimeout;
    private sendPresenceUpdate;
    private get _token();
    /** Connect this shard. */
    connect(): Promise<void>;
    disconnect(reconnect?: boolean, error?: Error): void;
    /**
     * Edit this shard's status.
     * @param status The status.
     * @param activities An array of activities.
     */
    editStatus(status: SendStatuses, activities?: Array<BotActivity>): Promise<void>;
    hardReset(): void;
    heartbeat(requested?: boolean): void;
    identify(): void;
    [inspect.custom](): this;
    /**
     * Request the members of a guild.
     * @param guildID The ID of the guild to request the members of.
     * @param options The options for requesting the members.
     */
    requestGuildMembers(guildID: string, options?: RequestGuildMembersOptions): Promise<Array<Member>>;
    requestSoundboardSounds(guildID: string, options?: RequestSoundboardSoundsOptions): Promise<Array<Soundboard>>;
    reset(): void;
    resume(): void;
    send(op: GatewayOPCodes, data: unknown, priority?: boolean): void;
    toString(): string;
    /**
     * Update the voice state of this shard.
     * @param guildID The ID of the guild to update the voice state of.
     * @param channelID The ID of the voice channel to join. Null to disconnect.
     * @param options The options for updating the voice state.
     */
    updateVoiceState(guildID: string, channelID: string | null, options?: UpdateVoiceStateOptions): void;
}
