Discord.js deleteMessage()不起作用

时间:2017-08-05 19:02:46

标签: javascript bots discord discord.js

我正在使用discord.js创建一个Discord bot,我想创建一个可以清除消息的命令。现在,我有这个代码(只有有趣的部分),我无法弄清楚它为什么不起作用:

// 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');

你能帮助我吗?

5 个答案:

答案 0 :(得分:0)

我看到两个问题:

  1. messages数组始终为空;没有代码可以将项添加到数组中,因此对bot.deleteMessages的调用将始终为空数组;
  2. deleteMessages;
  3. 似乎sweepMessages不是可用方法

    根据文档,我认为你想要的是bot.sweepMessages(1);。对该状态的描述:

      

    扫描所有基于文字的频道'消息并删除早于最大消息生存期的消息。如果邮件已被编辑,则使用编辑时间而不是原始邮件的时间。

    尝试更改代码,而不是调用isnan = NaN; notnan = "hello"; if (typeof(notnan) === "number" && isNaN(notnan)){ console.log('yes'); } else { console.log('typeof(notnan) is :',typeof(notnan), '\n isNaN(notnan) :', isNaN(notnan),'\n this is,',typeof(notnan)=== "number",'-',isNaN(notnan), 'so this condition became false...') },我认为这会告诉客户清除所有超过一秒的邮件。

答案 1 :(得分: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

答案 2 :(得分:0)

你可以交换

$json['url']

为:

bot.deleteMessages()

答案 3 :(得分: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

答案 4 :(得分:0)

不是那样的。您应该先获取消息,然后使用bulkDelete删除它们 ,这是一个简单的示例

// Normal Javascript
<Message>.channel.fetchMessages()
.then(messages => {
// Here you can use bulkDelete(101) to delete 100 messages instead of using fetchMessages and deleting only 50
<Message>.channel.bulkDelete(messages);
});
// ES6
let messages = await <Message>.channel.fetchMessages();
// Here you can use bulkDelete(101) to delete 100 messages instead of using fetchMessages and deleting only 50
await <Message>.channel.bulkDelete(messages);