Skip to main content
Los errores de bots de Discord en Square Cloud suelen deberse al token, a los intents del gateway, o a una incompatibilidad de versión con Lavalink. Compara el mensaje exacto de abajo.

”LoginFailure: Improper token has been passed” / TokenInvalid

Qué significa: Discord rechazó el token con el que tu bot inicia sesión. El mensaje exacto depende de la librería:
  • discord.py: discord.errors.LoginFailure: Improper token has been passed.
  • discord.js v14: Error [TokenInvalid]: An invalid token was provided.
  • discord.js antiguo: Error [TOKEN_INVALID]: An invalid token was provided.
  • otras librerías: un HTTP 401 Unauthorized al iniciar sesión.
Por qué ocurre:
  • El token fue regenerado o revocado en el Discord Developer Portal. Generar un token nuevo invalida al instante el anterior en todos los lugares donde se usaba.
  • El string del token tiene espacios o comillas extra copiadas por accidente.
  • El código está leyendo la variable de entorno equivocada, o la variable no está definida en Square Cloud.
Cómo solucionarlo:
  1. Ve al Developer Portal → tu aplicación → Bot → Reset Token.
  2. Actualiza el token en las variables de entorno de la aplicación (en el dashboard, Ajustes → Variables de entorno, o con squarecloud app env set). Nunca subas el token en un archivo que se incluya en el zip.
  3. Verifica que no haya espacios o comillas de más alrededor del valor.
  4. Actualiza la librería (discord.js@latest o pip install -U discord.py).
  5. Reinicia la aplicación para que cargue el nuevo valor.
Nunca hardcodees el token de tu bot en archivos de código fuente. Léelo siempre desde una variable de entorno configurada en el dashboard.

”Used disallowed intents” / Message Content Intent

Qué significa: el bot inicia sesión y aparece online, pero ignora todos los mensajes, o el gateway rechaza la conexión con “used disallowed intents”. Por qué ocurre: desde 2022, Message Content es un intent privilegiado. Sin habilitarlo explícitamente en ambos lugares, el contenido del mensaje llega vacío (o la conexión del gateway se rechaza si tu código declara un intent que no está habilitado para la aplicación). Cómo solucionarlo, en ambos lugares:
  1. Discord Developer Portal → tu aplicación → Bot → Privileged Gateway Intents → habilita Message Content Intent.
  2. Decláralo también en el código:
  1. Reinicia la aplicación.
Una vez que un bot supera los 100 servidores, los intents privilegiados (incluido Message Content) también requieren aprobación de Discord, solicitada desde la misma página del Developer Portal.
Qué significa: el cliente de Lavalink del bot cierra el WebSocket de forma anormal con el código 1006, a menudo precedido por “Unexpected server response: 400”. Por qué ocurre: esto es una incompatibilidad de versiones. Lavalink v4 está basado en REST y es incompatible con un wrapper de cliente construido para v3, por lo que el handshake falla y el socket se cierra con 1006. Cómo solucionarlo:
  1. Alinea la versión del wrapper de cliente de Lavalink de tu bot con la versión mayor del servidor Lavalink (cliente v3 con servidor v3, cliente v4 con servidor v4).
  2. En Square Cloud, el servidor Lavalink en sí enlaza el puerto 80, pero tu bot debe conectarse a él a través del edge en el puerto 443 con secure: true.
  3. Reinicia tanto la aplicación de Lavalink como la del bot después de corregir la incompatibilidad de versiones.
Para la configuración completa de hosting de Lavalink (archivo de configuración, puerto, despliegue), consulta el tutorial del servidor Lavalink.

El bot queda offline después de funcionar en local

Qué significa: el bot inicia sesión correctamente cuando lo ejecutas en tu máquina, pero queda offline (o se reinicia repetidamente) una vez desplegado. Por qué ocurre, más comúnmente:
  • Una conexión inestable a nivel de gateway sin manejo de reconexión.
  • Versiones de dependencias conflictivas o incompatibles entre lo que probaste en local y lo que está en tu archivo de dependencias.
  • El bot se detuvo por superar su RAM o su CPU, o por saturar la API de Discord. En ese caso los logs muestran una línea [SQUARE-SHIELD] y recibes un correo: consulta la tabla de estados.
Cómo solucionarlo:
  1. Revisa primero los logs de la aplicación en el dashboard, muestran la razón real del fallo.
  2. Agrega manejadores de errores para que un error transitorio no termine el proceso: process.on("unhandledRejection", ...) y client.on("error", ...) en discord.js, manejo equivalente en discord.py.
  3. Agrega AUTORESTART=true a tu squarecloud.app para que Square Cloud reinicie el bot después de un fallo. Viene desactivado por defecto y solo reinicia en los casos que se listan en AUTORESTART. Mantiene al bot vivo ante errores transitorios, pero nunca soluciona un token inválido, un error de sintaxis o una dependencia faltante: esos todavía necesitan una corrección en el código.
  4. Vigila los límites de tasa (429) de la API de Discord: el límite global es de aproximadamente 50 solicitudes/segundo por token de bot, con buckets más estrictos por ruta (crear/editar canal permite aproximadamente 2 cambios cada 10 minutos por canal). Cachea de forma agresiva, usa una cola asíncrona que respete los encabezados X-RateLimit-Remaining/X-RateLimit-Reset-After, y usa webhooks para envíos masivos. Un bot que sigue saturando Discord se detiene con ABUSE_REQUESTS.

Guías relacionadas

Si los logs no señalan una causa clara, nuestro equipo de soporte puede ayudarte a investigar más a fondo.

Contáctanos

Si continúas enfrentando dificultades técnicas, nuestro equipo de soporte especializado está disponible para ayudarte. Contáctanos y estaremos encantados de ayudarte a resolver cualquier problema: la calidad del soporte es una gran parte de por qué los desarrolladores califican a Square Cloud con 4.9/5 en 402 reseñas en Google y Trustpilot.