Bonjour,

Voila je rencontre un petit problème avec mon code, il fonctionne mais une partie non... :(

Ce que j'ai fait

const Discord = require("discord.js");
module.exports.run = async (bot, message, args) => {

    if(message.content.startsWith("!clear")) {
        message.delete();
    if(!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send(`Tu n'as pas la permission...`);
    if(!args[0]) return message.channel.send("Tu dois spécifier un nombre de messages à supprimer !");
    message.channel.bulkDelete(args[0]).then(() => {
        message.channel.send(`À ton service! (${args[0]}) `).then(msg => msg.delete(5000));

    })
}}

module.exports.help = {
    name: "clear"
}

Ce que je veux

Lorsque le message du bot apparait (pour me confirmer qu'il a bien supprimé les messages)
je voudrais que ce message disparaisse au bout d'un certain temps ! Comme 5sec
C'est pourquoi j'ai mis à droite du message

.then(msg => msg.delete(5000));

Pourtant, ça ne fonctionne pas et lorsque que je tape !clear et que je regarde la console, ça m'affiche ceci :

Ce que j'obtiens

(node:4554) UnhandledPromiseRejectionWarning: TypeError [INVALID_TYPE]: Supplied options is not an object.
at Message.delete (/Users/william/Desktop/kirisakibot/node_modules/discord.js/src/structures/Message.js:501:44)
at /Users/william/Desktop/kirisakibot/Commandes/clear.js:9:96
at processTicksAndRejections (internal/process/task_queues.js:97:5)
warning.js:32
(node:4554) 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(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
warning.js:32

Voilà, j'espère avoir été claire ^^I,
Si quelqu'un pourrait m'aider se serait super, merci !

4 réponses


Attention tu ne peux pas supprimer des messages trop vieux, l'api te renvoie surement une erreur

TU as surtout une erreur dans ton code :

return message.channel.send(`Tu n'as pas la permission...`);

l'apostrophe du n'as ferme ton texte ...
l'apostrophe suivante transforme la suite de ton code en "texte" du coup.

Remplaces :

return message.channel.send(`Tu n'as pas la permission...`);

par :

return message.channel.send("Tu n'as pas la permission...");

Bergauen ce que tu dis ne change absolument rien tu peux le constater toi même juste avec la coloration syntaxique.

William, je te conseille plus d'utiliser await à la place des then c'est plus lisible et tu peux utiliser un simple try catch pour choper tes erreurs.

try {
    await message.channel.bulkDelete(args[0]);
    message.channel.send(`À ton service! (${args[0]}) `).then((msg) => msg.delete(5000));
} catch (error) {
    message.channel.send("Je ne peux pas supprimer plus de 100 messages à la fois et de plus de 14 jours.");
}

Quand à ton timeout pour suppr ton mess au bout de 5s c'est normal que tu aie un erreur lors de sa suppression si celui-ci à déjà été suppr par le bulkDelete()

Après n'hésite pas à faire des console.log de tes erreurs pour mieux les comprendres.