2017-10-04 3 views
0

パージコマンドを実行する方法を見つけるために、私はインターネット上で遠く離れて検索してきました。今私は1つを作るためにかなりたくさんの異なった方法を見つけましたが、それらのどれも私が欲しかったやり方で私に合っていなかったり、単に私のために働いていました。 SOオフを開始する 、ここではそれはpackage.json、パッケージlock.jsonとすべてnode_modules除く私のボットフォルダ内のファイルのみである私のコード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 

です。

私がしようとしているのは、discord * purge [削除したいメッセージの数]と入力して削除するように要求したメッセージの量を削除するボットを取得することです。私は5つのメッセージを削除するには、ボットを依頼する場合の例では、彼は*パージを含む6を削除5メッセージ。

任意の助けもいただければ幸いです

、ありがとう!あなたがあるthisbulkDelete())メソッドを探しています何

答えて

0

Discord.jsの場合

一括でメッセージを削除するだけで、メッセージのコレクションを方法とそれはあなたのために仕事を行います。
(あなたがfetchMessages()方法を試した後、あなたが約束を好むそうでない場合は、チャネルからmessagesプロパティを使用することができます。)

ただ、チャネルは音声チャネル、またはDMチャネルではないことを確認してください。最後に、あなたのボットにも許可が必要です。

message.guild.member(client).permissionsを使用して自分のボットの許可を得ることも、message.guild.member(client).hasPermission(permission)を直接使用することもできます。ブール値は、ボットに希望の権限があるかどうかを返します。
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

です
関連する問題