Bot discord (node + discord.js) Renvoi d'erreur MP refuser par l'utilisateur

Fermé
chakalis49 Messages postés 174 Date d'inscription dimanche 18 septembre 2011 Statut Membre Dernière intervention 20 juin 2019 - 20 juin 2019 à 01:22
 SachOscarGaming - 31 mars 2020 à 19:20
Bonjour/Bonsoir, voilà je met en place un bot discord pour l'attribution ou suppression de rôles par réaction. Je rencontre un problème sur la partie qui confirme l'attribution ou la suppression du rôle en MP. En effet quand l'utilisateur refuse les MP cela me renvoi une erreur dans la console et fait planté mon bot. Justement je ne sais pas trop comment renvoyé cette erreur afin que le bot ne plante pas si quelqu'un pouvait me donner le chemin à suivre. Car je débute et expérimente parfois afin de comprendre comment un ensemble fonctionne mais j'apprend mieux de cette manière désolé d'avance.

Voici le code:
//addrole & delrole
client.on('raw', event => {
    const eventName = event.t;
    if (eventName === 'MESSAGE_REACTION_ADD')
    {
        if (event.d.message_id === '590033047932502017')
        {
            var reactionChannel = client.channels.get(event.d.channel_id);
            if(reactionChannel.messages.has(event.d.message_id))
                return;
            else {
                reactionChannel.fetchMessage(event.d.message_id)
                .then(msg => {
                    var msgReaction = msg.reactions.get(event.d.emoji.name + ":" + event.d.emoji.id);
                    var user = client.users.get(event.d.user_id);
                    client.emit('messageReactionAdd', msgReaction, user);
                })
                .catch(err => console.log(err));
            }
        }
    }
    else if(eventName === 'MESSAGE_REACTION_REMOVE')
    {
        if (event.d.message_id === '590033047932502017')
        {
            var reactionChannel = client.channels.get(event.d.channel_id);
            if (reactionChannel.messages.has(event.d.message_id))
                return;
            else {
                reactionChannel.fetchMessage(event.d.message_id)
                .then(msg => {
                    var msgReaction = msg.reactions.get(event.d.emoji.name + ":" + event.d.emoji.id);
                    var user = client.users.get(event.d.user_id);
                    client.emit('messageReactionRemove', msgReaction, user);
                })
                .catch(err => console.log(err));
            }
        }
    }
});

client.on('messageReactionAdd', (messageReaction, user) => {

    var roleName = messageReaction.emoji.name;
    var role = messageReaction.message.guild.roles.find(role => role.name.toLowerCase() === roleName.toLowerCase());

    if(role)
    {
        var member = messageReaction.message.guild.members.find(member => member.id === user.id);
        if(member)
        {
            member.addRole(role.id);
            client.channels.get("509864489248620547").send(`Rôle ${role} attribué à ${user}`);
            member.createDM().then(channel => {
                channel.send(`Le rôle **${role.name}** vous a bien été attribué`);
            }).catch(err)
            console.log(`succès. Rôle ajouté.`)
        }
    }
});

client.on('messageReactionRemove', (messageReaction, user) => {

    var roleName = messageReaction.emoji.name;
    var role = messageReaction.message.guild.roles.find(role => role.name.toLowerCase() === roleName.toLowerCase());

    if(role)
    {
        var member = messageReaction.message.guild.members.find(member => member.id === user.id);
        if(member)
        {
            member.removeRole(role.id);
            client.channels.get("509864489248620547").send(`Rôle ${role} retiré à ${user}`);
            member.createDM().then(channel => {
                channel.send(`Le rôle **${role.name}** vous a bien été retiré`);
            }).catch(err)
            console.log("succès. Rôle retiré.")
        }
    }
});


Et voici l'erreur que me renvoi la console:
(node:7128) UnhandledPromiseRejectionWarning: DiscordAPIError: Cannot send messages to this user
    at item.request.gen.end (d:\Bibliothèques\Desktop\Fences\4-Codage\Site Web\Bot Discord\BotExp\node_modules\discord.js\src\client\rest\RequestHandlers\Sequential.js:85:15)
    at then (d:\Bibliothèques\Desktop\Fences\4-Codage\Site Web\Bot Discord\BotExp\node_modules\discord.js\node_modules\snekfetch\src\index.js:215:21)
    at process._tickCallback (internal/process/next_tick.js:68:7)
