有没有办法对使用 discord.js 发送的每条消息做出反应

Posted

技术标签:

【中文标题】有没有办法对使用 discord.js 发送的每条消息做出反应【英文标题】:Is there a way to react to every message ever sent with discord.js 【发布时间】:2019-11-18 03:27:52 【问题描述】:

我想使用一个机器人来使用 discord.js f.e. 对频道中的每条消息做出反应。我有一个表情符号竞赛频道,我想在其中的每个帖子上添加 ✅ 和 ✖ 反应 ofc,所有不必要的消息都被清理,所以有大约 50 条消息

【问题讨论】:

【参考方案1】:

根据https://discord.js.org/#/docs/main/stable/class/TextChannel

你可以使用fetchMessages 从特定频道获取所有消息,然后返回Message的集合

然后您可以使用.react 函数通过迭代并在每个消息上调用.react 来将您的反应应用于此消息集合。

编辑:

channelToFetch.fetchMessages()
    .then(messages => 
        messages.tap(message => 
            message.react(`CHARACTER CODE OR EMOJI CODE`).then(() => 
              // Do what ever or use async/await syntax if you don't care 
                 about Promise handling
            )
        )
    )

【讨论】:

【参考方案2】: 使用TextChannel.fetchMessages()获取频道中已发送的消息。 遍历Collection。 使用Message.react() 添加反应。 在频道中发送新消息时,您还应该添加反应。
const emojiChannelID = 'ChannelIDHere';
client.on('ready', async () => 
  try 
    const channel = client.channels.get(emojiChannelID);
    if (!channel) return console.error('Invalid ID or missing channel.');

    const messages = await channel.fetchMessages( limit: 100 );

    for (const [id, message] of messages) 
      await message.react('✅');
      await message.react('✖');
    
   catch(err) 
    console.error(err);
  
);
client.on('message', async message => 
  if (message.channel.id === emojiChannelID) 
    try 
      await message.react('✅');
      await message.react('✖');
     catch(err) 
      console.error(err);
    
  
);

在这段代码中,您会注意到我使用的是for...of 循环而不是Map.forEach()。这背后的原因是后者将简单地调用方法并继续前进。这将导致任何被拒绝的承诺 not 被捕获。我还使用了async/await 样式而不是then() 链,这很容易变得混乱。

【讨论】:

让它像那样工作,谢谢,但我对 js 编码很陌生,这是什么 => 我认为这并不意味着 sammerl 或等于 => 实际上是arrow function 语法的一部分。 <=>= 是 relational operators。 =>>= 很容易混淆,但它们有很大的不同。 你能在被拒绝的承诺部分上进行开发吗?我在之前的一个答案中使用了Map.forEach(),但没有想到/不知道。你说的是message.react 承诺,不是吗?因为如果一个承诺被拒绝,forEach 将停止,所以它会被停止并像你一样进入,不是吗? forEach() 的工作方式,不。它只是调用 Promise 并继续迭代。到它完成时,Promise 仍将处于待处理状态。即使您使用await 关键字,它也不会对这个问题有效。请参阅 here 以获得对工作原理和问题的更全面的解释。

以上是关于有没有办法对使用 discord.js 发送的每条消息做出反应的主要内容,如果未能解决你的问题,请参考以下文章

Discord JS - 向机器人所在的每台服务器中的每个用户发送 dm

消息收集器有没有办法在 Discord.js 中收集 DM?

discord.js 如何将检测到的内存泄漏发送到通道?

无法读取 discord.js 中未定义的属性“发送”

对自己的消息做出反应的 Discord 机器人

检测欢迎消息 discord.js