【问题标题】:How to make the bot detects for a reaction on every message on a channel?如何让机器人检测频道上每条消息的反应?
【发布时间】:2019-10-16 16:01:03
【问题描述】:

我希望机器人始终检测执行代码的反应(这里我试图通过反应来创建通道)。

我尝试使用反应收集器,但它有一个计时器,它不能用于每条消息。

我需要一个例子,我真的尝试了很多东西,但我没有在文档上找到任何有用的东西。 ????

【问题讨论】:

标签: node.js discord discord.js


【解决方案1】:

我尝试使用反应收集器,但它有一个计时器...

对于这种误解,我深表歉意;当我之前暗示收集器有时间限制时,我错了。

根据文档,省略time 选项默认为无时间限制(请参阅CollectorOptions)。因此,此示例应继续寻找用户的反应,直到机器人停止。

message.channel.send('React with ?.')
  .then(m => {
    const filter = (reaction, user) => user.id === message.author.id && reaction.emoji.name === '?';
    const collector = m.createReactionCollector(filter, { max: 1 });

    collector.on('collect', () => {
      message.clearReactions();
      message.edit('You did it!');
    });
  })
  .catch(console.error);

但是,如前所述,如果机器人停止,收集器也会停止。解决这个问题没有简单的方法。如果您真的想要无限收集,我看到的唯一解决方案是将消息列表和相应的收集器存储在数据库(或 json 文件)中,然后将它们再次应用于客户端 ready 事件中的现有消息。

【讨论】:

  • 是的,我知道,并且我有一些现有的特定消息,我想让成员能够在做出反应时创建语音通道,对于每个消息都有不同的通道要创建,我不会让它像在执行命令时显示该消息一样自动,所以是的,我唯一应该做的就是获取消息 ID,我会将它们放在“如果”上,所以是的,这对我有好处,但我仍然没有不知道如何让它发生。
  • 你的意思是消息已经发送了,你想收集对他们的反应吗?
  • 完全正确,或者更好:每条消息都已在特定频道上发送,因此我们不必获取每个频道 ID。
  • 是否可以再次发送消息,还是需要使用现有的?
  • 我们可以将msg内容作为频道名称
猜你喜欢
  • 2017-04-27
  • 2019-03-27
  • 2020-07-11
  • 1970-01-01
  • 2022-01-20
  • 2018-05-07
  • 2019-09-26
  • 2020-10-26
  • 2020-12-14
相关资源
最近更新 更多