{"id":48,"date":"2026-07-27T15:21:05","date_gmt":"2026-07-27T15:21:05","guid":{"rendered":"https:\/\/interaction-bot.com\/blog\/discord-bot-command-builder\/"},"modified":"2026-07-27T15:21:12","modified_gmt":"2026-07-27T15:21:12","slug":"discord-bot-command-builder","status":"publish","type":"page","link":"https:\/\/interaction-bot.com\/blog\/discord-bot-command-builder\/","title":{"rendered":"Interaction Bot Slash Command Builder"},"content":{"rendered":"<p><!DOCTYPE html><br \/>\n<html lang=\"en\"><br \/>\n<head><br \/>\n<meta charset=\"UTF-8\"><br \/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><br \/>\n<title>Discord Bot Slash Command Builder \u2014 Interaction Bot<\/title><br \/>\n<meta name=\"description\" content=\"Build valid Interaction Bot slash commands for translation, TTS, STT, setup, settings, and language preferences. Copy-paste ready for Discord.\"><\/p>\n<style>\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\nbody { font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif; line-height: 1.6; color: #1a1a2e; background: #f5f5fa; }\n.container { max-width: 800px; margin: 0 auto; padding: 1.5rem; }\nheader { background: #1a1a2e; color: #fff; padding: 2rem 1.5rem; text-align: center; }\nheader h1 { font-size: 1.75rem; margin-bottom: .5rem; }\nheader p { opacity: .8; font-size: .95rem; max-width: 600px; margin: 0 auto; }<\/p>\n<p>\/* Tool Section *\/\n.tool-panel { background: #fff; border-radius: 12px; box-shadow: 0 2px 12px rgba(0,0,0,.08); padding: 1.5rem; margin: -1.5rem auto 2rem; position: relative; z-index: 1; }<\/p>\n<p>.mode-toggle { display: flex; gap: .5rem; margin-bottom: 1.5rem; }\n.mode-toggle button { flex: 1; padding: .6rem 1rem; border: 2px solid #e0e0e8; background: #fff; border-radius: 8px; cursor: pointer; font-size: .9rem; font-weight: 600; transition: all .2s; }\n.mode-toggle button.active { border-color: #5865F2; background: #5865F2; color: #fff; }\n.mode-toggle button:hover:not(.active) { border-color: #5865F2; }<\/p>\n<p>.form-group { margin-bottom: 1rem; }\n.form-group label { display: block; font-weight: 600; font-size: .85rem; margin-bottom: .35rem; color: #444; }\n.form-group select, .form-group input, .form-group textarea { width: 100%; padding: .65rem .75rem; border: 2px solid #e0e0e8; border-radius: 8px; font-size: .95rem; font-family: inherit; transition: border-color .2s; background: #fafafe; }\n.form-group select:focus, .form-group input:focus, .form-group textarea:focus { outline: none; border-color: #5865F2; background: #fff; }\n.form-group textarea { resize: vertical; min-height: 80px; }\n.form-group .hint { font-size: .78rem; color: #888; margin-top: .25rem; }\n.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }\n.optional-badge { font-size: .7rem; font-weight: 400; color: #999; margin-left: .25rem; }<\/p>\n<p>.output-section { margin-top: 1.5rem; padding: 1.25rem; background: #f0f2ff; border-radius: 10px; border: 2px solid #d8dcff; }\n.output-section .label { font-size: .8rem; font-weight: 700; color: #5865F2; text-transform: uppercase; letter-spacing: .05em; margin-bottom: .5rem; }\n.output-command { display: flex; align-items: stretch; gap: .5rem; }\n.output-command code { flex: 1; padding: .75rem 1rem; background: #1a1a2e; color: #57f287; border-radius: 8px; font-size: 1rem; font-family: \"SF Mono\", \"Fira Code\", \"Consolas\", monospace; word-break: break-all; display: flex; align-items: center; }\n.output-command button { padding: .65rem 1.25rem; background: #5865F2; color: #fff; border: none; border-radius: 8px; cursor: pointer; font-size: .9rem; font-weight: 600; white-space: nowrap; transition: background .2s; }\n.output-command button:hover { background: #4752c4; }\n.output-command button.copied { background: #57f287; color: #1a1a2e; }<\/p>\n<p>.no-output { color: #999; font-style: italic; }<\/p>\n<p>\/* Command Reference *\/\n.command-ref { display: none; }\n.command-ref.show { display: block; }\n.command-ref table { width: 100%; border-collapse: collapse; font-size: .9rem; }\n.command-ref th { text-align: left; padding: .6rem .75rem; background: #1a1a2e; color: #fff; font-size: .8rem; text-transform: uppercase; letter-spacing: .05em; }\n.command-ref td { padding: .65rem .75rem; border-bottom: 1px solid #e0e0e8; vertical-align: top; }\n.command-ref td:first-child { font-family: \"SF Mono\", \"Fira Code\", \"Consolas\", monospace; font-size: .85rem; color: #5865F2; font-weight: 600; white-space: nowrap; }\n.command-ref td:nth-child(2) { font-size: .85rem; }\n.command-ref td:nth-child(3) { font-family: \"SF Mono\", \"Fira Code\", \"Consolas\", monospace; font-size: .8rem; color: #555; }\n.command-ref tr:nth-child(even) td { background: #fafafe; }\n.command-ref .category-row td { background: #f0f2ff !important; font-weight: 700; font-size: .82rem; color: #1a1a2e; padding-top: 1rem; border-bottom: 2px solid #d8dcff; }<\/p>\n<p>\/* Article Section *\/\n.article { max-width: 800px; margin: 0 auto; padding: 0 1.5rem 3rem; }\n.article h2 { font-size: 1.4rem; margin: 2.5rem 0 1rem; color: #1a1a2e; }\n.article h3 { font-size: 1.15rem; margin: 1.5rem 0 .75rem; }\n.article p, .article li { font-size: .95rem; color: #444; margin-bottom: .85rem; }\n.article ul, .article ol { margin: .5rem 0 1rem 1.5rem; }\n.article code { font-family: \"SF Mono\", \"Fira Code\", \"Consolas\", monospace; background: #f0f2ff; padding: .15rem .4rem; border-radius: 4px; font-size: .88rem; color: #5865F2; }\n.article img { max-width: 100%; border-radius: 8px; margin: 1.5rem 0; display: block; }\n.article .caption { font-size: .78rem; color: #888; margin-top: -.75rem; margin-bottom: 1.5rem; }\n.article iframe { width: 100%; aspect-ratio: 16\/9; border-radius: 8px; margin: 1.5rem 0; border: none; }\n.article .backlink { margin-top: 3rem; padding: 1.25rem; background: #fff; border-radius: 10px; border-left: 4px solid #5865F2; font-size: .9rem; }<\/p>\n<p>@media (max-width: 600px) {\n  .container, .article { padding: 1rem; }\n  header h1 { font-size: 1.35rem; }\n  .form-row { grid-template-columns: 1fr; }\n  .tool-panel { padding: 1rem; }\n  .output-command { flex-direction: column; }\n  .output-command button { width: 100%; }\n  .command-ref table { font-size: .8rem; }\n  .command-ref td:first-child { white-space: normal; }\n}\n<\/style>\n<p><\/head><br \/>\n<body><\/p>\n<header>\n<h1>Interaction Bot Slash Command Builder<\/h1>\n<p>Build valid slash commands for translation, TTS, STT, setup, and settings \u2014 copy-paste ready for Discord.<\/p>\n<\/header>\n<div class=\"container\">\n<div class=\"tool-panel\">\n<div class=\"mode-toggle\">\n      <button id=\"btn-builder\" class=\"active\" onclick=\"switchMode('builder')\">Command Builder<\/button><br \/>\n      <button id=\"btn-reference\" onclick=\"switchMode('reference')\">Command Reference<\/button>\n    <\/div>\n<p>    <!-- Builder Mode --><\/p>\n<div id=\"builder-panel\">\n<div class=\"form-group\">\n        <label for=\"cmd-action\">Command<\/label><br \/>\n        <select id=\"cmd-action\" onchange=\"updateForm()\"><option value=\"translate\">\/translate \u2014 Manual translation<\/option><option value=\"tts\">\/tts \u2014 Text-to-speech<\/option><option value=\"stt\">\/stt \u2014 Speech-to-text<\/option><option value=\"setup\">\/setup \u2014 Configure a feature<\/option><option value=\"settings\">\/settings \u2014 Adjust bot settings<\/option><option value=\"language\">\/language \u2014 Set preferred language<\/option><\/select>\n      <\/div>\n<div id=\"dynamic-fields\"><\/div>\n<div class=\"output-section\">\n<div class=\"label\">Generated Command<\/div>\n<div class=\"output-command\">\n          <code id=\"output-cmd\">Select parameters to build a command<\/code><br \/>\n          <button id=\"copy-btn\" onclick=\"copyCommand()\" disabled>Copy<\/button>\n        <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>    <!-- Reference Mode --><\/p>\n<div id=\"reference-panel\" class=\"command-ref\">\n<div class=\"table-wrap\"><table>\n<thead>\n<tr>\n<th>Command<\/th>\n<th>Description<\/th>\n<th>Example<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"category-row\">\n<td colspan=\"3\">Translation<\/td>\n<\/tr>\n<tr>\n<td>\/translate &lt;text&gt; &lt;target&gt;<\/td>\n<td>Translate text into a target language. Source language is auto-detected.<\/td>\n<td>\/translate Hello! es<\/td>\n<\/tr>\n<tr>\n<td>\/translate &lt;text&gt; &lt;source&gt; &lt;target&gt;<\/td>\n<td>Translate text from a known source language to a target language.<\/td>\n<td>\/translate Bonjour fr en<\/td>\n<\/tr>\n<tr>\n<td>\/translation stats<\/td>\n<td>Show translation usage statistics for the server.<\/td>\n<td>\/translation stats<\/td>\n<\/tr>\n<tr class=\"category-row\">\n<td colspan=\"3\">Text-to-Speech<\/td>\n<\/tr>\n<tr>\n<td>\/tts &lt;text&gt;<\/td>\n<td>Read text aloud in the current voice channel using default language.<\/td>\n<td>\/tts Welcome everyone<\/td>\n<\/tr>\n<tr>\n<td>\/tts &lt;text&gt; &lt;language&gt;<\/td>\n<td>Read text aloud in a specific language voice.<\/td>\n<td>\/tts Hola a todos es<\/td>\n<\/tr>\n<tr class=\"category-row\">\n<td colspan=\"3\">Speech-to-Text<\/td>\n<\/tr>\n<tr>\n<td>\/stt &lt;voice_channel&gt; &lt;text_channel&gt;<\/td>\n<td>Start transcribing a voice channel into a text channel.<\/td>\n<td>\/stt General #voice-log<\/td>\n<\/tr>\n<tr>\n<td>\/stt &lt;voice_channel&gt; &lt;text_channel&gt; &lt;language&gt;<\/td>\n<td>Transcribe with a specific recognition language.<\/td>\n<td>\/stt General #voice-log ja<\/td>\n<\/tr>\n<tr class=\"category-row\">\n<td colspan=\"3\">Setup<\/td>\n<\/tr>\n<tr>\n<td>\/setup translation<\/td>\n<td>Walk through auto-translation setup: languages, channels, roles.<\/td>\n<td>\/setup translation<\/td>\n<\/tr>\n<tr>\n<td>\/setup tts<\/td>\n<td>Configure text-to-speech channels and voice settings.<\/td>\n<td>\/setup tts<\/td>\n<\/tr>\n<tr>\n<td>\/setup stt<\/td>\n<td>Configure speech-to-text transcription channels.<\/td>\n<td>\/setup stt<\/td>\n<\/tr>\n<tr>\n<td>\/setup moderation<\/td>\n<td>Configure auto-moderation filters and actions.<\/td>\n<td>\/setup moderation<\/td>\n<\/tr>\n<tr class=\"category-row\">\n<td colspan=\"3\">Settings<\/td>\n<\/tr>\n<tr>\n<td>\/settings exclude-role &lt;role&gt;<\/td>\n<td>Skip translating messages from a specific role (e.g., moderators).<\/td>\n<td>\/settings exclude-role @Moderator<\/td>\n<\/tr>\n<tr>\n<td>\/settings reactions<\/td>\n<td>Toggle emoji reactions on translated messages on or off.<\/td>\n<td>\/settings reactions<\/td>\n<\/tr>\n<tr>\n<td>\/settings language &lt;code&gt;<\/td>\n<td>Set the default server language for translation and TTS.<\/td>\n<td>\/settings language en<\/td>\n<\/tr>\n<tr class=\"category-row\">\n<td colspan=\"3\">Language<\/td>\n<\/tr>\n<tr>\n<td>\/language &lt;code&gt;<\/td>\n<td>Set your personal preferred language for all bot interactions.<\/td>\n<td>\/language ja<\/td>\n<\/tr>\n<tr>\n<td>\/language list<\/td>\n<td>List all supported language codes.<\/td>\n<td>\/language list<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div><\/div>\n<\/p><\/div>\n<\/div>\n<article class=\"article\">\n<h2>How Interaction Bot Slash Commands Work<\/h2>\n<p>Interaction Bot uses Discord&#8217;s native slash command system. When you type <code>\/<\/code> in any channel where the bot is present, Discord shows every available command with inline help text. You do not need to memorize syntax or check a cheat sheet. The command builder above generates the exact string you type into Discord to trigger each feature.<\/p>\n<p>The bot runs on over 55,000 servers and serves more than 1.5 million members, according to the Interaction Bot website. It combines translation, text-to-speech, speech-to-text, AI question answering, and moderation under a single set of slash commands \u2014 no prefix characters to remember, no separate bots to manage.<\/p>\n<p>  <img decoding=\"async\" width=\"1023\" height=\"575\" class=\"wp-image-49\" src=\"https:\/\/interaction-bot.com/blog\/wp-content\/uploads\/sites\/3\/2026\/07\/20013034233_19f520eefb_b.jpg\" alt=\"Coding interface showing how Discord bots are built with slash commands\" loading=\"lazy\" srcset=\"https:\/\/interaction-bot.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/07\/20013034233_19f520eefb_b.jpg 1023w, https:\/\/interaction-bot.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/07\/20013034233_19f520eefb_b-300x169.jpg 300w, https:\/\/interaction-bot.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/07\/20013034233_19f520eefb_b-768x432.jpg 768w, https:\/\/interaction-bot.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/07\/20013034233_19f520eefb_b-800x450.jpg 800w\" sizes=\"auto, (max-width: 1023px) 100vw, 1023px\" \/><\/p>\n<div class=\"caption\">Credit: Coding Javascript, Wikimedia Commons, via Flickr<\/div>\n<h2>What Each Command Does (and What People Get Wrong)<\/h2>\n<h3>\/translate \u2014 Manual Translation<\/h3>\n<p><code>\/translate<\/code> is the on-demand translation command. You supply the text and a target language code, and the bot replies with the translation. The source language is auto-detected, so you do not need to know what language the original text is in. The two-argument form <code>\/translate Hello! es<\/code> covers most use cases.<\/p>\n<p>A common mistake is assuming the bot only supports a handful of languages. Interaction Bot&#8217;s translation engine covers over 100 languages. Another is treating <code>\/translate<\/code> as the primary way to use the bot. The setup guide on interaction-bot.com makes clear that <code>\/translate<\/code> is the fallback for one-off needs. Automatic channel translation and flag-reaction translation handle the majority of real-world usage, running in the background without anyone typing a command.<\/p>\n<h3>\/tts \u2014 Text-to-Speech<\/h3>\n<p><code>\/tts<\/code> reads typed text aloud in a Discord voice channel. It is distinct from Discord&#8217;s built-in <code>\/tts<\/code> command, which reads one message at a time and only in the channel where it was sent. Interaction Bot&#8217;s version supports over 30 languages, reads in the correct language voice (Spanish text gets a Spanish voice, not approximated English), and can be configured to run continuously on designated channels through <code>\/setup tts<\/code>.<\/p>\n<p>People sometimes expect TTS output to go to the same text channel they typed in. It does not. The bot needs to be in a voice channel to speak, and you or the bot must be connected to one. If you get no audio, check that the bot has the Connect and Speak permissions in your voice channel.<\/p>\n<h3>\/stt \u2014 Speech-to-Text<\/h3>\n<p><code>\/stt<\/code> transcribes a voice channel conversation into a text channel in real time. Each transcribed line is tagged with the speaker&#8217;s Discord name. This is especially useful for logging meetings, making gaming sessions accessible to members who are deaf or hard of hearing, and letting moderators monitor voice discussions without joining the call.<\/p>\n<p>A feature people overlook: you can pair STT with Interaction Bot&#8217;s translation engine. A voice conversation in French can be transcribed and translated into English in the same text channel, letting members who speak different languages follow the same discussion.<\/p>\n<h3>\/setup \u2014 Guided Configuration<\/h3>\n<p><code>\/setup<\/code> is the wizard command. Rather than memorizing every configuration flag, you run <code>\/setup translation<\/code>, <code>\/setup tts<\/code>, <code>\/setup stt<\/code>, or <code>\/setup moderation<\/code> and follow the interactive prompts. The bot asks which channels to apply the feature to, which languages to use, and which roles (if any) to exclude. This is the fastest way to get a feature working on a new server.<\/p>\n<h3>\/settings \u2014 Fine-Tuning<\/h3>\n<p>Once a feature is running, <code>\/settings<\/code> lets you adjust individual options without re-running the full setup wizard. Settings documented on the Interaction Bot blog include <code>\/settings exclude-role @Moderator<\/code> to prevent moderator messages from being translated, and <code>\/settings reactions<\/code> to toggle emoji reactions on translated messages.<\/p>\n<h3>\/language \u2014 Personal Preference<\/h3>\n<p><code>\/language<\/code> sets your personal preferred language for all bot interactions. When you run <code>\/language ja<\/code>, the bot replies to you in Japanese, translates messages into Japanese by default when you use flag reactions, and uses Japanese TTS voices. This is a per-member setting, not a server-wide one, so each member controls their own experience.<\/p>\n<div class=\"caption\" style=\"margin-top:-1.5rem;margin-bottom:1.5rem;\">Language codes use the two-letter <a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_ISO_639-1_codes\" rel=\"nofollow\">ISO 639-1<\/a> standard: en, es, fr, de, ja, ko, pt, ru, zh, and over 100 more.<\/div>\n<p>  <img decoding=\"async\" width=\"1023\" height=\"575\" class=\"wp-image-50\" src=\"https:\/\/interaction-bot.com/blog\/wp-content\/uploads\/sites\/3\/2026\/07\/20607701226_e0b1226cd2_b.jpg\" alt=\"Source code interface representing the engine behind Discord bot commands\" loading=\"lazy\" srcset=\"https:\/\/interaction-bot.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/07\/20607701226_e0b1226cd2_b.jpg 1023w, https:\/\/interaction-bot.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/07\/20607701226_e0b1226cd2_b-300x169.jpg 300w, https:\/\/interaction-bot.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/07\/20607701226_e0b1226cd2_b-768x432.jpg 768w, https:\/\/interaction-bot.com\/blog\/wp-content\/uploads\/sites\/3\/2026\/07\/20607701226_e0b1226cd2_b-800x450.jpg 800w\" sizes=\"auto, (max-width: 1023px) 100vw, 1023px\" \/><\/p>\n<div class=\"caption\">Credit: Source code security plugin, Wikimedia Commons, via Flickr<\/div>\n<h2>Why a Command Builder Matters for Server Admins<\/h2>\n<p>Most Discord bot documentation is a wall of text. A server admin evaluating Interaction Bot for a 500-person multilingual community does not want to read three pages to figure out how to translate a message. The command builder above gives them the exact string they need, right now, for the exact action they want to take.<\/p>\n<p>For communities that link to this tool in their <code>#resources<\/code> or <code>#bot-help<\/code> channels, it also reduces the number of &#8220;how do I\u2026&#8221; questions moderators have to answer. A new member who wants to hear messages read aloud does not need to learn every TTS parameter. They select TTS from the dropdown, fill in their text, and paste the result.<\/p>\n<p>Roduz&#8217;s walkthrough of setting up Interaction Bot shows the translation commands in action on a live server. At about 2:45, the video demonstrates how <code>\/setup translation<\/code> walks a server admin through the full configuration:<\/p>\n<p>  <iframe src=\"https:\/\/www.youtube.com\/embed\/lqXAISyny_s\" title=\"How to setup Interaction bot Discord \u2014 Translate tutorial by Roduz\" loading=\"lazy\" allowfullscreen><\/iframe><\/p>\n<div class=\"caption\">Video: &#8220;How to setup Interaction bot Discord | Translate&#8221; by Roduz on YouTube<\/div>\n<h2>Language Codes Quick Reference<\/h2>\n<p>All Interaction Bot commands that accept a language use the two-letter ISO 639-1 code. Here are the most commonly used ones:<\/p>\n<div class=\"table-wrap\"><table style=\"width:100%;border-collapse:collapse;font-size:.9rem;margin:1rem 0;\">\n<thead>\n<tr style=\"background:#1a1a2e;color:#fff;\">\n<th style=\"text-align:left;padding:.5rem .75rem;\">Code<\/th>\n<th style=\"text-align:left;padding:.5rem .75rem;\">Language<\/th>\n<th style=\"text-align:left;padding:.5rem .75rem;\">Code<\/th>\n<th style=\"text-align:left;padding:.5rem .75rem;\">Language<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding:.4rem .75rem;font-family:monospace;\">en<\/td>\n<td style=\"padding:.4rem .75rem;\">English<\/td>\n<td style=\"padding:.4rem .75rem;font-family:monospace;\">ja<\/td>\n<td style=\"padding:.4rem .75rem;\">Japanese<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:.4rem .75rem;font-family:monospace;\">es<\/td>\n<td style=\"padding:.4rem .75rem;\">Spanish<\/td>\n<td style=\"padding:.4rem .75rem;font-family:monospace;\">ko<\/td>\n<td style=\"padding:.4rem .75rem;\">Korean<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:.4rem .75rem;font-family:monospace;\">fr<\/td>\n<td style=\"padding:.4rem .75rem;\">French<\/td>\n<td style=\"padding:.4rem .75rem;font-family:monospace;\">pt<\/td>\n<td style=\"padding:.4rem .75rem;\">Portuguese<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:.4rem .75rem;font-family:monospace;\">de<\/td>\n<td style=\"padding:.4rem .75rem;\">German<\/td>\n<td style=\"padding:.4rem .75rem;font-family:monospace;\">ru<\/td>\n<td style=\"padding:.4rem .75rem;\">Russian<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:.4rem .75rem;font-family:monospace;\">zh<\/td>\n<td style=\"padding:.4rem .75rem;\">Chinese<\/td>\n<td style=\"padding:.4rem .75rem;font-family:monospace;\">ar<\/td>\n<td style=\"padding:.4rem .75rem;\">Arabic<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:.4rem .75rem;font-family:monospace;\">it<\/td>\n<td style=\"padding:.4rem .75rem;\">Italian<\/td>\n<td style=\"padding:.4rem .75rem;font-family:monospace;\">nl<\/td>\n<td style=\"padding:.4rem .75rem;\">Dutch<\/td>\n<\/tr>\n<tr>\n<td style=\"padding:.4rem .75rem;font-family:monospace;\">pl<\/td>\n<td style=\"padding:.4rem .75rem;\">Polish<\/td>\n<td style=\"padding:.4rem .75rem;font-family:monospace;\">tr<\/td>\n<td style=\"padding:.4rem .75rem;\">Turkish<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<div class=\"backlink\">\n    <strong>Want to add Interaction Bot to your server?<\/strong> Visit <a href=\"https:\/\/interaction-bot.com\">interaction-bot.com<\/a> to invite the bot and read the full setup guides for translation, TTS, STT, and moderation. The <a href=\"https:\/\/interaction-bot.com\/blog\/what-is-interaction-bot\/\">complete guide to Interaction Bot<\/a> covers every feature in detail.\n  <\/div>\n<\/article>\n<p><script>\nconst LANG_CODES = {\n  en:'English',es:'Spanish',fr:'French',de:'German',ja:'Japanese',ko:'Korean',\n  pt:'Portuguese',ru:'Russian',zh:'Chinese',ar:'Arabic',it:'Italian',nl:'Dutch',\n  pl:'Polish',tr:'Turkish',sv:'Swedish',da:'Danish',fi:'Finnish',no:'Norwegian',\n  cs:'Czech',ro:'Romanian',uk:'Ukrainian',hi:'Hindi',th:'Thai',vi:'Vietnamese',\n  id:'Indonesian',ms:'Malay',he:'Hebrew',el:'Greek',hu:'Hungarian',bg:'Bulgarian'\n};<\/p>\n<p>const formConfigs = {\n  translate: [\n    { id:'tr-text', label:'Text to translate', type:'textarea', required:true, placeholder:'Hello, how are you?' },\n    { id:'tr-target', label:'Target language', type:'select', required:true, options:LANG_CODES, default:'es' },\n    { id:'tr-source', label:'Source language', type:'select', optional:true, options:Object.assign({auto:'Auto-detect'}, LANG_CODES), default:'auto' }\n  ],\n  tts: [\n    { id:'tts-text', label:'Text to speak', type:'textarea', required:true, placeholder:'Welcome to the server!' },\n    { id:'tts-lang', label:'Voice language', type:'select', required:false, options:LANG_CODES, default:'en' }\n  ],\n  stt: [\n    { id:'stt-voice', label:'Voice channel', type:'text', required:true, placeholder:'General' },\n    { id:'stt-textch', label:'Text channel for transcriptions', type:'text', required:true, placeholder:'#voice-log' },\n    { id:'stt-lang', label:'Recognition language', type:'select', required:false, options:Object.assign({auto:'Auto-detect'}, LANG_CODES), default:'auto' }\n  ],\n  setup: [\n    { id:'su-feature', label:'Feature to set up', type:'select', required:true, options:{translation:'Translation',tts:'Text-to-Speech',stt:'Speech-to-Text',moderation:'Moderation'}, default:'translation' }\n  ],\n  settings: [\n    { id:'se-setting', label:'Setting', type:'select', required:true, options:{'exclude-role':'exclude-role \u2014 Exclude role from translation','reactions':'reactions \u2014 Toggle emoji reactions','language':'language \u2014 Set default server language'}, default:'exclude-role' },\n    { id:'se-value', label:'Value', type:'text', required:true, placeholder:'@Moderator or on\/off or language code' }\n  ],\n  language: [\n    { id:'lang-code', label:'Language', type:'select', required:true, options:Object.assign({list:'List all codes'}, LANG_CODES), default:'en' }\n  ]\n};<\/p>\n<p>function switchMode(mode) {\n  document.getElementById('btn-builder').classList.toggle('active', mode==='builder');\n  document.getElementById('btn-reference').classList.toggle('active', mode==='reference');\n  document.getElementById('builder-panel').style.display = mode==='builder' ? 'block' : 'none';\n  document.getElementById('reference-panel').classList.toggle('show', mode==='reference');\n}<\/p>\n<p>function updateForm() {\n  var action = document.getElementById('cmd-action').value;\n  var container = document.getElementById('dynamic-fields');\n  var config = formConfigs[action];\n  var html = '';\n  for (var i = 0; i < config.length; i++) {\n    var f = config[i];\n    html += '\n\n<div class=\"form-group\"><label for=\"' + f.id + '\">' + f.label;\n    if (f.optional) html += '<span class=\"optional-badge\">optional<\/span>';\n    html += '<\/label>';\n    if (f.type === 'select') {\n      html += '<select id=\"' + f.id + '\" onchange=\"buildCommand()\">';\n      var keys = Object.keys(f.options);\n      for (var k = 0; k < keys.length; k++) {\n        var sel = keys[k] === f.default ? ' selected' : '';\n        html += '<option value=\"' + keys[k] + '\"' + sel + '>' + f.options[keys[k]] + '<\/option>';\n      }\n      html += '<\/select>';\n    } else if (f.type === 'textarea') {\n      html += '<textarea id=\"' + f.id + '\" placeholder=\"' + (f.placeholder||'') + '\" oninput=\"buildCommand()\"><\/textarea>';\n    } else {\n      html += '<input type=\"text\" id=\"' + f.id + '\" placeholder=\"' + (f.placeholder||'') + '\" oninput=\"buildCommand()\">';\n    }\n    html += '<\/div>\n<p>';\n  }\n  container.innerHTML = html;\n  buildCommand();\n}<\/p>\n<p>function getVal(id) {\n  var el = document.getElementById(id);\n  return el ? el.value.trim() : '';\n}<\/p>\n<p>function buildCommand() {\n  var action = document.getElementById('cmd-action').value;\n  var cmd = '\/' + action;\n  var hasContent = false;<\/p>\n<p>  if (action === 'translate') {\n    var text = getVal('tr-text');\n    var target = getVal('tr-target');\n    var source = getVal('tr-source');\n    if (text && target) {\n      cmd += ' ' + text + ' ' + target;\n      if (source && source !== 'auto') cmd += ' ' + source;\n      hasContent = true;\n    } else if (text || target) hasContent = true;\n  } else if (action === 'tts') {\n    var text = getVal('tts-text');\n    var lang = getVal('tts-lang');\n    if (text) { cmd += ' ' + text; hasContent = true; }\n    if (lang && lang !== 'en') { cmd += ' ' + lang; }\n  } else if (action === 'stt') {\n    var voice = getVal('stt-voice');\n    var txtch = getVal('stt-textch');\n    var lang = getVal('stt-lang');\n    if (voice && txtch) {\n      cmd += ' ' + voice + ' ' + txtch;\n      if (lang && lang !== 'auto') cmd += ' ' + lang;\n      hasContent = true;\n    } else if (voice || txtch) hasContent = true;\n  } else if (action === 'setup') {\n    var feat = getVal('su-feature');\n    if (feat) { cmd += ' ' + feat; hasContent = true; }\n  } else if (action === 'settings') {\n    var setting = getVal('se-setting');\n    var val = getVal('se-value');\n    if (setting) { cmd += ' ' + setting; hasContent = true; }\n    if (val) { cmd += ' ' + val; }\n  } else if (action === 'language') {\n    var code = getVal('lang-code');\n    if (code) { cmd += ' ' + code; hasContent = true; }\n  }<\/p>\n<p>  var output = document.getElementById('output-cmd');\n  var btn = document.getElementById('copy-btn');\n  if (hasContent) {\n    output.textContent = cmd;\n    btn.disabled = false;\n    btn.textContent = 'Copy';\n    btn.classList.remove('copied');\n  } else {\n    output.textContent = 'Fill in the required fields above to build a command';\n    btn.disabled = true;\n  }\n}<\/p>\n<p>function copyCommand() {\n  var cmd = document.getElementById('output-cmd').textContent;\n  if (!cmd || cmd.indexOf('Fill in') === 0) return;\n  navigator.clipboard.writeText(cmd).then(function() {\n    var btn = document.getElementById('copy-btn');\n    btn.textContent = 'Copied!';\n    btn.classList.add('copied');\n    setTimeout(function() { btn.textContent = 'Copy'; btn.classList.remove('copied'); }, 2000);\n  });\n}<\/p>\n<p>\/\/ Init\nupdateForm();\n<\/script><\/p>\n<p><\/body><br \/>\n<\/html><\/p>\n","protected":false},"excerpt":{"rendered":"<p>An interactive slash command builder that generates ready-to-use Interaction Bot commands for Discord \u2014 select translate, TTS, STT, setup, settings, or language and fill in parameters to get the exact command string.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-tool.php","meta":{"footnotes":""},"class_list":["post-48","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/interaction-bot.com\/blog\/wp-json\/wp\/v2\/pages\/48","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/interaction-bot.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/interaction-bot.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/interaction-bot.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/interaction-bot.com\/blog\/wp-json\/wp\/v2\/comments?post=48"}],"version-history":[{"count":1,"href":"https:\/\/interaction-bot.com\/blog\/wp-json\/wp\/v2\/pages\/48\/revisions"}],"predecessor-version":[{"id":51,"href":"https:\/\/interaction-bot.com\/blog\/wp-json\/wp\/v2\/pages\/48\/revisions\/51"}],"wp:attachment":[{"href":"https:\/\/interaction-bot.com\/blog\/wp-json\/wp\/v2\/media?parent=48"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}