If you want Discord to speak text aloud — whether you’re a streamer routing Twitch chat into a voice channel, a user who prefers to type, or a developer building a custom narration tool — a text to speech Discord bot is the right solution. This guide covers every practical option available in 2026: the hosted bots you can add with a single click, the native Discord TTS command, and a step-by-step walkthrough for building a custom bot with Discord.js and the ElevenLabs API.
TL;DR
- Discord’s native /tts command is client-side — it plays audio through the listener’s speakers, not through a voice channel.
- Streamcord TTS is the most popular hosted option for streamers wanting Twitch chat read aloud in Discord voice channels.
- Voicemod TTS provides novelty and character voices via a managed bot.
- A custom Discord.js + ElevenLabs bot gives you the best voice quality and full control, with a build time of under an hour.
- Hotkeys for triggering TTS commands can be mapped through Discord’s keybind settings or via external tools like AutoHotkey.
- VoxBooster pairs with TTS bots for hybrid workflows where you want both synthesized chat narration and a live modified voice.
Why TTS Bots Exist and What They Actually Do
Discord’s built-in /tts command is frequently misunderstood. When you type /tts hello, Discord’s desktop client reads that text aloud through your speakers using the operating system’s local TTS engine. Other users in the channel do not hear it through the voice channel — they only hear it if they also have their own Discord TTS turned on and their client reads the message locally.
A TTS Discord bot works differently. The bot is a server-side process with its own voice channel connection. When triggered, it synthesizes speech from text and streams the resulting audio into the voice channel itself. Everyone in that voice channel hears it, the same way they’d hear another participant speaking. That distinction — client-local versus channel-broadcast — is the entire reason bots exist for this use case.
Common scenarios where this matters:
- Streaming setup: You’re live on Twitch and want viewers’ chat messages read aloud in the Discord voice call you share with co-streamers.
- Accessibility: A server member cannot or prefers not to use a microphone; the TTS bot lets them participate in voice discussions by typing.
- Announcements: A bot reads moderation alerts, role assignments, or scheduled messages into a channel without a human operator.
- Custom narration: Developers build bots that narrate game events, scores, or alerts in real time using high-quality AI voices.
Option 1: Discord’s Native /tts Command
Before reaching for a bot, check whether Discord’s built-in command covers your needs.
How to enable it: In your server, go to Server Settings → Overview → Enable Text-To-Speech. Under your channel’s Advanced settings, set Allow anyone to post TTS messages (or restrict it to specific roles).
How to use it: In any text channel with TTS enabled, type /tts [your message]. Discord reads the message aloud through the recipient’s speakers using their OS TTS engine.
Limitations:
- Audio goes to local speakers, not into the voice channel broadcast.
- Voice quality depends on the listener’s OS TTS engine (Microsoft David, Zira, etc. on Windows).
- Each listener must have TTS turned on in Settings → Accessibility → Allow playback and usage of /tts command.
Best for: Quick accessibility use, or situations where each user just needs to hear text read locally — not for streaming or group announcements.
Option 2: Voicemod TTS Bot
Voicemod, best known for its desktop voice changer, operates a Discord bot that brings its voice library into text-to-speech functionality.
What it offers:
- A library of character and novelty voices (robotic, cartoon, deep, and more).
- Simple slash command interface:
/tts [voice] [message]. - No custom voice model upload — you’re limited to Voicemod’s preset library.
- Free tier available; premium voices require a Voicemod subscription.
Setup:
- Visit the Voicemod Discord bot page and click Add to Server.
- Authorize the bot with Connect, Speak, and Read Messages permissions.
- Join a voice channel in your server.
- Use
/ttsfollowed by your chosen voice name and message text.
Limitations: Voice selection is limited to Voicemod’s library. If you need a natural-sounding human voice or a custom persona, this won’t cover it.
Option 3: Streamcord TTS for Streamers
Streamcord is the go-to TTS Discord bot for streamers who want Twitch chat messages read aloud in a Discord voice channel. It bridges Twitch and Discord natively.
What it offers:
- Connects your Twitch channel to a Discord voice channel.
- Reads Twitch chat messages aloud with configurable voice, speed, and pitch.
- Supports subscriber-only TTS, channel point redemptions as TTS triggers, and message filtering.
- Slash command and dashboard configuration.
Setup:
- Go to streamcord.io and click Add to Discord.
- Authorize on your server with the required permissions.
- Use
/tts setupand follow the prompts to link your Twitch channel and select a target Discord voice channel. - Configure voice settings at streamcord.io/dashboard.
Voice channel routing: Streamcord joins the voice channel you specify during setup. You can change the target channel via the dashboard without re-inviting the bot. To make it follow you between channels, use the /tts move command.
Hotkey setup for Streamcord: Streamcord itself does not have a dedicated desktop hotkey system. Streamers typically bind a Push-to-Talk key in Discord for their own microphone, then use a separate keybind in OBS or StreamDeck to trigger chat commands. For more granular control, AutoHotkey scripts can send /tts commands via keyboard shortcuts by simulating Discord input.
Option 4: Custom Bot with Discord.js + ElevenLabs API
For the highest voice quality and complete control over behavior, build your own TTS Discord bot using Discord.js v14 and the ElevenLabs API. This gives you access to ElevenLabs’ studio-quality voices, voice cloning, multilingual synthesis, and per-request parameter tuning.
Prerequisites
- Node.js 18+
- A Discord application and bot token (discord.com/developers)
- An ElevenLabs API key (elevenlabs.io)
- FFmpeg installed and on your PATH (required by @discordjs/voice for audio encoding)
Step 1: Initialize the Project
mkdir discord-tts-bot && cd discord-tts-bot
npm init -y
npm install discord.js @discordjs/voice @discordjs/opus elevenlabs libsodium-wrappers ffmpeg-static
Step 2: Register the Slash Command
Create deploy-commands.js:
const { REST, Routes, SlashCommandBuilder } = require('discord.js');
const commands = [
new SlashCommandBuilder()
.setName('tts')
.setDescription('Speak text in your voice channel')
.addStringOption(opt =>
opt.setName('text').setDescription('Text to speak').setRequired(true)
)
].map(cmd => cmd.toJSON());
const rest = new REST({ version: '10' }).setToken(process.env.DISCORD_TOKEN);
(async () => {
await rest.put(
Routes.applicationGuildCommands(process.env.CLIENT_ID, process.env.GUILD_ID),
{ body: commands }
);
console.log('Commands registered');
})();
Run node deploy-commands.js once to register the /tts slash command on your server.
Step 3: Build the Bot
Create index.js:
const { Client, GatewayIntentBits } = require('discord.js');
const { joinVoiceChannel, createAudioPlayer, createAudioResource, AudioPlayerStatus } = require('@discordjs/voice');
const { ElevenLabsClient } = require('elevenlabs');
const { Readable } = require('stream');
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildVoiceStates] });
const eleven = new ElevenLabsClient({ apiKey: process.env.ELEVENLABS_API_KEY });
const VOICE_ID = 'your-elevenlabs-voice-id'; // e.g. 'EXAVITQu4vr4xnSDxMaL' for Rachel
client.on('interactionCreate', async interaction => {
if (!interaction.isChatInputCommand() || interaction.commandName !== 'tts') return;
const text = interaction.options.getString('text');
const voiceChannel = interaction.member?.voice?.channel;
if (!voiceChannel) {
return interaction.reply({ content: 'Join a voice channel first.', ephemeral: true });
}
await interaction.deferReply({ ephemeral: true });
const audioStream = await eleven.textToSpeech.convertAsStream(VOICE_ID, {
text,
model_id: 'eleven_multilingual_v2',
voice_settings: { stability: 0.5, similarity_boost: 0.75 }
});
const connection = joinVoiceChannel({
channelId: voiceChannel.id,
guildId: interaction.guildId,
adapterCreator: interaction.guild.voiceAdapterCreator,
});
const player = createAudioPlayer();
const resource = createAudioResource(Readable.from(audioStream));
player.play(resource);
connection.subscribe(player);
player.on(AudioPlayerStatus.Idle, () => connection.destroy());
await interaction.editReply({ content: 'Speaking.' });
});
client.login(process.env.DISCORD_TOKEN);
Step 4: Configure Environment Variables
Create .env:
DISCORD_TOKEN=your_bot_token
CLIENT_ID=your_app_client_id
GUILD_ID=your_server_id
ELEVENLABS_API_KEY=your_elevenlabs_key
Run node index.js, join a voice channel in your server, and type /tts Hello, this is my custom TTS bot.
Choosing a Voice Model
ElevenLabs offers several models in 2026:
| Model | Latency | Quality | Languages |
|---|---|---|---|
| eleven_turbo_v2_5 | ~250ms | Good | 32 |
| eleven_multilingual_v2 | ~400ms | Excellent | 29 |
| eleven_flash_v2_5 | ~75ms | Good | 32 |
For real-time Discord use, eleven_flash_v2_5 minimizes the delay between command and speech. For quality-first narration, eleven_multilingual_v2 is the better choice.
Voice Channel Routing: Practical Patterns
Regardless of which bot you use, voice channel routing follows the same basic patterns.
Follow-the-user pattern: The bot joins whatever voice channel the invoking user is in at command time. This is the default for most bots and the implementation in the Discord.js example above. No pre-configuration required.
Fixed channel pattern: You designate a specific channel ID in the bot’s configuration. The bot always speaks in that channel regardless of where the invoking user is. Best for announcement bots or dedicated TTS rooms.
Multi-channel pattern: A more complex setup where different text channels map to different voice channels. In Discord.js, you implement this with a channel mapping object and resolve the target voice channel from the source text channel.
Dynamic follow pattern: The bot monitors voiceStateUpdate events and moves to follow a designated user between voice channels. Useful for streamers who frequently switch rooms during a session.
Hotkey Setup for TTS Commands
Most TTS bots are triggered by slash commands, not hotkeys. But you can create effective hotkey workflows with a few approaches.
Discord’s built-in keybinds: Go to Discord Settings → Keybinds. You cannot bind arbitrary text commands here — only push-to-talk, deafen, mute, and similar Discord actions. For TTS, keybinds are not directly applicable.
AutoHotkey (Windows): You can map a hotkey to type a /tts [preset message] command and press Enter in the Discord window:
^F1:: ; Ctrl+F1
WinActivate, Discord
Send, /tts Your preset message here{Enter}
return
StreamDeck: If you use an Elgato StreamDeck, the “Text” action can send keystrokes to any active window. Configure a StreamDeck button to focus the Discord text input and type your /tts command. This is faster and more reliable than AutoHotkey for live streaming scenarios.
Bot-side hotwords: For custom bots, you can implement a prefix trigger in a text channel instead of a slash command — any message in a designated channel that starts with a configured prefix gets sent to TTS automatically. This turns any message into a hotkey-free TTS trigger.
Hybrid Workflows: TTS Bots + Live Voice Modifier
A TTS bot handles synthesized speech from text. It doesn’t touch your microphone. This means TTS bots and live voice modifiers like VoxBooster coexist without conflict in the same voice channel.
A practical hybrid setup for streamers:
- Streamcord TTS reads your Twitch chat messages aloud in the Discord voice channel your co-streamers are in.
- VoxBooster modifies your live microphone voice in real time — whether that’s noise suppression, a pitch effect, or a cloned voice persona.
- Your co-streamers hear both: the TTS bot speaking viewer messages, and your modified live voice.
The two audio streams are independent. The TTS bot generates audio from its own connection. Your microphone audio goes through VoxBooster’s virtual device before reaching Discord. Discord mixes them the same way it mixes any two participants in a channel.
This hybrid approach is particularly effective for content creators who want a richer audio environment without requiring viewers or co-streamers to install anything beyond Discord.
Troubleshooting Common Issues
Bot joins but produces no audio: Check that FFmpeg is on your PATH and that @discordjs/opus installed successfully. Run ffmpeg -version in a terminal to verify. If opus is missing, try npm rebuild @discordjs/opus.
TTS command has long latency: ElevenLabs API latency depends on the model you chose and the length of the input text. Switch to eleven_flash_v2_5 for lower latency. For messages longer than ~200 characters, consider chunking the text before sending.
Bot disconnects mid-playback: This is usually a voice connection timeout. Add a connection.on('error') handler and reconnect on failure. Ensure your server has stable outbound UDP connectivity on port 443 (Discord’s voice protocol).
Streamcord TTS not reading all messages: Streamcord filters certain message types by default. Check your Streamcord dashboard under Filters to allow non-subscriber messages and disable content filtering if desired.
Discord /tts command not working: Confirm TTS is enabled in your server settings and that the specific channel allows TTS. Individual users also need TTS playback enabled in their own Discord Accessibility settings.
Summary
In 2026, setting up a TTS Discord bot takes anywhere from two minutes (Streamcord or Voicemod) to under an hour (custom Discord.js + ElevenLabs). The right choice depends on your voice quality requirements, how much customization you need, and whether you’re building for your own server or for a production streaming setup. Native Discord /tts covers basic client-side playback without any bot. Hosted bots like Streamcord cover the streamer use case with minimal setup. A custom Discord.js bot with ElevenLabs gives you studio-quality AI voices with full programmatic control over every aspect of the speech.
For the most versatile streaming audio setup, combine a TTS bot for chat narration with VoxBooster for live voice modification — two tools, one voice channel, zero conflicts.