提问者:小点点

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


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

首先,我显然试图通过到处放置一些console.logs来调试代码。据我所知,当一个反应被缓存时,一旦尝试再次获取消息,就不会更新缓存,并且该反应仍然显示在消息上(当它不是^^时)。因此,我尝试了Stackoverflow的不同功能,比如添加client.on('raw',。。。。)位。什么也改变不了。然后我尝试使用partials(我认为这可能有助于smh)来处理消息和反应。没什么不同。甚至尝试重复其他类似的反应

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



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


共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完全相同,但是反应是新的(不包括删除的)。