Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

601
Views
Discord.js v13 - Extraer imagen incrustada adjunta en el mensaje

Estoy escribiendo una función que devuelve una imagen incrustada de un mensaje. Quiero decir, Imagen de MessageEmbed.

La cosa: Discord resuelve la URL de la imagen y devuelve un objeto de inserción de imagen en su lugar (se puede encontrar usando la propiedad message.embeds ).

Aquí hay una imagen de ejemplo

Y aquí está el problema principal:

Cuando intente acceder a la propiedad embeds desde el objeto del mensaje, obtendrá una matriz vacía como esta: [] . Pero accediendo de nuevo obtendrá el resultado esperado. [ [MessageEmbed] ] Un ImageEmbed.

El problema con esto es que Discord tarda un tiempo en resolver la URL y se muestra en el mensaje como archivo adjunto, y no quiere usar la función setTimeout para esperar. Porque si el mensaje contiene varias URL de imágenes, esto llevará más tiempo. Bueno... intentar acceder a la propiedad embeds después de esa operación no funcionará correctamente porque devuelve nuevamente... una matriz vacía.

Entonces, al buscar el evento messageUpdate , encontré que emite el mismo mensaje con la URL de la imagen resuelta en la propiedad embeds . Así que hago este código:

 async function getImageEmbeds(message) { // Access into Client to listen the messageUpdate event. const { client } = message; const collectedImages = new Array(); // Waits the event emittion await new Promise((resolve) => { function fnListener(oldmsg, newmsg) { if (message.id !== newmsg.id) return; const imageEmbeds = newmsg.embeds.filter(embed => embed.thumbnail !== null).map(embed => embed.thumbnail); collectedImages.push(...imageEmbeds); client.removeListener("messageUpdate", fnListener); // Ends this promise. resolve(true); } client.on("messageUpdate", fnListener); }) return collectedImages; }

Este código funciona como se esperaba (espera la resolución de la URL de la imagen que se emitirá en el evento messageUpdate y devuelve una matriz con la imagen incrustada resuelta). Pero hay un nuevo problema, la función esperará indefinidamente si el mensaje no tiene una URL de imagen.

  • ¿Cómo puedo decirle a la función si el mensaje tiene una URL de imagen sin resolver?

¿Alguna sugerencia que pueda solucionar este problema?

about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!