2017-10-04 186 views
0

因此,我一直在互联网上搜索广泛,试图找到一个可能的方式来作出清除命令。现在我发现了很多不同的方式来制作一个,但是没有一个能够以我想要的方式适合我,或者只是为我工作。 SO出发了,这里是我的代码你如何使用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 

这是我的BOT文件夹除的package.json,包lock.json和所有node_modules的唯一文件。

我想要做的是输入不和*清除[我想清除的邮件数量]并让机器人删除我要求删除的邮件数量,加上我输入的命令(用于例如,如果我问机器人删除5个消息,他删除6包括*清洗5消息。

任何帮助,将不胜感激,谢谢!

回答

0

你在找什么是thisbulkDelete())方法为Discord.js。

它批量删除一条消息,只是简单地传入一个消息集合该方法,它会为你做这项工作。
(可以使用从通道messages财产,否则,如果你愿意的承诺,然后尝试fetchMessages()方法。)

只要确保该通道是不是语音通道,或DM通道。最后,你的机器人也需要获得许可。

您可以使用message.guild.member(client).permissions获得您自己的bot的权限,或者您可以直接使用message.guild.member(client).hasPermission(permission),它返回一个布尔值,确定您的bot是否具有所需的权限。
(用于hasPermission()方法文档是here

0

注知道这是仍然相关,但这个我在我的机器人使用

 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); 
    }); 

基本功能是什么指定的邮件数清除它会删除那么多加上使用的命令,完整的例子是here