Ir al contenido

Errores comunes

Error 400 con componentes nuevos (Container, Text Display…)

Sección titulada «Error 400 con componentes nuevos (Container, Text Display…)»

Causa: falta el flag IS_COMPONENTS_V2, así que Discord trata el mensaje como clásico, donde solo se permiten Action Rows en el nivel superior.

Solución: añade "flags": 32768 al mensaje (o súmalo a los flags que ya uses).

Causa: con el flag V2 no se permiten content, embeds, sticker_ids ni poll.

Solución: pasa el texto a un Text Display y el embed a un Container. Ver Migrar desde embeds.

Causa: en mensajes V2 los adjuntos no se muestran solos.

Solución: muéstralos con un File, Thumbnail o Media Gallery apuntando a attachment://nombre-exacto.png. El nombre debe coincidir exactamente con el del archivo subido.

Causa: los webhooks necesitan un parámetro extra.

Solución: añade ?with_components=true a la URL del webhook.

Causa: tu bot no respondió en 3 segundos, o hubo un error en tu código antes de responder.

Solución:

  • Responde rápido. Si vas a tardar, usa DEFERRED_UPDATE_MESSAGE (6) o DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE (5) primero.
  • Revisa los logs de tu bot por si hay una excepción.
  • En discord.py, comprueba que la vista no ha caducado (timeout).

Revisa estos casos típicos:

Error típico Solución
Más de 40 componentes Reduce componentes o divide en varios mensajes.
Section sin accessory Añade un Thumbnail o Button, o usa un Text Display suelto.
Section con más de 3 textos Junta textos en un solo Text Display con saltos de línea (\n).
Container dentro de Container No se puede anidar: ponlos uno detrás de otro.
Botones y select en la misma Action Row Usa dos Action Rows.
custom_id repetido Cada custom_id debe ser único en el mensaje.
Thumbnail suelto en el mensaje Solo puede ir como accessory de una Section.
File con URL https:// File solo admite attachment://. Usa Media Gallery para URLs de imágenes.
accent_color como texto "#5865F2" Debe ser un número: 5793266 o 0x5865F2.
Link button con custom_id Los botones Link usan url y no llevan custom_id.
Causa Solución
Ya respondiste a la interacción El modal tiene que ser la primera respuesta. No uses defer antes.
Responder a un MODAL_SUBMIT con otro modal No está permitido. Responde con un mensaje.
disabled en un select dentro de un modal disabled solo vale en mensajes; quítalo.
min_values: 0 con required: true Si es obligatorio, min_values debe ser al menos 1.
Más de 5 componentes en el modal El máximo es 5 (Label o Text Display).

Es intencionado: una vez que un mensaje es V2, siempre será V2. Si necesitas un mensaje clásico, envía uno nuevo.