【问题标题】:Unable to correctly fetch my client's reactions - discord.js无法正确获取客户的反应 - discord.js
【发布时间】:2020-11-07 12:45:35
【问题描述】:

我目前正在开发一个允许用户创建角色反应消息的系统。我正在使用Enmap(js sqlite 数据库)来存储用户emojiIdOrName: roleId 给出的对。

所以,正如您在标题中看到的那样,我遇到了 Reactions 问题。 当成员对存储在我的数据库中的消息的任何表情符号做出反应时,我的代码首先确保为此消息存储的所有表情符号-角色对都是正确的(检查存储的角色是否仍然可用,如果您在下面看到的所有反应消息在数据库中,反之亦然)。如果出现问题,则从数据库中删除该对,并从消息中删除反应。 因此,根据我上面所说的(如果足够清楚的话),当您从消息中删除表情符号时(在不和谐方面,例如),下次有人做出反应时应该更新数据库并删除数据库中的对应条目甚至在获得角色之前。 但实际上并没有。

我尝试了什么

首先,我显然试图通过在各处放置一些 console.logs 来调试我的代码。据我了解,当尝试再次获取消息时缓存了反应不会更新缓存并且反应似乎仍然在消息上(当它不是^^时)。 所以我尝试了在 Stackoverflow 周围可以看到的不同的东西,比如添加 client.on('raw', ....) 位。它没有改变任何东西。 然后我尝试对消息和反应使用部分(我认为它可能会有所帮助)。没什么不同。 甚至尝试像这样迭代其他反应

reaction.message.reactions.cache.forEach(async r => {
    await r.fetch();
});

这是我所说的一个具体例子。 我刚刚删除了一个反应:,只剩下一个,但这是我在记录反应表情符号时得到的:。我正在使用以下代码

case 'dev':
  message.channel.messages.fetch(arguments[1]).then(m => {
    console.log(m.reactions.cache.map(r => {r.fetch();return r.emoji.name}))
  })
  break;

我没有尝试过(我不想使用它)

我不想使用其他事件,如 messageReactionRemove、messageReactionRemoveAll、messageReactionRemoveEmoji 等,因为删除反应的方法太多(处理所有这些会很痛苦)。

让它更短

为了更短,我希望能够获取消息的真实反应,而不是通过messageReactionAdd 事件获得缓存的反应。



编辑

好吧,我最近一直忙于尝试一些事情,我发现了一些非常有趣的事情。事实上,我上面所说的一切似乎都是真实的,但适用于非客户的每个人添加的反应。我现在正在尝试正确获取我的机器人的反应。

【问题讨论】:

    标签: javascript discord discord.js


    【解决方案1】:

    好的,我终于得到了答案。 我可以通过清除消息和反应的缓存来做我想做的事情,然后通过获取它来重新缓存消息。 在 JS 中是这样的:

    client.on('messageReactionAdd', async (reaction, user) => {
        await reaction.message.channel.messages.cache.delete(reaction.message.id);
        await reaction.message.reactions.cache.clear();
        let message = await reaction.message.fetch();
        ....
    

    Message 与reaction.message 完全相同,但反应是新的(不包括已删除的)。

    【讨论】:

      猜你喜欢
      • 2020-05-16
      • 1970-01-01
      • 2021-06-22
      • 2021-03-29
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      相关资源
      最近更新 更多