Returns the current voice-channel member roster (including the bot).
The current members.
Joins the Discord voice channel and brings the bot online. Returns the bot's user id + the voice-channel id.
Join parameters (guild id, voice-channel id, bot name, auth).
The bot user + voice-channel handles.
Leaves the voice channel and releases the voice connection + gateway resources.
Mutes a member in the voice channel (requires the bot to have the guild's "Mute Members" permission).
The user to mute.
Registers a callback for inbound raw per-user audio frames (what the agent hears, carrying the speaker label for diarization). "Latest handler wins."
Invoked with each inbound audio frame.
Registers a callback fired when the bot's voice connection is dropped (channel deleted, kicked, gateway disconnect). "Latest handler wins."
Invoked when the voice connection has ended.
Registers a callback fired when a member joins the voice channel. "Latest handler wins."
Invoked with the member who joined.
Registers a callback fired when a member leaves the voice channel. "Latest handler wins."
Invoked with the user id that left.
Posts a message to the associated text channel (everyone in the channel sees it). Discord exposes a first-class programmatic text-channel post, so this is supported (unlike Google Meet).
The chat message text.
Sends one raw PCM audio frame as the bot's outbound audio (the agent's voice into the channel). The adapter encodes to Opus for the Discord voice connection.
The PCM audio bytes to send.
The minimal Discord voice-channel / bot-gateway surface the import('./discord-bridge').DiscordBridge depends on. Production binds this to
@discordjs/voice+discord.js; tests inject aFakeDiscordVoiceSdk.No hand-raise / no scheduled-invite operations — see the file-level note: Discord is voice-channel based and surfaces no hand-raise, so this seam deliberately omits them. It DOES keep postChatMessage (Discord text channels), unlike the Google Meet seam.