首页 > 解决方案 > Discord 消息收集器重复收集的消息

问题描述

我正在尝试让我的 Discord 机器人检测何时在短时间内发送了两条或更多类似的消息,然后发送一条消息。

我很难理解收集器,所以它只是一遍又一遍地重复信息。我应该切换到等待消息吗?

const filter = m => m.content.toLowerCase() == message.content.toLowerCase();
const collector = message.channel.createMessageCollector(filter, {max: 2, time: 6000});
collector.on('collect', m => {
    message.channel.send(message.content);
});

标签: javascriptnode.jsdiscord.js

解决方案


如果要在这六秒内有两条内容相同的消息时立即发送消息,则需要在选项中设置该max值。1createMessageCollector

此外,您不希望每次收集消息时都发送消息。如果将 设置max1,则可以订阅collector'end事件并在有两条相同消息时从那里发送消息。由于该end时间范围内没有相同消息时也会触发该事件,因此您还需要检查collected.size并仅在大于零时发送消息。

client.on('message', (message) => {
  if (message.author.bot) return;

  const filter = (m) => m.content.toLowerCase() === message.content.toLowerCase();
  const collector = message.channel.createMessageCollector(filter, {
    max: 1,
    time: 6000,
  });

  collector.on('collect', (m) => {
    console.log(`Collected ${m.content}`);
  });

  collector.on('end', (collected) => {
    console.log(`Collected ${collected.size} items`);

    if (collected.size > 0) {
      message.channel.send(
        `Naughty, naughty! You sent _"${message.content}"_ more than once in a short time...`,
      );
    }
  });
});

推荐阅读