Live voice translation for Discord

Everyone on the call, in their own language.

Discord Translate joins your voice channel, transcribes and translates every speaker in real time, and posts clean captions to a text channel — readable on iPhone, Android, or desktop. No overlay, no app to install for your friends. Just talk.

What it does

Built for real multilingual conversations — English, Spanish, French, German, Japanese, Korean, Arabic, Indonesian, and ~30 more — where each person just speaks naturally.

🗣️

Per-speaker translation

Hears each person in the channel separately and captions every speaker — not one merged stream.

🎭

Language by role

Give people a Discord role named after their language — French, 🇯🇵 Japanese, Bahasa Indonesia — and the bot knows exactly what each speaks. ~30 languages; flag-emoji role names work too.

🔍

Two engines, cross-checked

Translates with DeepL and OpenAI at once. Shows one when they agree, both when they differ — so you can trust it.

📱

Any device

It's a server-side bot, so captions show up in Discord on iPhone, Android, and desktop — nothing for your friends to install.

🎨

Readable cards

Color-coded by speaker, with the translation up top and the original underneath — easy to read at a glance, even mid-call.

🛡️

Always on

Auto-rejoins if the connection blips, posts captions in order, and runs 24/7 when hosted — it stays up so you don't have to babysit it.

Set it up — step by step

You run your own copy (it uses your API keys, so it's private and free-to-cheap). About 15 minutes start to finish.

1

Create your Discord bot

  1. Open the Discord Developer PortalNew Application, name it.
  2. Bot tab → Reset Token → copy it. That's your DISCORD_TOKEN.
  3. General Information → copy the Application ID. That's your DISCORD_CLIENT_ID.
  4. No privileged intents needed.
2

Invite it to your server

In OAuth2 → URL Generator, select:

  • Scopes: bot, applications.commands
  • Bot permissions: View Channels, Send Messages, Connect, Speak, Use Voice Activity

Open the generated URL, pick your server, authorize. While you're here, enable Developer Mode (User Settings → Advanced) and right-click your server → Copy Server ID — that's DISCORD_GUILD_ID (makes slash commands appear instantly).

3

Get your translation keys

  • OpenAI required — create a key at platform.openai.com/api-keys. Does speech-to-text + translation.
  • DeepL recommended — free key at deepl.com/pro-api. Adds a faster, stronger second translation for cross-checking. 500k chars/month free — plenty.
4

Set up language roles

In Server Settings → Roles, create a role named after each person's language and assign it. The name is what the bot reads — a flag emoji is welcome for visibility:

  • 🇬🇧 English · 🇫🇷 French · 🇯🇵 Japanese · 🇪🇸 Spanish · Bahasa Indonesia · …
  • ~30 languages — run /translate languages in Discord to see the full list.

Tip: boosted servers (Level 2) can give each role a small icon for extra visibility. No role? The person who starts the bot is the common language; everyone else uses the configured fallback.

5

Host it 24/7 (Railway)

The easiest always-on option — runs without your PC:

  1. Fork or use the GitHub repo.
  2. RailwayNew Project → Deploy from GitHub repo → pick the repo. It builds automatically.
  3. In the service's Variables, add your keys:
DISCORD_TOKEN=… DISCORD_CLIENT_ID=… DISCORD_GUILD_ID=… OPENAI_API_KEY=… DEEPL_API_KEY=… # optional

Deploy — the logs should show [bot] logged in…; /translate registered. It auto-restarts if it ever crashes.

Prefer to run it on your own machine? npm install, copy .env.example.env and fill it, then npm start (or double-click play.cmd on Windows).

6

Use it

  1. Join a voice channel.
  2. In any text channel, run /translate join.
  3. Talk — captions appear in that channel, one per sentence.
  4. /translate leave to stop.

On a video call? Minimize the call to Picture-in-Picture and keep the captions channel open underneath — faces and translations on one screen.

FAQ

What languages does it support?

~30 languages with full DeepL + OpenAI cross-checking — English, Spanish, French, German, Italian, Portuguese, Dutch, Polish, Russian, Ukrainian, Japanese, Korean, Chinese, Indonesian, Turkish, Arabic, and more — plus extras OpenAI handles on its own (Hindi, Vietnamese, Thai, Tagalog, Sundanese, Malay…). Run /translate languages in Discord for the live list. Each speaker's language is set by their Discord role.

How much does it cost?

Cheap. Transcription (OpenAI) is roughly $0.15–0.20 per hour of actual talking; translations are a fraction of a cent each; DeepL's free tier (500k characters/month ≈ ~20 hours of calls) covers normal use at $0. Hosting on Railway is about $5/month. You pay your own keys, so nothing is shared or resold.

Is it private?

Audio is sent to OpenAI (and DeepL, if enabled) to transcribe and translate — the same trade-off as any cloud voice tool. Nothing is stored by the bot. A fully self-hosted, on-device translation backend is on the roadmap for total privacy.

Does it work on a video call?

Yes — it only uses audio, so it works whether cameras are on or off. It never touches video. On mobile, use Discord's Picture-in-Picture to see faces and read captions at once.

How fast are the captions?

About 1.5–2 seconds after you finish a sentence. It waits for a brief pause, transcribes, translates, and posts — Discord can't stream a caption word-by-word, so a sentence at a time is the sweet spot.

Do my friends need to install anything?

No. It's a server-side bot — once it's in your server, everyone just reads the captions in Discord on whatever device they're already using.