2017-10-04 185 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