无法正确获取客户的反应-discord.js

时间:2020-07-17 16:58:57

标签: javascript discord discord.js

我目前正在使用允许用户创建“角色反应”消息的系统。我正在使用Enmap(js <=> sqlite数据库)存储用户emojiIdOrName: roleId给定的对。

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

我尝试过的

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

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

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

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事件获得缓存的响应。



编辑

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

1 个答案:

答案 0 :(得分:0)

好的,我终于得到了答案。 我可以通过清除消息和反应的缓存,然后通过提取消息来重新缓存消息来完成我想做的事情。 在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();
    ....

消息的确与react.message相同,但是消息是新的(不包括已删除的消息)。