Client
Main Fluxer bot client. Connects to the gateway, emits events, and provides REST access.
Extends EventEmitter
Constructor
(options: ClientOptions)| Param | Type | Description |
|---|---|---|
| options | ClientOptions |
Properties
: ChannelManager (readonly)Channel cache and manager.
: ClientEventMethods (readonly)Typed event handlers. Prefer `client.events.*` or `client.on(Events.*, ...)`.
: GuildManager (readonly)Guild cache and manager.
: ResolvedInstance (readonly)Resolved instance endpoints (API, CDN, invite, …) for this client. Isolated per client — safe for multi-instance processes.
: ClientOptions (readonly)Resolved client options (cache defaults applied).
: PackManager (readonly)Emoji/sticker pack REST wrappers (`/packs/*`).
: Date | nullTimestamp when the client became ready. Null until READY is received.
: REST (readonly)REST client for making API requests.
: { readonly channel: (id: ) => `/channels/${string}`; readonly channelMessages: (id: ) => `/channels/${string}/messages`; readonly channelMessage: (channelId: , messageId: ) => `/channels/${string}/messages/${string}`; readonly channelMessageReactions: (channelId: , messageId: ) => `/channels/${string}/messages/${string}/reactions`; readonly channelMessageReaction: (channelId: , messageId: , emoji: string) => `/channels/${string}/messages/${string}/reactions/${string}`; readonly channelMessageReactionMe: (channelId: , messageId: , emoji: string) => `/channels/${string}/messages/${string}/reactions/${string}/@me`; readonly channelMessageReactionUsers: (channelId: , messageId: , emoji: string) => `/channels/${string}/messages/${string}/reactions/${string}/users`; readonly channelMessageReactionUser: (channelId: , messageId: , emoji: string, userId: ) => `/channels/${string}/messages/${string}/reactions/${string}/${string}`; readonly channelPins: (id: ) => `/channels/${string}/messages/pins`; readonly channelPinMessage: (channelId: , messageId: ) => `/channels/${string}/pins/${string}`; readonly channelBulkDelete: (id: ) => `/channels/${string}/messages/bulk-delete`; readonly channelBulkDeleteMine: (id: ) => `/channels/${string}/messages/bulk-delete-mine`; readonly channelMessagesAck: (id: ) => `/channels/${string}/messages/ack`; readonly channelMessagesPurge: (id: ) => `/channels/${string}/messages/purge`; readonly channelPinsAck: (id: ) => `/channels/${string}/pins/ack`; readonly channelAttachments: (id: ) => `/channels/${string}/attachments`; readonly channelAttachmentsComplete: (id: ) => `/channels/${string}/attachments/complete`; readonly channelsMessagesBulk: () => "/channels/messages/bulk"; readonly channelWebhooks: (id: ) => `/channels/${string}/webhooks`; readonly channelTyping: (id: ) => `/channels/${string}/typing`; readonly channelRtcRegions: (id: ) => `/channels/${string}/rtc-regions`; readonly channelSlowmode: (id: ) => `/channels/${string}/slowmode`; readonly channelInvites: (id: ) => `/channels/${string}/invites`; readonly channelPermission: (channelId: , overwriteId: ) => `/channels/${string}/permissions/${string}`; readonly channelRecipient: (channelId: , userId: ) => `/channels/${string}/recipients/${string}`; readonly channelMessageAttachment: (channelId: , messageId: , attachmentId: ) => `/channels/${string}/messages/${string}/attachments/${string}`; readonly guilds: () => "/guilds"; readonly guild: (id: ) => `/guilds/${string}`; readonly guildDelete: (guildId: ) => `/guilds/${string}/delete`; readonly guildVanityUrl: (guildId: ) => `/guilds/${string}/vanity-url`; readonly guildTransferOwnership: (guildId: ) => `/guilds/${string}/transfer-ownership`; readonly guildRolesHoistPositions: (guildId: ) => `/guilds/${string}/roles/hoist-positions`; readonly guildEmojisBulk: (guildId: ) => `/guilds/${string}/emojis/bulk`; readonly guildEmojisClone: (guildId: ) => `/guilds/${string}/emojis/clone`; readonly guildStickersBulk: (guildId: ) => `/guilds/${string}/stickers/bulk`; readonly guildStickersClone: (guildId: ) => `/guilds/${string}/stickers/clone`; readonly guildDiscovery: (guildId: ) => `/guilds/${string}/discovery`; readonly guildChannels: (id: ) => `/guilds/${string}/channels`; readonly guildMembers: (id: ) => `/guilds/${string}/members`; readonly guildMembersSearch: (id: ) => `/guilds/${string}/members-search`; readonly guildMember: (guildId: , userId: ) => `/guilds/${string}/members/${string}`; readonly guildMemberMe: (guildId: ) => `/guilds/${string}/members/@me`; readonly guildMemberRole: (guildId: , userId: , roleId: ) => `/guilds/${string}/members/${string}/roles/${string}`; readonly guildRoles: (id: ) => `/guilds/${string}/roles`; readonly guildRole: (guildId: , roleId: ) => `/guilds/${string}/roles/${string}`; readonly guildBans: (id: ) => `/guilds/${string}/bans`; readonly guildBan: (guildId: , userId: ) => `/guilds/${string}/bans/${string}`; readonly guildInvites: (id: ) => `/guilds/${string}/invites`; readonly invite: (code: string) => `/invites/${string}`; readonly guildAuditLogs: (id: ) => `/guilds/${string}/audit-logs`; readonly guildEmojis: (id: ) => `/guilds/${string}/emojis`; readonly guildEmoji: (guildId: , emojiId: ) => `/guilds/${string}/emojis/${string}`; readonly guildStickers: (id: ) => `/guilds/${string}/stickers`; readonly guildSticker: (guildId: , stickerId: ) => `/guilds/${string}/stickers/${string}`; readonly guildWebhooks: (id: ) => `/guilds/${string}/webhooks`; readonly webhook: (id: ) => `/webhooks/${string}`; readonly webhookExecute: (id: , token: string) => `/webhooks/${string}/${string}`; readonly webhookMessage: (id: , token: string, messageId: ) => `/webhooks/${string}/${string}/messages/${string}`; readonly user: (id: ) => `/users/${string}`; readonly currentUser: () => "/users/@me"; readonly currentUserGuilds: () => "/users/@me/guilds"; readonly leaveGuild: (guildId: ) => `/users/@me/guilds/${string}`; readonly guildBulkDeleteMine: (guildId: ) => `/users/@me/guilds/${string}/messages/bulk-delete-mine`; readonly userMeChannels: () => "/users/@me/channels"; readonly userMeChannelPin: (channelId: ) => `/users/@me/channels/${string}/pin`; readonly userProfile: (id: , guildId?: ) => string; readonly instanceDiscovery: () => "/.well-known/fluxer"; readonly gatewayBot: () => "/gateway/bot"; readonly applicationsMe: () => "/applications/@me"; readonly oauth2ApplicationsMe: () => "/oauth2/applications/@me"; readonly emojiMetadata: (emojiId: ) => `/emojis/${string}/metadata`; readonly stickerMetadata: (stickerId: ) => `/stickers/${string}/metadata`; readonly checkUsernameTag: () => "/users/check-tag"; readonly preloadMessages: () => "/users/@me/preload-messages"; readonly preloadMessagesAlt: () => "/users/@me/channels/messages/preload"; readonly streamPreview: (streamKey: string) => `/streams/${string}/preview`; readonly packs: () => "/packs"; readonly packsByType: (packType: string) => `/packs/${string}`; readonly pack: (packId: ) => `/packs/${string}`; readonly packInstall: (packId: ) => `/packs/${string}/install`; readonly packInvites: (packId: ) => `/packs/${string}/invites`; readonly packEmojis: (packId: ) => `/packs/emojis/${string}`; readonly packEmojisBulk: (packId: ) => `/packs/emojis/${string}/bulk`; readonly packEmoji: (packId: , emojiId: ) => `/packs/emojis/${string}/${string}`; readonly packStickers: (packId: ) => `/packs/stickers/${string}`; readonly packStickersBulk: (packId: ) => `/packs/stickers/${string}/bulk`; readonly packSticker: (packId: , stickerId: ) => `/packs/stickers/${string}/${string}`; readonly oauth2ApplicationBot: (id: ) => `/oauth2/applications/${string}/bot`; readonly oauth2ApplicationBotResetToken: (id: ) => `/oauth2/applications/${string}/bot/reset-token`; } (readonly): ClientUser | nullThe authenticated bot user. Null until READY is received.
: UserManager (readonly)User cache and manager.
: WebSocketManager (readonly)The underlying WebSocketManager (throws if not logged in).
Methods
(): voidAssertion that client is ready (throws if not).
(requests: BulkFetchMessagesRequest[], options?: BulkFetchMessagesOptions & { hydrate?: true }): Promise<BulkFetchMessagesResult>| Param | Type | Description |
|---|---|---|
| requests | BulkFetchMessagesRequest[] | |
| options? | BulkFetchMessagesOptions & { hydrate?: true } |
(requests: BulkFetchMessagesRequest[], options: BulkFetchMessagesOptions & { hydrate: false }): Promise<APIBulkMessageFetchResponse>| Param | Type | Description |
|---|---|---|
| requests | BulkFetchMessagesRequest[] | |
| options | BulkFetchMessagesOptions & { hydrate: false } |
(requests: BulkFetchMessagesRequest[], options: BulkFetchMessagesOptions): Promise<BulkFetchMessagesResult | APIBulkMessageFetchResponse>| Param | Type | Description |
|---|---|---|
| requests | BulkFetchMessagesRequest[] | |
| options | BulkFetchMessagesOptions |
(username: string, discriminator: string): Promise<APIUserTagCheck>Check username#discriminator availability.
| Param | Type | Description |
|---|---|---|
| username | string | Username to check |
| discriminator | string | Discriminator to check |
(): Promise<void>Disconnect from gateway, clear all caches, and reset state.
Safe to call login again after destroy.
(event: , args: ClientEvents[]): booleanEmit an event with typed arguments.
| Param | Type | Description |
|---|---|---|
| event | K | |
| args | ClientEvents[] |
(event: string | symbol, args: unknown[]): boolean| Param | Type | Description |
|---|---|---|
| event | string | symbol | |
| args | unknown[] |
(event: string | symbol, args: unknown[]): boolean| Param | Type | Description |
|---|---|---|
| event | string | symbol | |
| args | unknown[] |
(): Promise<APIApplicationMe>Fetch the current application (`/applications/@me`).
(emojiId: string): Promise<APIEmojiMetadata>Fetch emoji metadata by ID.
| Param | Type | Description |
|---|---|---|
| emojiId | string | Emoji snowflake |
(): Promise<APIGatewayBotResponse>Fetch gateway connection info (`/gateway`).
(): Promise<APIInstance>Fetch instance discovery document (`/.well-known/fluxer`).
(): Promise<APIOAuthApplication[]>Fetch OAuth2 applications owned by this bot.
(stickerId: string): Promise<APIStickerMetadata>Fetch sticker metadata by ID.
| Param | Type | Description |
|---|---|---|
| stickerId | string | Sticker snowflake |
(origin: DiscoveryOrigin, options: Omit<ClientOptions, 'instance'>, connectOptions?: { signal?: AbortSignal; }): Promise<Client>Create a client from instance discovery (`GET /.well-known/fluxer`).
Does not log in — call login with a token afterward.
| Param | Type | Description |
|---|---|---|
| origin | DiscoveryOrigin | API origin used only to fetch discovery (e.g. `https://api.example.com`) |
| options | Omit<ClientOptions, 'instance'> | Client options (must not conflict with discovered `endpoints.api`) |
| connectOptions? | { signal?: AbortSignal; } | Optional abort signal for the discovery request |
(data: APIUserPartial): UserGet or create a User from partial API data (hydrates cache).
| Param | Type | Description |
|---|---|---|
| data | APIUserPartial | Partial user data from API |
(payload: GatewayReceivePayload): Promise<void>| Param | Type | Description |
|---|---|---|
| payload | GatewayReceivePayload |
(): booleanType guard for ready state (narrows `client.user` to non-null).
(token: string, options?: { signal?: AbortSignal; }): Promise<string>Connect to the gateway with a bot token.
| Param | Type | Description |
|---|---|---|
| token | string | Bot token from the developer portal |
| options? | { signal?: AbortSignal; } | Optional abort signal for cancellation |
(event: , listener: ClientEventListener<>): thisRemove an event listener for a specific event type.
| Param | Type | Description |
|---|---|---|
| event | K | |
| listener | ClientEventListener<> |
(event: string | symbol, listener: (...args: unknown[]) => void): this| Param | Type | Description |
|---|---|---|
| event | string | symbol | |
| listener | (...args: unknown[]) => void |
(event: string | symbol, listener: (...args: unknown[]) => void): this| Param | Type | Description |
|---|---|---|
| event | string | symbol | |
| listener | (...args: unknown[]) => void |
(event: , listener: ClientEventListener<>): thisRegister an event listener for a specific event type.
| Param | Type | Description |
|---|---|---|
| event | K | |
| listener | ClientEventListener<> |
(event: string | symbol, listener: (...args: unknown[]) => void): this| Param | Type | Description |
|---|---|---|
| event | string | symbol | |
| listener | (...args: unknown[]) => void |
(event: string | symbol, listener: (...args: unknown[]) => void): this| Param | Type | Description |
|---|---|---|
| event | string | symbol | |
| listener | (...args: unknown[]) => void |
(event: , listener: ClientEventListener<>): thisRegister a one-time event listener for a specific event type.
| Param | Type | Description |
|---|---|---|
| event | K | |
| listener | ClientEventListener<> |
(event: string | symbol, listener: (...args: unknown[]) => void): this| Param | Type | Description |
|---|---|---|
| event | string | symbol | |
| listener | (...args: unknown[]) => void |
(event: string | symbol, listener: (...args: unknown[]) => void): this| Param | Type | Description |
|---|---|---|
| event | string | symbol | |
| listener | (...args: unknown[]) => void |
(channelIds: string[]): Promise<APIPreloadMessagesResponse>Preload recent messages for multiple channels (batch endpoint).
| Param | Type | Description |
|---|---|---|
| channelIds | string[] | Array of channel IDs to preload |
(channelIds: string[]): Promise<APIPreloadMessagesResponse>Preload recent messages (alternate endpoint).
| Param | Type | Description |
|---|---|---|
| channelIds | string[] | Array of channel IDs to preload |
(emoji: string | { name: string; id?: string; animated?: boolean }, guildId?: string | null): Promise<string>Resolve emoji input to API format (e.g., `name:id` or Unicode).
| Param | Type | Description |
|---|---|---|
| emoji | string | { name: string; id?: string; animated?: boolean } | Emoji string or object with name/id/animated |
| guildId? | string | null | Guild ID for custom emoji lookup (optional) |
(shardId: number, payload: GatewaySendPayload): voidSend a gateway payload to a specific shard.
| Param | Type | Description |
|---|---|---|
| shardId | number | Shard ID (0-indexed) |
| payload | GatewaySendPayload | Gateway send payload (opcode + data) |
(filter?: (member: GuildMember, guildId: string) => boolean): numberSweep cached members across all guilds (remove entries matching filter).
| Param | Type | Description |
|---|---|---|
| filter? | (member: GuildMember, guildId: string) => boolean | Predicate to test each member (return true to remove) |
(filter?: (message: APIMessage, channelId: string) => boolean, channelId?: string): numberSweep cached messages (remove entries matching filter).
| Param | Type | Description |
|---|---|---|
| filter? | (message: APIMessage, channelId: string) => boolean | Predicate to test each message (return true to remove) |
| channelId? | string | Optional channel ID to scope sweep |