1
votes

If I let several minutes go by without answering I get this error:

(node:14012) UnhandledPromiseRejectionWarning: # (node:14012) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1) (node:14012) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

How could fix it? I want the time to answer not affect. I try putting "catch" but it doesn't work.

const Discord = require("discord.js");
const Client = require("../src/structures/client");
module.exports = {
    name: `quiz`,
    aliases: 'q',
    /**
     * @param {Client} client
     * @param {Message} message
     * @param {String[]} args
     */
    run: async (client, message, args) => {
        const preguntas = ['Puedo explicar mis acciones :', 'Las personas no me ven como yo me veo a mi mismo/misma :', 'Pienso en las emociones que conllevan mis acciones : ', "Puedo identificar normalmente mis sentimientos :", "Cada día dedico algo de tiempo a la reflexión", "Puedo mantener la calma, incluso en circunstancias difíciles :", "Soy propenso/propensa a controlar los arrebatos de ira :", "No suelo sentirme desgraciado/desgraciada :", "Me siento calmado y pacífico con las cosas, otras personas o incluso conmigo mismo/misma :", "Suelo controlarme y evitar hacer cosas de las que me arrepiento :", "Generalmente tengo una idea precisa de cómo me perciben las personas con las que interactuo :", "Puedo interactuar con los demás bastante bien :", "Encuentro sencillo entender como se sienten los demás :", "Puedo mostrar empatía y hacer coincidir mis sentimientos con los de otra persona durante una interacción :", "Observo cómo reaccionan los demás para entenderles :", "Admito los errores y me disculpo fácilmente :", "Los demás se sienten bien después de hablar conmigo :", "Puedo reaccionar con calma y sensibilidad ante las emociones de los demás :", "Los demás me respetan y me estiman, incluso cuando no están de acuerdo conmigo :", "Puedo persuadir a los demás para que adopten mi punto de vista. sin coaccionarlos :"];
        const respuestas = `1 ) Nunca
    2 ) Casi nunca
    3 ) A veces
    4 ) Usualmente
    5 ) Siempre`
        const time = 50;
        var autoconciencia = [];
        var autogestion = [];
        var concienciasocial = [];
        var relaciones = [];
        var i = 0;

        function resultados(array1, array2, array3, array4) {
            var resultado_autoconciencia = 0;
            var resultado_autogestion = 0;
            var resultado_concienciasocial = 0;
            var resultado_relaciones = 0;
            var evaluacion;
            for (var i = 0; i < array1.length; i++) {
                resultado_autoconciencia = resultado_autoconciencia + array1[i]
            }
            for (var i = 0; i < array2.length; i++) {
                resultado_autogestion = resultado_autogestion + array2[i]
            }
            for (var i = 0; i < array3.length; i++) {
                resultado_concienciasocial = resultado_concienciasocial + array3[i]
            }
            for (var i = 0; i < array4.length; i++) {
                resultado_relaciones = resultado_relaciones + array4[i]
            }
            if (resultado_autoconciencia < 17 || resultado_autogestion < 17 || resultado_concienciasocial < 17 || resultado_relaciones < 17) {
                evaluacion = "Lo sentimos, no has conseguido el rol-SOPORTE";
            } else {
                evaluacion = "Enhorabuena!!!, has conseguido el rol-SOPORTE";
                // console.log(message.guild.roles);
                // console.log(message.guild.roles.cache.find(r => r.name === 'SOPORTE'));
                let role = message.guild.roles.cache.find(r => r.name === 'SOPORTE');
                if (role) message.member.roles.add(role);
            }
            return {
                resultado_autoconciencia,
                resultado_autogestion,
                resultado_concienciasocial,
                resultado_relaciones,
                evaluacion
            };
        }

        function pusharrays(reaction, array) {
            switch (reaction) {
                case '1️⃣':
                    array.push(1);
                    break;
                case '2️⃣':
                    array.push(2);
                    break;
                case '3️⃣':
                    array.push(3);
                    break;
                case '4️⃣':
                    array.push(4);
                    break;
                case '5️⃣':
                    array.push(5);
                    break;
            }
        }
        nextquestion(i);

        function nextquestion(i) {
            if (i < preguntas.length) {
                message.channel.send(new Discord.MessageEmbed().setAuthor(`${i+1}: ${preguntas[i]}`, message.client.user.avatarURL).setDescription(`${respuestas}`).setColor('#ffdb26')).then(async msg => {
                    await msg.react('1️⃣');
                    await msg.react('2️⃣');
                    await msg.react('3️⃣');
                    await msg.react('4️⃣');
                    await msg.react('5️⃣');
                    const filter = (reaction, user) => {
                        return ['1️⃣', '2️⃣', '3️⃣', '4️⃣', '5️⃣'].includes(reaction.emoji.name) && !user.bot;
                    };
                    msg.awaitReactions(filter, {
                        max: 1,
                        time: time * 1000,
                        errors: ['time']
                    }).then(collected => {
                        var reaction = collected.first().emoji.name;
                        var challanger = collected.first().users.cache.last();
                        if (reaction) {
                            if (i == 0 || i == 1 || i == 2 || i == 3 || i == 4) {
                                pusharrays(reaction, autoconciencia);
                                i++;
                                nextquestion(i);
                            } else if (i == 5 || i == 6 || i == 7 || i == 8 || i == 9) {
                                pusharrays(reaction, autogestion);
                                i++;
                                nextquestion(i);
                            } else if (i == 10 || i == 11 || i == 12 || i == 13 || i == 14) {
                                pusharrays(reaction, concienciasocial);
                                i++;
                                nextquestion(i);
                            } else if (i == 15 || i == 16 || i == 17 || i == 18 || i == 19) {
                                pusharrays(reaction, relaciones);
                                i++;
                                nextquestion(i);
                            }
                        }
                    })
                })
            } else {
                let resultado = resultados(autoconciencia, autogestion, concienciasocial, relaciones);
                message.channel.send(new Discord.MessageEmbed().setColor('#ffdb26').setThumbnail("https://cdn.discordapp.com/icons/814901488726835261/19e955580ad014d50ec8fde47669696f.webp").setTitle(`${resultado.evaluacion}`).addField("PUNTAJE AUTOCONCIENCIA : ", `${resultado.resultado_autoconciencia}`).addField("PUNTAJE AUTOGESTIÓN : ", `${resultado.resultado_autogestion}`, " ", " ").addField("PUNTAJE CONCIENCIA SOCIAL : ", `${resultado.resultado_concienciasocial}`).addField("PUNTAJE RELACIONES : ", `${resultado.resultado_relaciones}`).setFooter("por: ꧁BOT_DESPACHO_D꧂", 'https://cdn.discordapp.com/icons/814901488726835261/19e955580ad014d50ec8fde47669696f.webp')).then(async msg => {
                    await msg.react('????');
                    const filter = (reaction, user) => {
                        return ['????'].includes(reaction.emoji.name) && !user.bot;
                    };
                    msg.awaitReactions(filter, {
                        max: 1,
                        time: time * 1000,
                        errors: ['time']
                    }).then(collected => {
                        var reaction = collected.first().emoji.name;
                        var challanger = collected.first().users.cache.last();
                        if (reaction == "????") {
                            message.channel.bulkDelete(22);
                        }
                    })
                })
            }
        }
    }
}
1

1 Answers

2
votes

You receive the error after you "let several minutes go by without answering" because you told so.

In your collector's options ({ time: time * 1000, errors: ['time'] }) you set timeout one of the reasons that cause the promise to reject. If there are no collected messages after time seconds, the promise is rejected. As there is no catch block, you'll receive the error you mentioned.

So, add those catches:

msg
  .awaitReactions(filter, {
    max: 1,
    time: time * 1000,
    errors: ['time'],
  })
  .then((collected) => {
    var reaction = collected.first().emoji.name;
    var challanger = collected.first().users.cache.last();
    if (reaction) {
      // ...
    }
  })
  .catch((collected) => {
    console.log(
      `After ${time} seconds ${collected.size} reaction is collected.`,
    );
  });

// ...

msg
  .awaitReactions(filter, {
    max: 1,
    time: time * 1000,
    errors: ['time'],
  })
  .then((collected) => {
    var reaction = collected.first().emoji.name;
    var challanger = collected.first().users.cache.last();
    if (reaction == '🗑') {
      message.channel.bulkDelete(22);
    }
  })
  .catch((collected) => {
    console.log(
      `After ${time} seconds ${collected.size} reaction is collected.`,
    );
  });