BotNetwork

Los intents del gateway de Discord explicados: cuáles necesita tu bot

Los intents deciden qué eventos del gateway te envía Discord. Pedir menos significa menos datos, menos memoria y menos trámites cuando tu bot crezca.

Publicado 4 min de lectura

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, attachments y components de 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