Qué es un intent
Cuando un bot se conecta al gateway de Discord, envía un payload IDENTIFY con un entero intents. Cada bit suscribe a un grupo de eventos. Pide GUILD_MESSAGES y recibirás los eventos de creación, edición y borrado de mensajes en servidores; si no lo pides, esos eventos nunca llegan.
Algunos valores de la documentación de Discord:
| Intent | Bit | Valor | Privilegiado |
|---|---|---|---|
GUILDS |
1 << 0 |
1 | No |
GUILD_MEMBERS |
1 << 1 |
2 | Sí |
GUILD_MODERATION |
1 << 2 |
4 | No |
GUILD_PRESENCES |
1 << 8 |
256 | Sí |
GUILD_MESSAGES |
1 << 9 |
512 | No |
GUILD_MESSAGE_REACTIONS |
1 << 10 |
1024 | No |
DIRECT_MESSAGES |
1 << 12 |
4096 | No |
MESSAGE_CONTENT |
1 << 15 |
32768 | Sí |
El entero es la suma de los valores que quieres. GUILDS + GUILD_MESSAGES + MESSAGE_CONTENT es 1 + 512 + 32768 = 33281. Las librerías lo ocultan tras banderas con nombre, y nuestra calculadora de permisos cubre el bitfield de permisos relacionado.
Los tres intents privilegiados
Los intents privilegiados exponen datos más sensibles, así que deben activarse en el Developer Portal (página Bot) y pedirse en el código. Pedir uno que no está activado cierra la conexión con el código 4014 ("Disallowed intent(s)").
- Guild Members: eventos de entrada, cambio y salida de miembros, y pedir la lista completa. Necesario para bienvenidas, roles automáticos y contadores de miembros.
- Guild Presences: estado en línea y actividades de los miembros. Pocos bots lo necesitan de verdad, y genera mucho tráfico en servidores grandes.
- Message Content: los campos
content,embeds,attachmentsycomponentsde los mensajes.
La vida sin Message Content
Sin el intent de Message Content tu bot sigue recibiendo eventos de mensajes (si tiene GUILD_MESSAGES), pero los campos de contenido llegan vacíos, salvo en:
- mensajes en DMs con el bot,
- mensajes que mencionan al bot,
- mensajes que envió el propio bot.
Las interacciones no se ven afectadas: comandos de barra, botones, menús de selección, modales y comandos de menú contextual traen sus datos. Por eso Discord recomienda interacciones para bots de comandos. Si tu bot solo responde /comandos, necesitas GUILDS y nada más. Mira comandos de barra en discord.js v14.
Verificación y crecimiento
- Hasta que tu bot esté en 100 servidores, puedes activar los intents privilegiados tú mismo.
- En ese punto Discord exige verificación; los bots sin verificar no pueden unirse a más servidores.
- Los bots verificados deben solicitar cada intent privilegiado y explicar el caso de uso. Message Content en particular se aprueba para necesidades concretas y visibles para el usuario.
Diseñar con interacciones desde el inicio evita una reescritura después.
Configuraciones mínimas
Bot de utilidades con comandos de barra (encuestas, recordatorios, búsquedas):
new Client({ intents: [GatewayIntentBits.Guilds] });
Bot de bienvenida y roles automáticos:
new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers] });
Bot de moderación que filtra texto (requiere justificación una vez verificado):
intents = discord.Intents.default() # todos los intents no privilegiados
intents.message_content = True
intents.members = True
bot = commands.Bot(command_prefix="!", intents=intents)
discord.Intents.default() en discord.py activa todos los intents no privilegiados. Es cómodo, pero en servidores grandes quizá quieras discord.Intents.none() más solo lo que usas, para reducir memoria y eventos.
Intents y privacidad
Cada intent extra significa datos personales pasando por tu proceso y quizá por tus logs. Pide lo mínimo, no registres contenido de mensajes que no necesitas y documenta lo que guardas en tu política de privacidad. Nuestras guías de seguridad para bots y aspectos legales y privacidad profundizan más.
Preguntas frecuentes
Mi bot se conecta pero recibe el código 4014. ¿Y ahora?
Tu código pide un intent privilegiado que no está activado. Actívalo en el Developer Portal o quítalo del código.
¿Necesito GUILD_MESSAGES para comandos de barra?
No. Los comandos de barra llegan como interacciones, que no necesitan ningún intent. Aun así se recomienda GUILDS para que la librería guarde en caché servidores y canales.
¿El intent de Presence afecta el rendimiento?
Puede. En servidores grandes las actualizaciones de presencia son frecuentes, así que suscribirte aumenta el tráfico y la memoria. Actívalo solo si una función depende del estado o la actividad.
Fuentes
- Discord Developer Docs, intents del gateway: discord.com/developers/docs/events/gateway#gateway-intents
- Discord Developer Docs, intents privilegiados: discord.com/developers/docs/events/gateway#privileged-intents
- Discord Support, preguntas sobre el intent de Message Content: support-dev.discord.com
- Documentación de discord.py, introducción a intents: discordpy.readthedocs.io/en/stable/intents.html