2017-10-04 6 views
0

J'ai donc effectué des recherches sur Internet, essayant de trouver une façon de faire une commande de purge. Maintenant, j'ai trouvé pas mal de façons d'en faire un, mais aucun d'entre eux ne me convenait de la façon dont je voulais, ou simplement travaillait pour moi. SO pour commencer, voici mon codeComment coder une commande de purge à l'aide de Discord.js

const Discord = require("discord.js"); // use discord.js 

const BOT_TOKEN = "secret bot token :)" // bot's token 
const PREFIX = "*" // bot's prefix 

var eightball = [ // sets the answers to an eightball 
    "yes!", 
    "no...", 
    "maybe?", 
    "probably", 
    "I don't think so.", 
    "never!", 
    "you can try...", 
    "up to you!", 
] 

var bot = new Discord.Client(); // sets Discord.Client to bot 

bot.on("ready", function() { // when the bot starts up, set its game to Use *help and tell the console "Booted up!" 
    bot.user.setGame("Use *info") // sets the game the bot is playing 
    console.log("Booted up!") // messages the console Booted up! 
}); 

bot.on("message", function(message) { // when a message is sent 
    if (message.author.equals(bot.user)) return; // if the message is sent by a bot, ignore 

    if (!message.content.startsWith(PREFIX)) return; // if the message doesn't contain PREFIX (*), then ignore 

    var args = message.content.substring(PREFIX.length).split(" "); // removes the prefix from the message 
    var command = args[0].toLowerCase(); // sets the command to lowercase (making it incase sensitive) 
    var mutedrole = message.guild.roles.find("name", "muted"); 

    if (command == "help") { // creates a command *help 
     var embedhelpmember = new Discord.RichEmbed() // sets a embed box to the variable embedhelpmember 
      .setTitle("**List of Commands**\n") // sets the title to List of Commands 
      .addField(" - help", "Displays this message (Correct usage: *help)") // sets the first field to explain the command *help 
      .addField(" - info", "Tells info about myself :grin:") // sets the field information about the command *info 
      .addField(" - ping", "Tests your ping (Correct usage: *ping)") // sets the second field to explain the command *ping 
      .addField(" - cookie", "Sends a cookie to the desired player! :cookie: (Correct usage: *cookie @username)") // sets the third field to explain the command *cookie 
      .addField(" - 8ball", "Answers to all of your questions! (Correct usage: *8ball [question])") // sets the field to the 8ball command 
      .setColor(0xFFA500) // sets the color of the embed box to orange 
      .setFooter("You need help, do you?") // sets the footer to "You need help, do you?" 
     var embedhelpadmin = new Discord.RichEmbed() // sets a embed box to the var embedhelpadmin 
      .setTitle("**List of Admin Commands**\n") // sets the title 
      .addField(" - say", "Makes the bot say whatever you want (Correct usage: *say [message])") 
      .addField(" - mute", "Mutes a desired member with a reason (Coorect usage: *mute @username [reason])") // sets a field 
      .addField(" - unmute", "Unmutes a muted player (Correct usage: *unmute @username)") 
      .addField(" - kick", "Kicks a desired member with a reason (Correct usage: *kick @username [reason])") //sets a field 
      .setColor(0xFF0000) // sets a color 
      .setFooter("Ooo, an admin!") // sets the footer 
     message.channel.send(embedhelpmember); // sends the embed box "embedhelpmember" to the chatif 
     if(message.member.roles.some(r=>["bot-admin"].includes(r.name))) return message.channel.send(embedhelpadmin); // if member is a botadmin, display this too 
    } 

    if (command == "info") { // creates the command *info 
     message.channel.send("Hey! My name is cookie-bot and I'm here to assist you! You can do *help to see all of my commands! If you have any problems with the Minecraft/Discord server, you can contact an administrator! :smile:") // gives u info 
    } 

    if (command == "ping") { // creates a command *ping 
     message.channel.send("Pong!"); // answers with "Pong!" 
    } 

    if (command == "cookie") { // creates the command cookie 
     if (args[1]) message.channel.send(message.author.toString() + " has given " + args[1].toString() + " a cookie! :cookie:") // sends the message saying someone has given someone else a cookie if someone mentions someone else 
     else message.channel.send("Who do you want to send a cookie to? :cookie: (Correct usage: *cookie @username)") // sends the error message if no-one is mentioned 
    } 

    if (command == "8ball") { // creates the command 8ball 
     if (args[1] != null) message.reply(eightball[Math.floor(Math.random() * eightball.length).toString(16)]); // if args[1], post random answer 
     else message.channel.send("Ummmm, what is your question? :rolling_eyes: (Correct usage: *8ball [question])"); // if not, error 
    } 

    if (command == "say") { // creates command say 
     if (!message.member.roles.some(r=>["bot-admin"].includes(r.name))) return message.reply("Sorry, you do not have the permission to do this!"); 
     var sayMessage = message.content.substring(4) 
     message.delete().catch(O_o=>{}); 
     message.channel.send(sayMessage); 
    } 

    if(command === "purge") { 
     let messagecount = parseInt(args[1]) || 1; 

     var deletedMessages = -1; 

     message.channel.fetchMessages({limit: Math.min(messagecount + 1, 100)}).then(messages => { 
      messages.forEach(m => { 
       if (m.author.id == bot.user.id) { 
        m.delete().catch(console.error); 
        deletedMessages++; 
       } 
      }); 
     }).then(() => { 
       if (deletedMessages === -1) deletedMessages = 0; 
       message.channel.send(`:white_check_mark: Purged \`${deletedMessages}\` messages.`) 
        .then(m => m.delete(2000)); 
     }).catch(console.error); 
    } 

    if (command == "mute") { // creates the command mute 
     if (!message.member.roles.some(r=>["bot-admin"].includes(r.name))) return message.reply("Sorry, you do not have the permission to do this!"); // if author has no perms 
     var mutedmember = message.mentions.members.first(); // sets the mentioned user to the var kickedmember 
     if (!mutedmember) return message.reply("Please mention a valid member of this server!") // if there is no kickedmmeber var 
     if (mutedmember.hasPermission("ADMINISTRATOR")) return message.reply("I cannot mute this member!") // if memebr is an admin 
     var mutereasondelete = 10 + mutedmember.user.id.length //sets the length of the kickreasondelete 
     var mutereason = message.content.substring(mutereasondelete).split(" "); // deletes the first letters until it reaches the reason 
     var mutereason = mutereason.join(" "); // joins the list kickreason into one line 
     if (!mutereason) return message.reply("Please indicate a reason for the mute!") // if no reason 
     mutedmember.addRole(mutedrole) //if reason, kick 
      .catch(error => message.reply(`Sorry ${message.author} I couldn't mute because of : ${error}`)); //if error, display error 
     message.reply(`${mutedmember.user} has been muted by ${message.author} because: ${mutereason}`); // sends a message saying he was kicked 
    } 

    if (command == "unmute") { // creates the command unmute 
     if (!message.member.roles.some(r=>["bot-admin"].includes(r.name))) return message.reply("Sorry, you do not have the permission to do this!"); // if author has no perms 
     var unmutedmember = message.mentions.members.first(); // sets the mentioned user to the var kickedmember 
     if (!unmutedmember) return message.reply("Please mention a valid member of this server!") // if there is no kickedmmeber var 
     unmutedmember.removeRole(mutedrole) //if reason, kick 
      .catch(error => message.reply(`Sorry ${message.author} I couldn't mute because of : ${error}`)); //if error, display error 
     message.reply(`${unmutedmember.user} has been unmuted by ${message.author}!`); // sends a message saying he was kicked 
    } 

    if (command == "kick") { // creates the command kick 
     if (!message.member.roles.some(r=>["bot-admin"].includes(r.name))) return message.reply("Sorry, you do not have the permission to do this!"); // if author has no perms 
     var kickedmember = message.mentions.members.first(); // sets the mentioned user to the var kickedmember 
     if (!kickedmember) return message.reply("Please mention a valid member of this server!") // if there is no kickedmmeber var 
     if (!kickedmember.kickable) return message.reply("I cannot kick this member!") // if the member is unkickable 
     var kickreasondelete = 10 + kickedmember.user.id.length //sets the length of the kickreasondelete 
     var kickreason = message.content.substring(kickreasondelete).split(" "); // deletes the first letters until it reaches the reason 
     var kickreason = kickreason.join(" "); // joins the list kickreason into one line 
     if (!kickreason) return message.reply("Please indicate a reason for the kick!") // if no reason 
     kickedmember.kick(kickreason) //if reason, kick 
      .catch(error => message.reply(`Sorry @${message.author} I couldn't kick because of : ${error}`)); //if error, display error 
     message.reply(`${kickedmember.user.username} has been kicked by ${message.author.username} because: ${kickreason}`); // sends a message saying he was kicked 
    } 

}); 

