2017-08-05 136 views
0

我正在用discord.js創建一個Discord bot,我想創建一個可以清除消息的命令。現在,我有這個代碼(只有有趣的部分),我不明白爲什麼它不起作用:Discord.js deleteMessage()不起作用

// Importing discord.js, creating bot and setting the prefix 
const Discord = require('discord.js'); 
const bot = new Discord.Client(); 
const prefix = "/"; 

// Array that stores all messages sent 
messages = []; 

bot.on('message', (message) => { 

    // Store the new message in the messages array 
    messages.push(message); 

    // Split the command so that "/clear all" becames args["clear", "all"] 
    var args = message.content.substring(prefix.length).split(" "); 

    // If the command is "/clear all" 
    if(args[0] == "clear" && args[1] == "all") { 

     bot.deleteMessages(messages); // Code that doesn't work 

     // Resets the array 
     messages = []; 

    } 
} 

// CONNECT !!! 
bot.login('LOGING TOKEN HERE'); 

你能幫我嗎?

+0

請創建演示您的問題的儘可能最小的代碼,然後張貼。你現在發佈的代碼甚至沒有平衡大括號,所以我不能分辨是否有任何引起問題的語法錯誤。 – wmorrell

+0

好的,我修復了@wmorrell! – Emrio

回答

0

您應該使用<TextChannel>.bulkDelete代替。

例子:

msg.channel.bulkDelete(100).then(() => { 
    msg.channel.send("Purged 100 messages.").then(m => m.delete(3000)); 
}); 

這將刪除2 - 100消息在通道中每次調用該方法,這樣你就不會收到429 (Too many Requests) Error頻繁這可能會導致你的token being revoked

0

我看到兩個問題:

  1. messages陣列總是空的;沒有將項添加到數組的代碼,因此對bot.deleteMessages的調用將始終獲得一個空數組;
  2. 它不會出現deleteMessagesDiscord.Client上的可用方法;

根據相關文檔,我想你想要的是sweepMessages。該狀態的描述:

掃描所有基於文本的頻道的消息並刪除比最大消息生存期更早的消息。如果消息已被編輯,則使用編輯的時間而不是原始消息的時間。

嘗試改變代碼,而不是呼叫bot.sweepMessages(1);,我想它會告訴客戶端清除所有超過一秒的消息。

+0

對不起,我已經縮小了我的代碼,在我的代碼中,它會在有人寫郵件時追加'messages'數組。 此外,'sweepMessages()'被識別,但它似乎沒有任何作用... – Emrio

0

另一種方式來做到這一點,沒有sweepMessages是通過使用fetchMessages

let user = message.mentions.users.first(); 
let amount = !!parseInt(message.content.split(' ')[1]) ? parseInt(message.content.split(' ')[1]) : parseInt(message.content.split(' ')[2]) 
var prefix = '!' 


if (message.content.startsWith(prefix + 'clear') && !amount) 
    return message.reply('Must specify an amount to clear!'); 
if (message.content.startsWith(prefix + 'clear') && !amount && !user) return message.reply('Must specify a user and amount, or just an amount, of messages to clear!'); 
    message.channel.fetchMessages({ 
     limit: amount, 
    }).then((messages) => { 
    if (user) { 
     const filterBy = user ? user.id : bot.user.id; 
     messages = messages.filter(m => m.author.id === filterBy).array().slice(0, amount); 
    } 
    message.channel.bulkDelete(messages).catch(error => console.log(error.stack)); 
}); 

這將允許用戶使用命令!clear [#]刪除數量的消息時發送。如果它運行的只是!clear,您可以設置有多少人被刪除,沒有指定的號碼。

discord.js Documentation - TextChannel#fetchMessages

0

您可以把

bot.deleteMessages() 

到:

messages.forEach(x => x.delete())