Quiero hacer un bot de discordia que obtenga todos los archivos adjuntos de imágenes y los fusione en 1 pdf.
He dividido mi problema en 2 pasos, descargar y convertir a pdf.
Tuve éxito al descargar y convertir 1 imagen, usando devoluciones de llamada en la función de descarga.
Pero ahora quiero descargar múltiples imágenes que luego se fusionarán en 1 pdf. No puedo hacer una devolución de llamada para cada imagen que descargo porque quiero esperar hasta que se descarguen todas las imágenes para fusionarlas.
(Nombro las imágenes según su número para que me sea más fácil identificarlas en el proceso de fusión).
Aquí está mi código:
client.on('messageCreate', msg => { if (msg.author.bot) return; file_number = 0 var attachments = msg.attachments attachments_size = attachments.size attachments.each(attachment => { var url = attachment ? attachment.url : null; file_number += 1 file_name = file_number + '.jpeg' download(url, file_name, function(){ }) }) convert_merge() }); var download = function(uri, filename, callback){ request.head(uri, function(err, res, body){ request(uri).pipe(fs.createWriteStream('./files/'+ filename)).on('close', callback); }); }; var convert_merge = function(callback){ var doc = new PDFDocument var doc_width = doc.page.height var doc_height = doc.page.width var writeStream = fs.createWriteStream('./files/merged.pdf') doc.pipe(writeStream) doc.rotate(90, {origin: [doc_width/2, doc_height/2]}); doc.image('./files/'+ `1.jpeg`, { fit: [doc_width+25, doc_height+35], align: 'center', valign: 'center' }); for (var i = 1; i <= file_number ; ++i) { doc.addPage() .image('./files/'+ i + `.jpeg`, { fit: [doc_width+25, doc_height+35], align: 'center', valign: 'center' }); } doc.end() };Este es el error que tengo:
node:internal/fs/utils:344 throw err; ^ Error: ENOENT: no such file or directory, open './files/1.jpeg' Esto significa que 1.jpeg aún no existe, esto solo puede significar que convert_merge se está activando antes de que los attachments.each{} finalicen
Esto me hace dudar de 2 cosas:
Finalmente, ¿cómo debo abordar este problema? Pensé en verificar si existe el último archivo del archivo adjunto antes de comenzar la conversión, pero no tuve éxito y no parecía ser el camino correcto.
Buscando algún consejo
Siéntase libre de pedir cualquier cosa
Gracias de antemano por tu ayuda :)