bot.login(BOT_TOKEN); // connects to the bot 

Il est le seul fichier dans mon dossier bot, sauf le package.json, package-lock.json et tous les node_modules. Ce que j'essaie de faire est de taper discord * purge [nombre de messages que je veux purger] et d'obtenir le bot pour supprimer le nombre de messages que je lui ai demandé de supprimer, PLUS la commande que j'ai entrée (pour par exemple, si je demande au bot de supprimer 5 messages, il supprime 6, y compris la purge * 5 message.

Toute aide serait appréciée, merci!

Répondre

0

Ce que vous cherchez est this (bulkDelete()) méthode pour Discord.js.

En vrac supprime un message, il suffit de passer dans une collection de message dans la méthode et il fera le travail pour vous.
(Vous pouvez utiliser messages propriété du canal, sinon, si vous préférez les promesses, essayez la méthode fetchMessages().)

Assurez-vous que le canal n'est pas un canal vocal ou un canal de DM. Et enfin, votre bot doit avoir la permission aussi.

Vous pouvez obtenir l'autorisation de votre propre bot pour la guilde en utilisant message.guild.member(client).permissions, ou vous pouvez simplement utiliser directement message.guild.member(client).hasPermission(permission), ce qui renvoie un booléen qui détermine si votre bot a l'autorisation désirée.
(La méthode docs pour hasPermission() est here)

0

note que si cela est encore pertinent, mais ce que je l'utilise dans mes bots

 if (!suffix) { 
    var newamount = "2"; 
    } else { 
    var amount = Number(suffix); 
    var adding = 1; 
    var newamount = amount + adding; 
    } 
    let messagecount = newamount.toString(); 
    msg.channel 
    .fetchMessages({ 
     limit: messagecount 
    }) 
    .then(messages => { 
     msg.channel.bulkDelete(messages); 
     // Logging the number of messages deleted on both the channel and console. 
     msg.channel 
     .send(
      "Deletion of messages successful. \n Total messages deleted including command: " + 
      newamount 
     ) 
     .then(message => message.delete(5000)); 
     console.log(
     "Deletion of messages successful. \n Total messages deleted including command: " + 
      newamount 
    ); 
    }) 
    .catch(err => { 
     console.log("Error while doing Bulk Delete"); 
     console.log(err); 
    }); 

fonction de base est de préciser le nombre de messages à purger et va supprimer beaucoup plus la commande utilisée, l'exemple complet est here