自动删除特定频道中的消息

时间:2019-01-21 12:50:05

标签: javascript node.js discord.js

我有一个建议渠道,我做到了,所以只允许用户在其中发布链接,并且机器人可以对发布的内容做出反应。 我已经完成了对链接的自动反应,但是我无法使漫游器删除不是链接的内容。 因此,我希望删除所有不是链接的内容。

bot.on('message', message => { 
  // whenever a message is sent
  if (bot.id === '514484773171757061') {
    return;
  }

  if (message.channel.id === "508606903740268545" ){

    if (message.content.includes('playrust.io/')) {
      message.react('✅').then( () =>{
      message.react('❌')});
    } else if (message.delete()) {
      message.channel.sendMessage('Message has been Deleted ' + message.author)
    }
  }
});

这很好,但效果不是很好。 它删除不是链接的消息数百万次,并发送数百万条通知:/ 我想问题出在else if部分

2 个答案:

答案 0 :(得分:1)

我认为问题在于您正在创建一种无限循环。在代码中,您首先要检查消息发送是否在特定的通道中,然后检查消息是否包含链接。如果没有,您会向该频道发送一条消息,说“我没有找到链接”。

发送此消息时,由于已发送新消息,机器人再次被触发。它检查它是否在特定的频道中,以及是否包含一个链接(不包含该链接),因此循环重复进行。

可以用一个简单的语句修复它,这在创建机器人时也是一种很好的做法。要解决此问题,您需要包含一些代码来检查消息是否已由漫游器发送。看下面的例子:

bot.on('message', message => { 
  // Ignore messages from all bots
  if (message.author.bot) return;

  /* All your other code here */

答案 1 :(得分:0)

client.id不是问题,因此必须是

if (message.author.bot) return;

然后代替

else if (message.delete()) {
      message.channel.send('Message has been Deleted ' + message.author)
    }

使用

else {
      message.delete(5000)
      message.channel.send('Message has been Deleted ' + message.author)
    }

产生的结果:

bot.on('message', message => { 
  // whenever a message is sent
  if (message.author.bot) return;


  if (message.channel.id === "508606903740268545" ){

    if (message.content.includes('playrust.io/')) {
      message.react('✅').then( () =>{
      message.react('❌')});
    } else {
message.delete(5000)
      message.channel.send('Message has been Deleted ' + message.author)
    }
  }
});