Tengo una matriz que estoy recorriendo a través de reacciones en una inserción. Cuando se presiona una reacción, el mensaje debe eliminarse y la función vuelve a repetirse. En la segunda pulsación de reacción, recibo este error:
(node:12908) UnhandledPromiseRejectionWarning: DiscordAPIError: Unknown MessageEn cada pulsación de reacción después de la primera, la cantidad de este error impreso se duplica.
Código:
function movieChoiceEmbed(movies, message, count) { pagecount = count; message.channel.send({embed: { color: '#D733FF', title: 'Choose movie', fields: [ { name: movies[pagecount].title, value: movies[pagecount].description, inline: true, }, { name: movies[pagecount+1].title, value: movies[pagecount+1].description, inline: true, }, { name: '\u200b', value: '\u200b', inline: false, }, { name: movies[pagecount+2].title, value: movies[pagecount+2].description, inline: true, }, { name: movies[pagecount+3].title, value: movies[pagecount+3].description, inline: true, }, ], timestamp: new Date(), footer: { icon_url: client.user.displayAvatarURL(), text: 'Andrea Gafa' } }}) .then(sentEmbed => { sentEmbed.react("⏪"); sentEmbed.react("⏩"); }) .catch(); client.on("messageReactionAdd", async (reaction, user) => { // When a reaction is added if(user.bot) return; if(reaction.emoji.name == "⏪") { await reaction.message.delete(); count -= 4; movieChoiceEmbed(movies, message, count); }else if(reaction.emoji.name == "⏩") { await reaction.message.delete(); count += 4; movieChoiceEmbed(movies, message, count); } return; }); }Intenté eliminar el último mensaje con el mismo resultado:
await message.channel.lastMessage.delete();¿Cualquier pista? Estoy bastante perdido aquí.
Editar:
El evento messagereactionadd que está dentro de la función parece ser el problema. Ponerlo fuera soluciona el problema.
su error se debe a que está recibiendo una promesa que no se detecta. Tiene varias llamadas que son asíncronas y que devuelven promesas, una o más de ellas están causando un error. Les agregaría bloques de captura, y luego esto lo ayudará a aislar dónde radica su problema. Por ejemplo:
await reaction.message.delete();podría cambiarse a:
await reaction.message.delete() .then(() { /* do something if interested */ }) .catch(err => { console.error(err); });agregue esto a todas sus funciones prometidas y sabrá dónde tiene problemas.
Ahora, en cuanto al error en sí, está intentando eliminar un mensaje que, potencialmente, ya se eliminó. ¿Querías eliminar una reacción o un mensaje? Si eliminó un mensaje y luego intenta hacer algo con el mensaje en las llamadas posteriores, entonces ese es el problema.