Cómo hacer un bot de Discord paso a paso (Python y JavaScript)
Para hacer un bot de Discord creas una aplicación en el Discord Developer Portal, le agregas un bot, copias su token, lo invitas a tu servidor con un enlace de permisos y escribes un programa (en Python con discord.py o en JavaScript con discord.js) que se conecta con ese token. Es gratis. Abajo están los pasos completos con código para ambos lenguajes.
Paso 1: crear la aplicación y el bot
- Entra al Developer Portal con tu cuenta de Discord.
- Pulsa New Application, ponle nombre y acepta los términos.
- Ve a la pestaña Bot.
- Pulsa Reset Token y copia el token. Guárdalo como contraseña; solo se muestra una vez.
- En la misma pestaña, en Privileged Gateway Intents, activa Message Content Intent si tu bot va a leer el texto de los mensajes. Activa Server Members Intent solo si lo necesitas (por ejemplo, para dar bienvenida).
Los nombres de pestañas y opciones pueden cambiar; la documentación oficial de Discord tiene la versión actual.
Paso 2: invitar el bot a tu servidor
- En la pestaña OAuth2 busca el URL Generator.
- Marca los scopes
botyapplications.commands(este último para comandos con/). - Marca solo los permisos que necesita: Send Messages, Read Message History, y si modera, Manage Messages. Evita Administrator.
- Copia la URL generada, ábrela y elige tu servidor (necesitas ser administrador del servidor).
Paso 3a: programarlo en Python (discord.py)
python3 -m venv .venv && source .venv/bin/activate
pip install discord.py
export DISCORD_TOKEN="tu_token"
# bot.py
import os
import discord
from discord import app_commands
intents = discord.Intents.default()
intents.message_content = True # debe coincidir con lo activado en el portal
client = discord.Client(intents=intents)
tree = app_commands.CommandTree(client)
@tree.command(name="hola", description="El bot te saluda")
async def hola(interaction: discord.Interaction):
await interaction.response.send_message(f"¡Hola, {interaction.user.display_name}!")
@client.event
async def on_ready():
await tree.sync() # registra los comandos /
print(f"Conectado como {client.user}")
@client.event
async def on_message(message):
if message.author.bot:
return # evita que el bot se conteste a sí mismo
if message.content.lower() == "!reglas":
await message.channel.send("1) Respeto. 2) Nada de spam. 3) Diviértete.")
client.run(os.environ["DISCORD_TOKEN"])
Corre python bot.py. En tu servidor escribe /hola o !reglas. Los comandos / pueden tardar un poco en aparecer la primera vez.
Paso 3b: programarlo en JavaScript (discord.js)
npm init -y
npm install discord.js
// index.js
const { Client, GatewayIntentBits } = require("discord.js");
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent,
],
});
client.once("ready", () => console.log(`Conectado como ${client.user.tag}`));
client.on("messageCreate", (msg) => {
if (msg.author.bot) return;
if (msg.content.toLowerCase() === "!ping") msg.reply("pong 🏓");
});
client.login(process.env.DISCORD_TOKEN);
Corre con DISCORD_TOKEN=tu_token node index.js. Revisa la guía de discord.js para comandos /, que requieren un paso extra de registro.
Agregarle IA a tu bot de Discord
Para que el bot conteste preguntas, en on_message manda el texto a un modelo (OpenAI, Anthropic, Gemini o un modelo local) y responde con lo que devuelva. Consejos:
- Que solo responda cuando lo mencionan o en un canal específico, para no saturar.
- Limita la longitud de las respuestas (Discord corta mensajes largos).
- Pon un límite de gasto en la API del modelo.
Si quieres algo más elaborado, que use herramientas o recuerde contexto, mira crear agente de IA.
Dejarlo encendido 24/7
El bot solo funciona mientras tu programa corre. Opciones:
- Un servidor virtual pequeño con
systemdo Docker para que se reinicie solo. - Plataformas como Railway, Render o Fly.io (revisa si su plan permite procesos que corren siempre).
- Una Raspberry Pi o una computadora que siempre esté prendida.
Ideas de bots que la gente realmente usa
Si no tienes claro qué debe hacer tu bot, estos son los casos más comunes en servidores de comunidades, escuelas y equipos de trabajo:
- Bienvenida y roles: saluda a quien entra, le explica las reglas y le asigna un rol cuando reacciona a un mensaje o usa un comando. Requiere Server Members Intent y el permiso Manage Roles, y el rol del bot debe estar arriba de los roles que reparte en la lista del servidor.
- Avisos programados: publica cada lunes el horario de la semana o recuerda una junta. En
discord.pyse hace condiscord.ext.tasks, que ejecuta una función cada cierto tiempo. - Puente con otros sistemas: manda al canal
#ventascada pedido nuevo de tu tienda o cada ticket de soporte. Muchas veces ni siquiera necesitas un bot completo: un webhook de Discord (en Ajustes del canal → Integraciones → Webhooks) recibe mensajes desde cualquier programa o desde n8n con una simple petición HTTP. - Moderación básica: borrar enlaces en ciertos canales o mensajes repetidos. Discord ya trae AutoMod en la configuración del servidor; revisa si cubre tu caso antes de programarlo.
- Preguntas frecuentes con IA: responde dudas usando un documento con las reglas o la información del curso o producto.
Comandos con barra (/) vs comandos con prefijo (!)
Los ejemplos de arriba usan las dos formas a propósito. Los comandos con prefijo (!reglas) leen el texto de cada mensaje, así que necesitan Message Content Intent. Los comandos con barra (/hola) los registra Discord: aparecen con autocompletado, explican qué parámetros piden y no requieren leer todos los mensajes del servidor.
Para bots nuevos conviene usar comandos con barra siempre que se pueda. Además de ser más claros para los usuarios, Discord pide verificación y justificación de los intents privilegiados cuando un bot crece y está en muchos servidores; consulta los requisitos actuales en la documentación de intents. Si tu bot solo reacciona a comandos, quizá ni siquiera necesites Message Content Intent.
Qué revisar antes de ponerlo en un servidor con gente real
- Permisos mínimos: revisa en la configuración del servidor qué puede hacer el rol del bot, canal por canal.
- Qué pasa si falla una petición: si tu bot llama a una API (clima, IA, tu sistema) y esa API no responde, el bot debe contestar “intenta más tarde”, no quedarse callado ni caerse.
- Límites de velocidad: Discord limita cuántos mensajes puede mandar un bot en poco tiempo. Las librerías esperan solas, pero un ciclo que manda cientos de mensajes seguidos terminará bloqueado.
- Datos de los usuarios: si guardas algo (puntos, nombres, mensajes), di en las reglas del servidor qué guardas y para qué.
Errores comunes
- “Privileged intent provided is not enabled”: activa Message Content Intent en el portal.
- El bot está en línea pero
message.contentllega vacío: falta el intent en tu código o en el portal. - Los comandos
/no aparecen: faltó el scopeapplications.commandsal invitar o no llamaste atree.sync(). - Token en GitHub: Discord suele detectarlo y lo invalida; genera otro con Reset Token y usa variables de entorno.
- Darle permiso de Administrador “por si acaso”: si roban el token, roban el servidor.
Para cerrar
Hacer un bot de Discord es un gran primer proyecto: gratis, bien documentado y con resultados inmediatos. Si te interesan bots para otros canales, mira cómo crear un bot en Telegram o cómo crear un bot para WhatsApp. Si necesitas un bot de Discord para tu comunidad o tu empresa conectado a otros sistemas, en Black Engine lo construimos; escríbenos por WhatsApp.
Preguntas frecuentes
¿Hacer un bot de Discord es gratis?
Sí. Crear la aplicación y usar la API de Discord no cuesta. Solo pagas, si quieres, el servidor donde lo dejas corriendo todo el día.
¿Qué lenguaje es mejor para un bot de Discord?
Python con discord.py o JavaScript con discord.js son los más usados y documentados. Elige el que conozcas o el que te sea más fácil de leer.
¿Por qué mi bot no lee los mensajes?
Probablemente falta activar Message Content Intent en la pestaña Bot del Developer Portal y también en tu código (intents.message_content = True en discord.py).
¿Puedo hacer un bot de Discord sin programar?
Hay bots ya hechos que configuras desde una web y herramientas como n8n o Make que se conectan a Discord, aunque para lógica propia lo más flexible es programarlo.