Discord Bot Clear Message

Par William Pelletier, il y a 6 ans


Javascript NodeJS

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

Grafikart, il y a 5 ans

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

Bergauen, il y a 5 ans

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...");
Voxay, il y a 5 ans

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

Voxay, il y a 5 ans

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.