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.