Error de intents en el bot de Discord: qué son y cómo activarlos

El error de intents aparece cuando el código del bot pide un intent privilegiado que no está activado en el Portal de Desarrolladores de Discord. Activa Message Content, Server Members o Presence en la pestaña Bot y reinicia el bot.

Actualizado el 5 min de lectura

Objetivos de aprendizaje

Después de leer este artículo podrás:

  • Reconocer el error de intents y el código 4014 del Gateway
  • Activar los intents privilegiados en el portal y en el código
  • Saber cuándo Discord exige una revisión de los intents privilegiados
En esta página

Arrancas el bot (mira cómo crear tu primer bot), el login falla y la terminal muestra algo sobre "disallowed intents". El token es correcto, y el código funciona en tu máquina hasta el momento de conectarse. El problema no es el token: es una configuración que existe en dos lugares, el portal de Discord y tu código, y que tiene que decir lo mismo en ambos.

BotGatewayPortalIDENTIFY+ máscara de intentscomparaREADYcoinciden con el Portaloclose 4014intent apagado en el Portal
El Gateway lee los intents en el IDENTIFY: si el código pide uno privilegiado apagado en el Portal, la conexión se cierra con 4014.

¿Cuál es el síntoma del error de intents?#

El Gateway de Discord cierra la conexión con el código 4014 ("Disallowed intent(s)"). La documentación lo describe así: intentaste especificar un intent que no activaste o para el que no tienes aprobación. La biblioteca convierte eso en una excepción.

Desde la versión 14.10 de discord.js, client.login() falla con este error (las versiones anteriores mostraban Error [DisallowedIntents]: Privileged intent provided is not enabled or whitelisted.):

text
Error: Used disallowed intents

En discord.py 2.x la excepción es PrivilegedIntentsRequired:

text
discord.errors.PrivilegedIntentsRequired: Shard ID None is requesting privileged intents that have not been explicitly enabled in the developer portal. It is recommended to go to https://discord.com/developers/applications/ and explicitly enable the privileged intents within your application's page. If this is not possible, then consider disabling the privileged intents instead.

También existe el código 4013 ("Invalid intent(s)"), que indica un valor de intent inválido, por lo general por un cálculo erróneo de la máscara de bits. En los dos casos Discord marca el código como no reconectable: intentarlo de nuevo sin cambiar nada solo repite el fallo.

¿Qué son los intents y cuáles son privilegiados?#

Los intents le dicen al Gateway qué grupos de eventos quiere recibir tu bot. Si no pides un intent, sus eventos no llegan. Eso ahorra ancho de banda y memoria, y protege los datos de los usuarios.

Tres intents son privilegiados, es decir, quedan desactivados hasta que los activas:

Intent Nombre en discord.js Atributo en discord.py Qué habilita
Server Members GuildMembers members Eventos de entrada, salida y actualización de miembros, y el listado de miembros
Presence GuildPresences presences Eventos PRESENCE_UPDATE (estado en línea, actividad)
Message Content MessageContent message_content Texto, embeds, adjuntos y componentes de los mensajes

Sin Message Content, los campos de contenido llegan vacíos. Hay excepciones: los mensajes que envía el propio bot, los mensajes por DM con el bot, los mensajes que mencionan al bot y el mensaje objetivo de un comando de menú contextual.

¿Cómo activo los intents en el portal de Discord?#

  1. Abre el Portal de Desarrolladores de Discord y selecciona tu aplicación.
  2. Entra en la pestaña Bot del menú lateral.
  3. Baja hasta Privileged Gateway Intents.
  4. Activa los intents que usa tu código (Presence, Server Members, Message Content).
  5. Guarda los cambios.

Para apps con menos de 10.000 usuarios, eso es todo. Activa solo lo que de verdad usas: cada intent de más trae más eventos que procesar.

¿Cómo pido los intents en el código?#

Activarlos en el portal no basta. El código también tiene que declarar el intent al conectarse, y la documentación de discord.py lo deja claro.

discord.js v14:

js
const { Client, GatewayIntentBits } = require('discord.js');

const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent, // privilegiado
    // GatewayIntentBits.GuildMembers, // privilegiado, solo si lo usas
  ],
});

client.on('messageCreate', (message) => {
  if (message.content === '!ping') message.reply('pong');
});

client.login(process.env.DISCORD_TOKEN);

discord.py 2.x:

python
import os
import discord

intents = discord.Intents.default()
intents.message_content = True  # privilegiado
intents.members = False  # privilegiado, cámbialo a True solo si lo usas

client = discord.Client(intents=intents)

@client.event
async def on_message(message):
    if message.content == "!ping":
        await message.channel.send("pong")

