Esta guía explica cómo crear una aplicación y un bot en el portal de desarrolladores de Discord, proteger su token, invitarlo a un servidor comunitario y alojarlo 24/7 en un VPS Linux (systemd, pm2 o Docker). Cuenta con 30 a 45 minutos; un VPS básico basta para un bot pequeño.
Instalación paso a paso
Activa la autenticación en dos pasos en tu cuenta de Discord e instala una versión LTS actual de Node.js (o Python).
Crea una aplicación en discord.com/developers/applications (New Application).
Pestaña Bot: genera el token (Reset Token) y cópialo una sola vez en un gestor de contraseñas o un archivo .env.
Activa solo los Privileged Gateway Intents que realmente uses (Presence, Server Members, Message Content).
Genera el enlace de invitación (scopes bot + applications.commands, permisos mínimos) con la herramienta «Enlace de invitación de bot».
Abre el enlace, elige tu servidor (se requiere el permiso «Gestionar servidor») y autoriza.
Escribe un bot mínimo (discord.js) y pruébalo en local con el token en .env.
Prepara un VPS Linux: usuario no root, cortafuegos, Node.js (ver la guía «Preparar un VPS»).
Despliega el código, guarda el token en un archivo .env (chmod 600) y ejecuta el bot con systemd, pm2 o Docker.
Configura el servidor comunitario: roles, canales, permisos, webhooks y moderación.
Requisitos previos
Necesitas una cuenta de Discord (con 2FA), un servidor del que seas propietario o administrador y Node.js LTS (o Python): comprueba la versión mínima que exige la versión de discord.js que instales. Para el alojamiento: un VPS Linux (1 vCPU y 512 MB a 1 GB de RAM suelen bastar para un bot pequeño; ajusta según tu código). Nunca compartas el token del bot: da control total del bot.
Crear la aplicación y el bot
- discord.com/developers/applications → New Application → nombre → Create.
- General Information: copia el Application ID (el client_id público).
- Bot → Reset Token → copia el token (se muestra una sola vez).
- Si el token se filtra (repositorio Git público, captura…), haz Reset Token de inmediato.
Proteger el token (.env)
Nunca pongas el token en el código. Usa un archivo .env excluido de Git y legible solo por tu usuario. Ejemplo (valor ficticio):
echo 'DISCORD_TOKEN=ChangeMe!' > .env
chmod 600 .env
echo '.env' >> .gitignorePrivileged Intents
- Server Members Intent: eventos de entrada/salida y lista completa de miembros.
- Message Content Intent: leer el texto de los mensajes (innecesario si solo usas comandos slash).
- Presence Intent: estados de presencia de los miembros.
- Pasado cierto número de servidores (100 según la política de Discord al redactar esto), estos intents exigen verificar el bot: consulta la política vigente.
Invitar al bot
El enlace de invitación tiene esta forma (client_id ficticio, permissions = 3072: ver y escribir en canales). Calcula el entero con la calculadora de permisos y monta el enlace con la herramienta dedicada:
https://discord.com/oauth2/authorize?client_id=123456789012345678&scope=bot%20applications.commands&permissions=3072Bot mínimo (discord.js)
Instalación: npm init -y && npm install discord.js dotenv. Archivo index.js (consulta discordjs.guide para la API actualizada):
require('dotenv').config();
const { Client, Events, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once(Events.ClientReady, (c) => console.log(`Logged in as ${c.user.tag}`));
client.login(process.env.DISCORD_TOKEN);Alojar con systemd
Archivo /etc/systemd/system/discord-bot.service (adapta User y rutas; comprueba la ruta de node con «which node»). Luego: sudo systemctl daemon-reload && sudo systemctl enable --now discord-bot; logs: journalctl -u discord-bot -f.
[Unit]
Description=Discord bot
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=botuser
WorkingDirectory=/home/botuser/bot
EnvironmentFile=/home/botuser/bot/.env
ExecStart=/usr/bin/node index.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.targetAlojar con pm2
pm2 reinicia el proceso si falla. El comando «pm2 startup» muestra un comando sudo que debes ejecutar para que pm2 arranque con el sistema.
sudo npm install -g pm2
pm2 start index.js --name discord-bot
pm2 save
pm2 startup
pm2 logs discord-botAlojar con Docker
Dockerfile abajo (ajusta la versión de Node a la que exige discord.js). Construye y ejecuta pasando el token con un archivo de entorno: docker build -t discord-bot . && docker run -d --restart unless-stopped --env-file .env --name discord-bot discord-bot
FROM node:lts-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
USER node
CMD ["node", "index.js"]Configurar el servidor comunitario
- Roles: crea roles por función (admin, moderador, miembro) con los permisos mínimos; el rol del bot debe estar por encima de los roles que gestiona.
- Canales: categorías (bienvenida, reglas, general, soporte, voz) y permisos por categoría en vez de por canal.
- Webhooks: para publicar el estado de tus servidores de juego, crea el embed con la herramienta «Creador de embeds para webhooks».
- Moderación: nivel de verificación, AutoMod, registro de auditoría; activa el requisito de 2FA para moderadores en los ajustes del servidor.
- Visibilidad: registra tu servidor de juego en game-rank.com/jeux para ganar visibilidad.
Solución de problemas
- «TokenInvalid» / «An invalid token was provided»: token erróneo, espacio sobrante o token restablecido. Cópialo de nuevo con Reset Token.
- «Used disallowed intents»: activa el intent privilegiado correspondiente en la pestaña Bot o quítalo del código.
- «Missing Access» / «Missing Permissions»: el bot no tiene permiso en ese canal o su rol está demasiado bajo en la jerarquía.
- Los comandos slash no aparecen: faltó el scope applications.commands en la invitación o los comandos no están registrados (despliegue); reinvita al bot con el enlace correcto.
- El bot se desconecta en el VPS: lee los logs (journalctl -u discord-bot -f), comprueba la memoria disponible y que Restart=on-failure esté definido.
Preguntas frecuentes
- ¿Es gratis un bot de Discord?
- Crear un bot en el portal de desarrolladores es gratis. Solo el alojamiento (un VPS o un equipo siempre encendido) puede costar unos euros al mes.
- ¿Qué hago si mi token se filtró?
- Haz clic de inmediato en Reset Token en la pestaña Bot, actualiza tu .env, reinicia el bot y revisa el registro de auditoría del servidor.
- ¿systemd, pm2 o Docker?
- systemd es lo más ligero y viene integrado en Linux; pm2 es práctico si gestionas varios procesos Node.js; Docker aísla el entorno y hace el despliegue reproducible. Los tres reinician el bot tras un fallo.
- ¿Necesito abrir un puerto para alojar un bot?
- No: el bot abre por sí mismo una conexión saliente hacia Discord. Solo el puerto SSH debe seguir accesible para administrar (salvo que expongas un servidor web).
