DEV Community

J3ffJessie
J3ffJessie

Posted on

Interviewing doesn't have to be scary. Practice just got easier!!

What can we do about it?

Well, as an ambassador for a tech community that focuses on helping people with their career journey and getting into tech as well as navigating through the process of changing careers in this market I can't do a whole lot. As the creator of a Discord bot, I can do a little bit more though, so I turned that into a feature that allows people to do voice based interviews all within the Discord community itself.

AI Voice Interview

/interview turns a private Discord voice channel into a live mock job interview. The bot speaks questions out loud, listens to your spoken answers, and adapts its follow-ups to a job description you provide. When it's done, you get a scored write-up in your DMs along with a full text transcript of the conversation.

Why it exists

Practicing interviews against a real job posting is normally either expensive (a coach) or asynchronous and text-only (most free tools). The goal here was something that feels like an actual interview with spoken questions, spoken answers, natural follow-ups; all without leaving Discord or standing up any new paid infrastructure. It reuses pieces the bot already had: Groq for transcription and language generation, and each guild's already configured API key. The only genuinely new dependency is a free, keyless text-to-speech engine using Microsoft Edge TTS.

What it feels like to use

You run /interview start, optionally attaching a PDF or DOCX job description. The bot checks it actually has permission to manage channels and roles in your server, then walks you through a two-step setup: first pick an interview style from the main 4 (Behavioral (STAR-method), Technical, Conversational, Case-based) and a language from dropdown menus so you can conduct the interview in your preferred language (global community accessibility) then fill in a short modal with the company name and (if you didn't attach a file) the job description text. Company name is optional, attempting to have the bot conduct the interview in that company's style. Tested with Google and a couple others for the same interview style and only changed the company and there were differences. No guarantee it is that particular companies interviewing style.

Once you submit, the bot spins up a private voice channel just for you, nobody else can see or join it (PRIVACY) and drops a link to it. Pop in, and the bot greets you and starts asking questions one at a time: it speaks a question, waits for you to answer, transcribes what you said, and uses that answer to inform the next question. This repeats for eight questions (configurable, but 8 felt like a good set up in a short time), or until you run /interview stop early (as long as you've answered at least one).

When the interview ends, the bot scores your performance and sends the results as a DM directly to you with a summary embed plus a full transcript file of the questions and answers, falling back to posting in the channel and @-mentioning you if your DMs are closed. The private voice channel is deleted automatically either way.

Interview styles

You choose the shape of the interview up front:

  • Behavioral (default) — STAR-method questions about past situations, actions, and results.
  • Technical — digs into specific skills, tools, and architecture/problem-solving decisions.
  • Conversational — relaxed, focused on culture fit, motivations, and working preferences.
  • Case-based — presents realistic scenarios and asks how you'd approach them.

Each style is really just a different instruction block spliced into the prompt that generates each question, so the LLM adjusts tone and structure accordingly rather than the app branching into separate code paths.

Multilingual interviews

The interview doesn't have to be conducted in English. Alongside the style picker, a second dropdown lets you choose from twelve languages (Spanish, French, German, Italian, Portuguese, Japanese, Korean, Mandarin, Hindi, Arabic, Russian, plus English). Picking a language does three things:

  • The bot's spoken questions switch to a matching Microsoft Edge neural voice for that language (e.g. es-ES-ElviraNeural for Spanish).
  • Whisper is told which language to expect, so transcription accuracy holds up for non-English answers.
  • The closing summary's strengths, gaps, and coaching narrative are written back in the interview language, since that's the language the candidate actually spoke in.

Fixed bot lines that aren't otherwise generated by the LLM i.e., the opening greeting, the "I didn't catch that, please repeat" prompt are translated on the fly through the same chat provider used for question generation, with a silent fallback to English if that translation call ever fails, so a translation hiccup can't stall the interview.

How the pieces fit together

Speaking. The bot uses msedge-tts, a free wrapper around Microsoft's Edge text-to-speech service with no API key required. Audio is synthesized to a temp file rather than streamed directly, because streaming straight into Discord's audio player raced against playback finishing and occasionally got torn down mid-sentence. If synthesis fails, it retries a few times with backoff before giving up on that one line and moving on, rather than aborting the whole interview.

Listening. While you talk, the bot captures your raw Opus audio from Discord, decodes it frame-by-frame, and buffers it as PCM. Once you stop talking, the buffered audio is converted to WAV and sent to Groq's Whisper model for transcription. Capture stops based on a silence timer the bot waits for a pause before deciding you're done answering, with a hard cap that force-ends capture if someone talks continuously for over a minute, so the interview can never stall indefinitely on one answer.

The silence-detection window has been tuned a couple of times in practice: it started at 1 second, which was cutting people off mid-thought during natural pauses, then moved to 2.5 seconds, and now sits at 3 seconds, long enough to feel like a genuine "I'm done talking" pause without dragging the interview out.

If a transcribed answer comes back too short (silence, background noise, a stray "uh"), the bot assumes it didn't catch anything usable and asks the candidate to repeat once before moving on regardless, so one bad capture can't derail the whole session.

Asking. Each question is generated fresh by the guild's configured chat provider, given the job description and the running history of prior questions and answers, so later questions can build on what's already been said rather than repeating themselves. The generation prompt deliberately asks for one short, single-part question with no numbering or preamble, long-winded or multi-part questions read awkwardly out loud and make it harder for a listener to know what's actually being asked.

Scoring. Once the interview ends (naturally or via /interview stop), the full Q&A transcript and job description are sent to Groq directly for a structured scoring pass a 1–10 score, strengths, gaps, and a short coaching narrative aimed directly at the candidate. This step calls Groq's llama-3.3-70b-versatile model specifically (rather than going through the general chat-provider abstraction) because it needs strict JSON back; if the model's response ever fails to parse, the bot falls back to a neutral default score rather than failing the interview outright. That model choice itself is the survivor of an earlier swap, the original scoring model was retired by Groq and had to be replaced.

Wrap-up. The results reach the candidate two ways: a Discord embed with the score and headline strengths/gaps, and a plain-text transcript attachment listing every question and answer verbatim, so there's a durable record to review later beyond what fits in an embed.

Future plans

Ultimately, that is up to the users and what they would like to see added or changed. More questions? Configurable. Need more time for answers? That can be configured as well. Ultimately I build out these features for the community to try and give them tools that help make things easier and less nerve wracking to go through. No real person to judge your answers, no judgement because you speak differently or don't speak loudly. People get to practice interviewing against a real job description in comfort and private without having to feel nervous. Get in some reps interviewing before the real thing happens and get your confidence up.

How to get?


Head over to Torcbot to read all about the features and setup instructions. If you need any assistance past that, you can reach out to me and I will gladly assist with setup and answer any questions.

Top comments (0)