client.run(os.environ["DISCORD_TOKEN"])

Intents.default() no activa ninguno de los privilegiados. Por eso message_content aparece de forma explícita.

¿Por qué el error sigue después de activarlos?#

Revisa de la causa más común a la menos común:

  1. Lo activaste en el portal y lo olvidaste en el código (o al revés). Los dos lados tienen que coincidir. Revisa la lista de intents al crear el cliente.
  2. No reiniciaste el bot. El Gateway lee los intents en el momento del IDENTIFY. Después de cambiar el portal o el código, reinicia para abrir una nueva conexión.
  3. Aplicación equivocada. El token pertenece a otra aplicación del portal, con los interruptores apagados. Confirma que el token que usas es de la aplicación que configuraste.
  4. Bot por encima del límite de revisión. Con más de 10.000 usuarios, el bot pierde el acceso al intent privilegiado si la revisión no se aprueba (mira la siguiente sección).
  5. Valor de intent inválido (código 4013), frecuente cuando se arma la máscara de bits a mano. Usa las constantes de la biblioteca en lugar de números.

Si el bot se conecta pero no responde, el problema puede ser otro: lee el bot está en línea pero no responde a los comandos.

¿Qué cambia cuando el bot crece?#

Las apps con menos de 10.000 usuarios pueden activar los intents privilegiados directamente en el portal. Cuando la app supera los 10.000 usuarios únicos que pueden ver el bot, Discord avisa al dueño y exige una revisión (con una justificación de uso para cada intent) para mantener el acceso. Quien ya fue aprobado tiene que renovar cada año. Según la documentación, la app sigue funcionando y entrando en servidores durante el análisis.

La verificación de la app es otro proceso, obligatorio para apps en 100 o más servidores. Las reglas de revisión por número de usuarios rigen desde el 10 de junio de 2026 y sustituyeron la antigua regla de los 100 servidores para los intents privilegiados, así que revisa la página oficial antes de planificar.

Si tu bot solo necesita leer comandos, migrar a slash commands elimina la dependencia de Message Content antes de que la revisión sea un problema, porque las interacciones no pasan por el contenido de los mensajes.

¿Cómo evitar el problema?#

  • Pide solo los intents que usa el bot. Empieza con Guilds y añade según lo necesites.
  • Prefiere slash commands a los comandos con prefijo, y evita Presence si no es imprescindible.
  • Mantén la lista de intents en un solo lugar del código, para que no difiera entre archivos.
  • Prueba la conexión después de cualquier cambio en el portal, antes de pasar a producción.

Cómo hacerlo en Square Cloud#

El error de intents ocurre entre tu código y el portal de Discord, así que la corrección es la misma en cualquier hosting: activa los intents en la pestaña Bot, decláralos en el código y reinicia.

En Square Cloud, el bot corre en un contenedor aislado y tú controlas el deploy. El token queda en una variable de entorno de la aplicación (desde el panel, la API o la CLI), y el cambio aplica en el siguiente reinicio, sin rebuild. Después de ajustar los intents en el portal, reinicia la aplicación y sigue los logs en tiempo real para confirmar que el login funcionó.

La plataforma es compatible con discord.js, discord.py, JDA, Discord.Net y otras bibliotecas de Gateway. Los detalles están en hosting de bots de Discord.

Hosting de bots

Tu bot en línea 24/7, con reinicio automático

Más información

Preguntas frecuentes

¿Cuáles son los intents privilegiados de Discord?

Son tres: Server Members (GUILD_MEMBERS), Presence (GUILD_PRESENCES) y Message Content (MESSAGE_CONTENT). Los tres vienen desactivados por defecto y hay que activarlos en el portal y pedirlos en el código.

¿Necesito el intent Message Content para usar slash commands?

No. Los slash commands llegan como interacciones y no dependen del contenido de los mensajes. El intent solo hace falta para leer el texto de mensajes normales, como en los comandos con prefijo.

Lo activé en el portal y el error sigue. ¿Qué falta?

Falta pedir el intent en el código, con GatewayIntentBits.MessageContent en discord.js o intents.message_content = True en discord.py. Después, reinicia el bot para abrir una nueva conexión con el Gateway.

¿Qué cambia cuando el bot crece?

Con menos de 10.000 usuarios basta con activar el interruptor en el portal. Por encima de esa cifra, Discord exige una revisión para mantener el acceso a los intents privilegiados. Los bots en 100 o más servidores también necesitan verificación.

Siguiente artículoBot de Telegram no responde: webhook, polling y errores comunesUn bot de Telegram callado suele tener un token incorrecto, webhook activo con polling, dos instancias o URL inválida. Diagnostícalo con getMe y getWebhookInfo.