首页 > 解决方案 > 自动删除特定频道中的消息

问题描述

我有一个建议频道,我这样做是为了让用户只允许在其中发布链接,机器人能够对他们发布的内容做出反应。我已经对链接进行了自动反应,但我无法让机器人删除不是链接的内容。所以我想删除所有不是链接的东西。

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部分

标签: javascriptnode.jsdiscord.js

解决方案


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

当您发送此消息时,您的机器人将再次被触发,因为已发送了一条新消息。它检查它是否在一个特定的频道中,以及它是否包含一个链接,但它没有,因此循环重复。

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

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

  /* All your other code here */

推荐阅读