ACLClouds
ACLClouds

Bot de Discord desconectado: causas y cómo corregirlas

Token rechazado, intents no autorizados, fallo, DNS, límites de peticiones o reposo: cómo leer el error de su bot de Discord y volver a ponerlo en línea.

Un bot de Discord se desconecta por cinco motivos principales: el programa se ha detenido, el token se rechaza, un intent no está autorizado, la red ya no llega a Discord o el proveedor ha puesto el bot en reposo. La consola de su bot casi siempre indica cuál: así se lee ese mensaje y se corrige cada caso.

  • Lea el primer error de la consola: los siguientes suelen ser su consecuencia.
  • Un error 401 o 4004 indica un token rechazado: genere uno nuevo con Reset Token.
  • El código 4014 indica un intent privilegiado que hay que activar en el Developer Portal.
  • El código de salida 137 suele indicar una memoria superada.

Leer el primer error

Antes de modificar el código, abra la consola o los logs y suba hasta el primer error mostrado tras el inicio. Las líneas siguientes suelen ser su consecuencia. Anote también la hora de la parada: una parada a hora fija no tiene la misma causa que una parada con el primer mensaje.

  • El bot no arranca: dependencia, archivo o versión.
  • El bot arranca y luego se desconecta: token, intents o red.
  • El bot sigue conectado pero ya no responde: error en un comando o límite de peticiones.

Token rechazado o restablecido

Un error 401 o el código de cierre 4004 (Authentication failed) significa que Discord rechaza el token. Puede haberse restablecido desde el Developer Portal, o por el propio Discord si se publicó, por ejemplo en un repositorio público de GitHub. Genere un token nuevo con Reset Token, sustitúyalo en la variable DISCORD_TOKEN y reinicie.

  • Copie el token de la página Bot, no el ID de la aplicación ni el secreto de cliente.
  • Elimine los espacios y las comillas alrededor del valor.
  • Mantenga el token fuera del código, como explica la guía para guardar tokens y variables secretas.

Intents no autorizados

El código de cierre 4014 (Disallowed intent(s)) aparece cuando el código pide un intent privilegiado que no está activado en el Developer Portal: Message Content, Server Members o Presence. Actívelo en la pestaña Bot, o quítelo del código si el bot no lo necesita. A partir de 100 servidores, estos intents requieren además una validación de Discord.

  • discord.py: intents.message_content = True debe coincidir con el ajuste del portal.
  • discord.js: GatewayIntentBits.MessageContent sigue la misma regla.
  • Los comandos slash funcionan sin Message Content.

Fallos, memoria y dependencias

Si el programa se detiene, el bot cae con él. Cannot find module o ModuleNotFoundError indica una dependencia que falta en package.json o en requirements.txt. Una parada con el código 137 suele indicar que el bot ha superado su memoria: caché demasiado grande, fuga o reproducción de audio. Una excepción no gestionada en un evento también puede detener el proceso.

  • Correcciones paso a paso: módulo de Node.js no encontrado y módulo de Python no encontrado.
  • Memoria superada: la guía del código de salida 137.
  • Envuelva cada comando en un try/catch (Node.js) o un try/except (Python) que escriba el error en los logs.

Red, DNS y límites de peticiones

getaddrinfo EAI_AGAIN o ECONNRESET indica un corte de DNS o de red entre el bot y Discord. discord.js y discord.py se reconectan solos a la gateway; si el error se repite, anote la hora y comuníquela a su proveedor. Una respuesta 429 indica un límite de peticiones: el bot envía demasiadas llamadas, a menudo en un bucle. Discord también bloquea temporalmente una dirección IP que acumula peticiones no válidas, 10 000 en 10 minutos, por ejemplo con un token rechazado.

  • No reinicie el bot en bucle con un token no válido: cada intento cuenta como una petición no válida.
  • Deje que la biblioteca gestione las respuestas 429: discord.js y discord.py esperan el plazo que indica Discord.
  • Evite modificar los roles o los mensajes de muchos miembros en un solo bucle.

Reposo y vencimiento

Algunos alojamientos gratuitos detienen un bot inactivo o tras una cuota de horas: revise las condiciones de su oferta. En la oferta Free de ACLClouds, el bot no se pone en reposo: solo se detiene si no se hace la renovación gratuita de 4 días. El próximo vencimiento aparece en la tarjeta del servicio.

  • Un bot alojado en casa también se detiene con su PC o su router.
  • Para una disponibilidad continua, siga nuestra guía para alojar un bot de Discord 24/7.

Por qué elegir ACLClouds para este bot

El panel ayuda a corregir las averías más frecuentes sin salir del navegador. Cuando falta el token, la consola muestra una tarjeta para pegarlo y reiniciar el bot. Cuando no se encuentra el archivo de inicio, la consola lo busca en las subcarpetas y propone corregir la ruta con un clic. Un bot detenido de forma inesperada se reinicia automáticamente.

  • Consola y logs en directo en el panel, también en la oferta gratuita.
  • Un acceso SFTP propio para cada bot (puerto 2222), también en la oferta gratuita.
  • Oferta Free sin reposo, renovable gratis cada 4 días: siga el tutorial de Python y Node.js.

Preguntas frecuentes

¿Por qué mi bot está desconectado si el código no ha cambiado?

Lo más habitual es que el token se haya restablecido, que el alojamiento haya vencido o que la red ya no llegue a Discord. El primer error de la consola indica cuál.

¿Qué significa el error 4014?

El bot pide un intent privilegiado (Message Content, Server Members o Presence) que no está activado en la pestaña Bot del Developer Portal. Actívelo o quítelo del código.

¿Cómo saber si mi token se ha filtrado?

Un error 401 o 4004 repentino, sin cambios por su parte, es la señal habitual. Genere un token nuevo con Reset Token y compruebe que no aparece en ningún repositorio público.

Mi bot está en línea pero no responde: ¿qué debo revisar?

Compruebe que los comandos slash están sincronizados, que el bot tiene los permisos del canal y que el intent Message Content está activado para los comandos con prefijo. Después lea los errores que aparecen con cada comando.