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

Auto deleting messages in a specific channel

我有一个建议频道,我做了它,所以用户只能在其中 post link,机器人能够对他们 [=19= 的内容做出反应]. 我已经在 link 上完成了自动反应,但我无法让机器人删除不是 link 的内容。 所以我希望删除所有其他不是 link 的内容。

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)
    }
  }
});

工作很好,但不是很好。 它删除不是 link 百万次的消息并发送百万次通知:/ 我想问题出在 else if 部分

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)
    }
  }
});

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

当您发送此消息时,您的机器人会再次被触发,因为已发送一条新消息。它检查它是否在特定频道中,以及它是否包含 link,如果不包含,则循环重复。

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

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

  /* All your other code here */