Class

Client

Main Fluxer bot client. Connects to the gateway, emits events, and provides REST access.

Extends EventEmitter

Constructor

new Client(options: ClientOptions)
ParamTypeDescription
optionsClientOptions

Properties

channels: ChannelManager (readonly)

Channel cache and manager.

events: ClientEventMethods (readonly)

Typed event handlers. Prefer `client.events.*` or `client.on(Events.*, ...)`.

guilds: GuildManager (readonly)

Guild cache and manager.

instance: ResolvedInstance (readonly)

Resolved instance endpoints (API, CDN, invite, …) for this client. Isolated per client — safe for multi-instance processes.

options: ClientOptions (readonly)

Resolved client options (cache defaults applied).

packs: PackManager (readonly)

Emoji/sticker pack REST wrappers (`/packs/*`).

readyAt: Date | null

Timestamp when the client became ready. Null until READY is received.

rest: REST (readonly)

REST client for making API requests.

Routes: { 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)
user: ClientUser | null

The authenticated bot user. Null until READY is received.

users: UserManager (readonly)

User cache and manager.

ws: WebSocketManager (readonly)

The underlying WebSocketManager (throws if not logged in).

Methods

assertReady(): void

Assertion that client is ready (throws if not).

bulkFetchMessages(requests: BulkFetchMessagesRequest[], options?: BulkFetchMessagesOptions & { hydrate?: true }): Promise<BulkFetchMessagesResult>
ParamTypeDescription
requestsBulkFetchMessagesRequest[]
options?BulkFetchMessagesOptions & { hydrate?: true }
bulkFetchMessages(requests: BulkFetchMessagesRequest[], options: BulkFetchMessagesOptions & { hydrate: false }): Promise<APIBulkMessageFetchResponse>
ParamTypeDescription
requestsBulkFetchMessagesRequest[]
optionsBulkFetchMessagesOptions & { hydrate: false }
checkUsernameTag(username: string, discriminator: string): Promise<APIUserTagCheck>

Check username#discriminator availability.

ParamTypeDescription
usernamestring

Username to check

discriminatorstring

Discriminator to check

destroy(): Promise<void>

Disconnect from gateway, clear all caches, and reset state. Safe to call login again after destroy.

emit(event: , args: ClientEvents[]): boolean

Emit an event with typed arguments.

ParamTypeDescription
eventK
argsClientEvents[]
emit(event: string | symbol, args: unknown[]): boolean
ParamTypeDescription
eventstring | symbol
argsunknown[]
emit(event: string | symbol, args: unknown[]): boolean
ParamTypeDescription
eventstring | symbol
argsunknown[]
fetchApplication(): Promise<APIApplicationMe>

Fetch the current application (`/applications/@me`).

fetchEmojiMetadata(emojiId: string): Promise<APIEmojiMetadata>

Fetch emoji metadata by ID.

ParamTypeDescription
emojiIdstring

Emoji snowflake

fetchGatewayInfo(): Promise<APIGatewayBotResponse>

Fetch gateway connection info (`/gateway`).

fetchInstance(): Promise<APIInstance>

Fetch instance discovery document (`/.well-known/fluxer`).

fetchOAuthApplications(): Promise<APIOAuthApplication[]>

Fetch OAuth2 applications owned by this bot.

fetchStickerMetadata(stickerId: string): Promise<APIStickerMetadata>

Fetch sticker metadata by ID.

ParamTypeDescription
stickerIdstring

Sticker snowflake

fromDiscovery(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.

ParamTypeDescription
originDiscoveryOrigin

API origin used only to fetch discovery (e.g. `https://api.example.com`)

optionsOmit<ClientOptions, 'instance'>

Client options (must not conflict with discovered `endpoints.api`)

connectOptions?{ signal?: AbortSignal; }

Optional abort signal for the discovery request

getOrCreateUser(data: APIUserPartial): User

Get or create a User from partial API data (hydrates cache).

ParamTypeDescription
dataAPIUserPartial

Partial user data from API

handleDispatch(payload: GatewayReceivePayload): Promise<void>
ParamTypeDescription
payloadGatewayReceivePayload
isReady(): boolean

Type guard for ready state (narrows `client.user` to non-null).

login(token: string, options?: { signal?: AbortSignal; }): Promise<string>

Connect to the gateway with a bot token.

ParamTypeDescription
tokenstring

Bot token from the developer portal

options?{ signal?: AbortSignal; }

Optional abort signal for cancellation

off(event: , listener: ClientEventListener<>): this

Remove an event listener for a specific event type.

ParamTypeDescription
eventK
listenerClientEventListener<>
off(event: string | symbol, listener: (...args: unknown[]) => void): this
ParamTypeDescription
eventstring | symbol
listener(...args: unknown[]) => void
off(event: string | symbol, listener: (...args: unknown[]) => void): this
ParamTypeDescription
eventstring | symbol
listener(...args: unknown[]) => void
on(event: , listener: ClientEventListener<>): this

Register an event listener for a specific event type.

ParamTypeDescription
eventK
listenerClientEventListener<>
on(event: string | symbol, listener: (...args: unknown[]) => void): this
ParamTypeDescription
eventstring | symbol
listener(...args: unknown[]) => void
on(event: string | symbol, listener: (...args: unknown[]) => void): this
ParamTypeDescription
eventstring | symbol
listener(...args: unknown[]) => void
once(event: , listener: ClientEventListener<>): this

Register a one-time event listener for a specific event type.

ParamTypeDescription
eventK
listenerClientEventListener<>
once(event: string | symbol, listener: (...args: unknown[]) => void): this
ParamTypeDescription
eventstring | symbol
listener(...args: unknown[]) => void
once(event: string | symbol, listener: (...args: unknown[]) => void): this
ParamTypeDescription
eventstring | symbol
listener(...args: unknown[]) => void
preloadMessages(channelIds: string[]): Promise<APIPreloadMessagesResponse>

Preload recent messages for multiple channels (batch endpoint).

ParamTypeDescription
channelIdsstring[]

Array of channel IDs to preload

preloadMessagesAlt(channelIds: string[]): Promise<APIPreloadMessagesResponse>

Preload recent messages (alternate endpoint).

ParamTypeDescription
channelIdsstring[]

Array of channel IDs to preload

resolveEmoji(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).

ParamTypeDescription
emojistring | { name: string; id?: string; animated?: boolean }

Emoji string or object with name/id/animated

guildId?string | null

Guild ID for custom emoji lookup (optional)

sendToGateway(shardId: number, payload: GatewaySendPayload): void

Send a gateway payload to a specific shard.

ParamTypeDescription
shardIdnumber

Shard ID (0-indexed)

payloadGatewaySendPayload

Gateway send payload (opcode + data)

sweepMembers(filter?: (member: GuildMember, guildId: string) => boolean): number

Sweep cached members across all guilds (remove entries matching filter).

ParamTypeDescription
filter?(member: GuildMember, guildId: string) => boolean

Predicate to test each member (return true to remove)

sweepMessages(filter?: (message: APIMessage, channelId: string) => boolean, channelId?: string): number

Sweep cached messages (remove entries matching filter).

ParamTypeDescription
filter?(message: APIMessage, channelId: string) => boolean

Predicate to test each message (return true to remove)

channelId?string

Optional channel ID to scope sweep