ACLClouds
ACLClouds

Alojar un bot Discord en Node.js con discord.js v14

Proyecto npm, intents, token, arranque: los pasos para poner en línea un bot de discord.js v14, uno a uno.

Un bot de discord.js v14 es un proyecto Node.js clásico: un package.json, un archivo de entrada y unas cuantas dependencias. Los pasos útiles son siempre los mismos: crear el proyecto, declarar los intents, leer el token del entorno y comprobar el arranque antes de entregar el bot al servidor.

  • discord.js v14 funciona con Node.js 18 o posterior, y el cliente declara sus intents.
  • El token se lee de las variables de entorno, nunca de index.js.
  • Used disallowed intents y el error 4014 vienen del mismo ajuste: un intent privilegiado desactivado en el portal.

Crear el proyecto

discord.js v14 funciona con Node.js 18 o posterior. El proyecto se compone de un package.json, que enumera las dependencias, y de un archivo de entrada, index.js.

  • npm init -y: crea el package.json con valores por defecto.
  • npm install discord.js: añade discord.js v14 a las dependencias.
  • En la sección scripts de package.json, añada "start": "node index.js" para arrancar el bot con npm start.

Escribir el cliente

El cliente debe declarar los intents que necesita. Un intent que falta en el código no recibe eventos, y un intent privilegiado sin activar en el portal hace que la conexión falle.

  • GatewayIntentBits.Guilds y GatewayIntentBits.GuildMessages: eventos de servidores y de mensajes.
  • GatewayIntentBits.MessageContent: intent privilegiado, que hay que activar en el portal de desarrolladores para leer el texto de los mensajes.
  • client.login(process.env.DISCORD_TOKEN): el token viene del entorno, nunca del código.

Arrancar y comprobar

Pruebe el bot en local antes de subirlo. Un bot conectado debe mostrar la confirmación que haya previsto en su evento de arranque.

  • npm install: instala las dependencias listadas en package.json.
  • npm start: arranca el bot con el script start.
  • Si la consola muestra Used disallowed intents, un intent privilegiado está desactivado en el portal: actívelo y reinicie el bot.

Por qué ACLClouds para un bot de discord.js

El plan gratuito incluye 1 bot, 315 MB de RAM y 715 MB de almacenamiento. Node.js, ffmpeg, yt-dlp y deno ya están en la imagen de Node.js, y los archivos se suben por SFTP.

  • Plan gratuito: 1 bot, 315 MB de RAM, 0,25 vCPU, 715 MB de almacenamiento, envíos de hasta 100 MB.
  • Imagen Node.js: ffmpeg, yt-dlp y deno ya instalados.
  • Acceso SFTP por bot en el puerto 2222, con los datos de la tarjeta «Acceso SFTP».

Preguntas frecuentes

¿Qué versión de Node.js conviene usar?

Para un proyecto nuevo de discord.js v14, apunte a Node.js 18 o posterior, que sigue mantenido. Las versiones antiguas acaban dando problemas de seguridad.

¿Debo subir la carpeta node_modules?

No. Pesa mucho, y el almacenamiento gratuito es de 715 MB. Suba package.json y package-lock.json y deje que la instalación recree la carpeta.

¿Por qué el bot muestra Used disallowed intents?

El código pide un intent privilegiado, como MessageContent, que no está activado en el portal de desarrolladores de Discord. Actívelo y reinicie el bot.