F Bot Builder

Centro de ayudaHelp center

Construye tu bot, paso a pasoBuild your bot, step by step

Guías claras para conectar Discord, crear comandos, instalar módulos y entender qué ocurre cuando algo falla.Clear guides to connect Discord, create commands, install modules, and understand what happens when something fails.

Recorrido: de cero a bot conectadoWalkthrough: from zero to connected bot

Necesitas una cuenta de Discord, un servidor donde puedas añadir bots y unos cinco minutos. Bot Builder nunca necesita tu contraseña de Discord.You need a Discord account, a server where you can add bots, and about five minutes. Bot Builder never needs your Discord password.

1

Crea la aplicación en DiscordCreate the application in Discord

Abre el Developer Portal, pulsa New Application, escribe el nombre de tu bot y acepta.Open the Developer Portal, press New Application, enter your bot's name, and accept.

2

Crea el usuario bot y copia el tokenCreate the bot user and copy its token

Dentro de tu aplicación entra en Bot. Pulsa Reset Token, confirma y copia el valor. Discord solo lo muestra una vez; si lo pierdes, genera otro.Inside your application, open Bot. Press Reset Token, confirm, and copy the value. Discord shows it once; if you lose it, generate another.

No envíes el token por chat ni lo pongas en capturas.Never send the token in chat or include it in screenshots. Quien lo tenga controla el bot. Pégalo únicamente en el campo seguro de Bot Builder.Anyone who has it controls the bot. Paste it only into Bot Builder's secure field.
3

Activa los intents necesariosEnable the required intents

En la misma pestaña Bot, activa Server Members Intent. Activa también Message Content Intent si usarás comandos con prefijo como !hola. Guarda los cambios.On the same Bot tab, enable Server Members Intent. Also enable Message Content Intent if you will use prefix commands such as !hello. Save changes.

4

Invita el bot a tu servidorInvite the bot to your server

Abre OAuth2 → URL Generator. Marca bot y applications.commands, selecciona al menos View Channels y Send Messages, abre la URL generada y elige tu servidor.Open OAuth2 → URL Generator. Select bot and applications.commands, grant at least View Channels and Send Messages, open the generated URL, and choose your server.

5

Conéctalo en Bot BuilderConnect it in Bot Builder

Crea o abre un espacio de trabajo de Discord, pulsa Crear bot, pega el token y elige modo de comandos, prefijo y cómo compartir módulos. Esas decisiones se pueden consultar desde la consola; el token nunca vuelve a mostrarse.Create or open a Discord workspace, press Create bot, paste the token, and choose command mode, prefix, and module sharing. You can review those choices from the console; the token is never shown again.

Listo cuando:You are done when: la consola muestra Conectado, aparece al menos un servidor y el bot figura en línea en Discord.the console shows Connected, at least one server appears, and the bot is online in Discord.

Crear el token de tu botCreate your bot's token