warning.js:18
(node:7128) 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: 2)
warning.js:18
(node:7128) [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.
A voir également:

1 réponse

chakalis49 Messages postés 174 Date d'inscription dimanche 18 septembre 2011 Statut Membre Dernière intervention 20 juin 2019 37
Modifié le 20 juin 2019 à 02:46
Bon voilà j'ai réussi à faire en sorte que le bot ne plante plus j'avais pas définis la fonction du .catch ligne 56 et 76.
Du coup voici mon nouveau code:
//addrole & delrole
client.on('raw', event => {
    const eventName = event.t;
    if (eventName === 'MESSAGE_REACTION_ADD')
    {
        if (event.d.message_id === '590033047932502017')
        {
            var reactionChannel = client.channels.get(event.d.channel_id);
            if(reactionChannel.messages.has(event.d.message_id))
                return;
            else {
                reactionChannel.fetchMessage(event.d.message_id)
                .then(msg => {
                    var msgReaction = msg.reactions.get(event.d.emoji.name + ":" + event.d.emoji.id);
                    var user = client.users.get(event.d.user_id);
                    client.emit('messageReactionAdd', msgReaction, user);
                })
                .catch(err => console.log(err));
            }
        }
    }
    else if(eventName === 'MESSAGE_REACTION_REMOVE')
    {
        if (event.d.message_id === '590033047932502017')
        {
            var reactionChannel = client.channels.get(event.d.channel_id);
            if (reactionChannel.messages.has(event.d.message_id))
                return;
            else {
                reactionChannel.fetchMessage(event.d.message_id)
                .then(msg => {
                    var msgReaction = msg.reactions.get(event.d.emoji.name + ":" + event.d.emoji.id);
                    var user = client.users.get(event.d.user_id);
                    client.emit('messageReactionRemove', msgReaction, user);
                })
                .catch(err => console.log(err));
            }
        }
    }
});

client.on('messageReactionAdd', (messageReaction, user) => {

    var roleName = messageReaction.emoji.name;
    var role = messageReaction.message.guild.roles.find(role => role.name.toLowerCase() === roleName.toLowerCase());

    if(role)
    {
        var member = messageReaction.message.guild.members.find(member => member.id === user.id);
        if(member)
        {
            member.addRole(role.id);
            client.channels.get("509864489248620547").send(`Rôle ${role} attribué à ${user}`);
            member.createDM().then(channel => {
                channel.send(`Le rôle **${role.name}** vous a bien été attribué`);
            }).catch(console.log(`AddRole ${user} refuse les MP`))
            console.log(`succès. Rôle ajouté.`)
        }
    }
});

client.on('messageReactionRemove', (messageReaction, user) => {

    var roleName = messageReaction.emoji.name;
    var role = messageReaction.message.guild.roles.find(role => role.name.toLowerCase() === roleName.toLowerCase());

    if(role)
    {
        var member = messageReaction.message.guild.members.find(member => member.id === user.id);
        if(member)
        {
            member.removeRole(role.id);
            client.channels.get("509864489248620547").send(`Rôle ${role} retiré à ${user}`);
            member.createDM().then(channel => {
                channel.send(`Le rôle **${role.name}** vous a bien été retiré`);
            }).catch(console.log(`DelRole ${user} refuse les MP`))
            console.log("succès. Rôle retiré.")
        }
    }
});

Du coup j'aimerais savoir comment récupérer le pseudo du l'utilisateur dans la console car avec un ${user} il me met une suite de chiffre et avec un ${user.name} il me met undefined.

AddRole <@270748295725318144> refuse les MP
botexp.js:105
succès. Rôle ajouté.
botexp.js:106

Et existe t-il une solution pour éviter l'affichage de l'erreur dans la console qui suis après "succès. Rôle ajouté."

(node:19504) UnhandledPromiseRejectionWarning: DiscordAPIError: Cannot send messages to this user
at item.request.gen.end (d:\Bibliothèques\Desktop\Fences\4-Codage\Site Web\Bot Discord\BotExp\node_modules\discord.js\src\client\rest\RequestHandlers\Sequential.js:85:15)
at then (d:\Bibliothèques\Desktop\Fences\4-Codage\Site Web\Bot Discord\BotExp\node_modules\discord.js\node_modules\snekfetch\src\index.js:215:21)
at process._tickCallback (internal/process/next_tick.js:68:7)
warning.js:18
(node:19504) 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: 2)
warning.js:18
(node:19504) [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.
warning.js:18
0
SachOscarGaming
31 mars 2020 à 19:20
Salut
as-tu essayé avec un ${user.tag} ?
Bonne soirée
0