El token es lo que le pegas a Bot Builder para conectar tu bot. Lo genera Discord, no Bot Builder, así que se saca desde su portal de desarrolladores:The token is what you paste into Bot Builder to connect your bot. Discord issues it, not Bot Builder, so you get it from Discord's developer portal:

  1. Entra a discord.com/developers/applications con tu cuenta de Discord.Go to discord.com/developers/applications with your Discord account.
  2. New Application, ponle un nombre (será el nombre visible del bot).New Application, give it a name (it becomes the bot's visible name).
  3. Entra a la pestaña Bot y pulsa Reset Token (o Copy la primera vez) para revelarlo. Discord solo lo muestra esa vez.Open the Bot tab and press Reset Token (or Copy the first time) to reveal it. Discord only shows it that once.
  4. En esa misma pestaña, activa los Privileged Gateway Intents que tu bot necesite: Message Content Intent si vas a usar comandos con prefijo (!comando), Server Members Intent si necesitas la lista de miembros (por ejemplo, bienvenida). Sin esto el bot se conecta pero Discord le corta la conexión con un error de "intent no permitido".On that same tab, turn on the Privileged Gateway Intents your bot needs: Message Content Intent for prefix commands (!command), Server Members Intent if you need the member list (e.g. welcome messages). Without this the bot connects but Discord drops it with a "disallowed intent" error.
  5. Ve a OAuth2 → URL Generator, marca el scope bot (y applications.commands si usarás comandos de barra), elige los permisos que el bot va a necesitar en el servidor, y copia la URL generada al final.Go to OAuth2 → URL Generator, check the bot scope (and applications.commands for slash commands), pick the permissions your bot needs on the server, and copy the generated URL at the bottom.
  6. Abre esa URL, elige tu servidor y autoriza. El bot ya está invitado.Open that URL, pick your server and authorize. The bot is now invited.
  7. Volvé a Bot Builder y pega el token en Crear bot o en Reemplazar token de la consola del bot.Back in Bot Builder, paste the token into Create bot or the bot console's Replace token.
Tratá el token como una contraseña: quien lo tenga controla tu bot. No lo compartas ni lo publiques. Bot Builder lo guarda cifrado y no lo vuelve a mostrar — ver Seguridad del token.Treat the token like a password: whoever has it controls your bot. Never share or publish it. Bot Builder stores it encrypted and never shows it again — see Token security.

ComandosCommands

Un comando responde a un mensaje o a una barra (/) en Discord. Puede llamarse con un prefijo configurable (por ejemplo !saludo) o como comando de barra, y admite alias.A command replies to a message or a slash (/) in Discord. It can be called with a configurable prefix (e.g. !hello) or as a slash command, and supports aliases.

Tipos de respuesta:Reply types:

Opciones y restriccionesOptions & restrictions

Cada comando puede activar, de forma independiente, cualquiera de estas funciones extra:Each command can independently turn on any of these extra features:

FunciónFeatureQué haceWhat it does
CooldownCooldownTiempo mínimo entre usos por persona, con mensaje opcional (normal o por DM) cuando alguien lo excede.Minimum time between uses per person, with an optional message (normal or DM) when someone exceeds it.
Canales excluidosExcluded channelsEl comando no responde en los canales elegidos.The command does not respond in the chosen channels.
Roles excluidosExcluded rolesEl comando no responde a los roles elegidos.The command does not respond to the chosen roles.
Responder por DMReply by DMLa respuesta llega al autor por privado en vez del canal.The reply reaches the author by DM instead of the channel.
Borrar mensaje del autorDelete the author's messageBorra el mensaje que invocó el comando apenas se ejecuta.Deletes the message that triggered the command as soon as it runs.
Borrar respuesta del botDelete the bot's replyBorra la respuesta del bot 5 segundos después de enviarla.Deletes the bot's reply 5 seconds after sending it.
Reemplazar respuestaOverride the replyCambia lo que el comando responde (texto o embed) sin tocar su configuración principal — útil para probar un cambio rápido.Changes what the command replies (text or embed) without touching its main configuration — handy for a quick test.
Expulsar y prohibir / expulsar / aislar al mencionadoBan / kick / timeout the mentioned memberEl comando aplica esa acción de moderación a la persona que se mencione al usarlo (aislar pide una duración). Solo una se aplica por comando.The command applies that moderation action to whoever is mentioned when it is run (timeout asks for a duration). Only one applies per command.
Mensaje si falta a quién mencionarMessage when no one was mentionedSe envía si el comando necesita una mención (para banear/expulsar/aislar) y no se dio ninguna.Sent when the command needs a mention (to ban/kick/timeout) and none was given.
Mensaje si la acción fallaMessage when the action failsSe envía si el bot no pudo banear/expulsar/aislar (por ejemplo, su rol está por debajo del de esa persona).Sent when the bot could not ban/kick/timeout (for example, its role sits below that person's).
Opciones tipadasTyped optionsParámetros de canal, rol o texto que funcionan tanto de barra como con prefijo — con prefijo se dan mencionando (canal:#general rol:@Mod) o dejando que el bot las complete en orden.Channel, role or text parameters that work both as slash and prefix — with a prefix they are given by label (channel:#general role:@Mod) or filled in order automatically.

Variables

Se usan escribiendo {nombre} dentro de un texto o embed, y se reemplazan al enviarse. Una variable mal escrita se muestra tal cual ({typo}), para que el error se note.Used by writing {name} inside a text or embed, replaced when sent. A misspelled variable is shown as-is ({typo}), so the mistake is visible.

De contexto, siempre disponibles:Context variables, always available:

VariableResultadoResult
{user}Menciona a quien ejecutó el comando.Mentions whoever ran the command.
{user.tag}Su nombre de usuario.Their username.
{channel}El canal donde se ejecutó.The channel it ran in.
{server}El nombre del servidor.The server's name.
{command.args}Todo lo escrito después del comando; {command.arg.1} toma solo la primera palabra.Everything typed after the command; {command.arg.1} takes only the first word.
{date}, {time}, {random}Fecha, hora y un número aleatorio.Date, time and a random number.

Propias del bot ({variables.clave}), las creas tú: eligen un entorno — Global (un solo valor para todo, en todos los entornos) o una plataforma (Discord por ahora; después Telegram, WhatsApp…) — y, en una plataforma, un alcance: global (un valor compartido por todos tus bots), por bot, por servidor o por persona; con los tres últimos, cada uno guarda su propio valor o solo uno concreto tiene la variable. Además llevan un tipo, texto o número. Una de número puede ser mutable: cada vez que un comando se ejecuta puede fijarla, sumarle o restarle un valor. Es la base para contadores, puntos o una economía simple sin escribir código. Elige además si el valor persiste (PostgreSQL) o solo dura mientras el bot sigue encendido (sesión).Your own bot variables ({variables.key}): you create them, pick an environment — Global (one value for everything, in every environment) or a platform (Discord for now; later Telegram, WhatsApp…) — and, in a platform, a scope: global (one value shared by all your bots), per bot, per server or per person; with the last three each one keeps its own value, or only one specific one has the variable. They also have a type, text or number. A number one can be mutable: every time a command runs it can set it, or add or subtract a value. It's the base for counters, points or a simple economy with no code. You also choose whether the value persists (PostgreSQL) or only lasts while the bot stays up (session).

Abrir el explorador completo de variables →Open the complete variable explorer →

PlantillasTemplates

Guarda un mensaje o embed una vez y reutilízalo en varios comandos, en lugar de copiarlo y pegarlo. Cambiar la plantilla actualiza todos los comandos que la usan.Save a message or embed once and reuse it across several commands, instead of copying and pasting it. Changing the template updates every command that uses it.

Ver la guía para crear plantillas y variables →Read the template and variable creation guide →

Módulos y MarketplaceModules & Marketplace

Un módulo agrupa comandos y comportamiento listos para instalar (bienvenida, anuncios, sugerencias, y más). Se instalan por bot desde el Marketplace y cada servidor conserva su propia configuración, aunque compartan el mismo módulo.A module bundles ready-made commands and behavior (welcome, announcements, suggestions, and more). They are installed per bot from the Marketplace, and each server keeps its own configuration even when they share the same module.

Logs

Cuando algo falla (un comando, un permiso faltante, un límite alcanzado) queda registrado y agrupado por tipo, con quién puede verlo definido por rol. Se conservan 30 días.When something fails (a command, a missing permission, a limit reached) it is recorded and grouped by type, with who can see it defined by role. They are kept for 30 days.

Seguridad del tokenToken security

El token de tu bot se guarda cifrado y la app nunca lo vuelve a mostrar una vez pegado. Puedes reemplazarlo cuando quieras desde la consola del bot; la app te sugiere hacerlo cada tres meses como buena práctica, aunque no es obligatorio.Your bot's token is stored encrypted, and the app never shows it again once pasted. You can replace it at any time from the bot console; the app suggests doing so every three months as good practice, though it is not required.

Estados, errores y cómo resolverlosStatus, errors, and how to fix them

La consola distingue un bot pausado, un problema de credenciales y un problema de permisos. Mira primero el estado y después abre Actividad o Logs para ver el detalle más reciente.The console distinguishes a paused bot, a credential problem, and a permission problem. Check status first, then open Activity or Logs for the latest detail.

CONNECTEDBot en línea. Si un comando no responde, revisa canal, rol, cooldown y modo slash/prefijo.Bot online. If a command does not reply, check channel, role, cooldown, and slash/prefix mode.
CREDENTIAL_ERRORToken inválido o regenerado. Copia el token nuevo en Discord y usa Reemplazar token.Invalid or regenerated token. Copy the new Discord token and use Replace token.
PERMISSION_ERROREl bot no está en ningún servidor o no puede ver/enviar mensajes. Vuelve a invitarlo con los permisos correctos.The bot is not in a server or cannot view/send messages. Invite it again with the correct permissions.
PAUSEDEl bot está desactivado desde Bot Builder. Actívalo desde su consola.The bot is disabled in Bot Builder. Enable it from its console.

El bot está conectado pero no respondeThe bot is connected but does not reply

  1. Prueba en un canal que el bot pueda ver y donde pueda enviar mensajes.Test in a channel the bot can view and send messages in.
  2. Para prefijos, confirma Message Content Intent y que el prefijo escrito coincida.For prefixes, confirm Message Content Intent and that the typed prefix matches.
  3. Para slash, espera unos segundos tras guardar; Bot Builder sincroniza los comandos del servidor.For slash commands, wait a few seconds after saving; Bot Builder syncs the server commands.
  4. Comprueba canales y roles excluidos, cooldown y si la respuesta se configuró por DM.Check excluded channels and roles, cooldown, and whether the reply was configured as a DM.
  5. Abre Logs. Un fallo de comando, permiso o conexión queda agrupado allí para no repetir ruido.Open Logs. Command, permission, and connection failures are grouped there to avoid repeated noise.

Qué ocurre con tus datos y la APIWhat happens to your data and the API

La app móvil es el panel; la API de Bot Builder valida permisos y guarda la configuración; el worker mantiene la conexión con Discord y ejecuta comandos. Esta separación permite cerrar la app sin apagar el bot.The mobile app is the control panel; the Bot Builder API validates permissions and stores configuration; the worker maintains the Discord connection and executes commands. This separation lets you close the app without stopping the bot.

Dato o acciónData or actionQué hace Bot BuilderWhat Bot Builder does
ConfiguraciónConfigurationGuarda bots, comandos, variables, módulos y permisos por espacio de trabajo. PostgreSQL es la fuente de verdad.Stores bots, commands, variables, modules, and permissions per workspace. PostgreSQL is the source of truth.
TokenSe cifra antes de guardarlo, no vuelve en las respuestas de API y solo el worker lo usa para iniciar sesión en Discord.Encrypted before storage, never returned in API responses, and used only by the worker to sign in to Discord.
CambiosChangesAl guardar, la API avisa al worker para aplicar la configuración sin reiniciar el bot.When you save, the API notifies the worker to apply configuration without restarting the bot.
Datos de DiscordDiscord dataServidores y datos estables se sincronizan y reutilizan para reducir llamadas y respetar límites de Discord.Servers and stable data are synced and reused to reduce requests and respect Discord limits.
EquipoTeamCada petición comprueba el espacio de trabajo y el rol OWNER, EDITOR o VIEWER antes de leer o cambiar datos.Every request checks the workspace and OWNER, EDITOR, or VIEWER role before reading or changing data.
Para usar esta guía dentro de la app: abre wiki.html?lang=es en un WebView. Cada tema tiene un enlace directo, por ejemplo wiki.html?lang=es#estados. No requiere framework, cookies ni recursos externos.To use this guide inside the app: open wiki.html?lang=en in a WebView. Every topic has a direct link, such as wiki.html?lang=en#estados. It needs no framework, cookies, or external assets.

FAQ

¿Necesito saber programar?Do I need to know how to code?

No. Los módulos, comandos y plantillas se configuran desde la app.No. Modules, commands and templates are configured in the app.

¿Puedo usar comandos con prefijo y de barra al mismo tiempo?Can I use prefix and slash commands at the same time?

Sí, un mismo comando puede responder a ambos, y las opciones tipadas funcionan en los dos casos.Yes, the same command can answer to both, and typed options work in either case.

¿Qué pasa si mi bot excede los límites de Discord?What happens if my bot exceeds Discord's limits?

Bot Builder aplica un límite propio de envíos por canal y por bot, pensado solo para frenar un bucle o un pico anómalo, no el uso normal — no deberías notarlo en el día a día.Bot Builder applies its own limit on sends per channel and per bot, meant only to stop a loop or an abnormal spike, not normal use — you should not notice it day to day.

¿Por qué un comando de banear/expulsar/aislar no hace nada?Why does a ban/kick/timeout command do nothing?

El bot necesita el permiso correspondiente en el servidor y un rol por encima del de la persona mencionada. Si falla, se envía el mensaje de "acción falló" (si lo configuraste) y queda registrado en Logs.The bot needs the matching permission on the server and a role above the mentioned person's. If it fails, the "action failed" message is sent (if you set one) and it is recorded in Logs.