【问题标题】:Fetch old reactions to an old message获取对旧消息的旧反应
【发布时间】:2020-08-02 09:12:30
【问题描述】:

我编写了一个 12.0.2 版本的 discord.js 机器人,一些功能已经运行了一段时间,但现在无法正常工作,而且似乎与空缓存有关,但我无法弄清楚如何解决它。

这里是场景:

我让我的机器人每周在服务器上发布一条消息,而公会成员有一周的时间对此消息做出反应。在本周末,我想分析对机器人的反应以决定做什么(我不能让机器人 24/7 运行以等待反应)。

这是我的问题:

在获取此特定消息后,到目前为止我所做的是msg.reactions.resolve('✅').users.fetch().then(somestuff),但几周后它停止运行,现在抛出(node:2336) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'users' of null

我已经通过一些调试步骤发现msg.reactions.cache 是空的,因此我认为问题出在此处,但我找不到如何填充它。 这是msg.reactions 包含的内容:

ReactionManager {
  cacheType: [Function: Collection],
  cache: Collection [Map] {},
  message: Message {
    details_about_the_message_that_confirm_it_is_the_desired_one_that_have_been_reacted_to
  }
}

请问有人知道如何解决这个问题吗?任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 您是否尝试过调试从 Discord API 返回的内容?我假设您正在获取消息(例如 channel.messages.fetch(id)),因此您可以看到 data.reactionsthis line 中的内容。
  • @cherryblossom 您好,很抱歉您的回答和我的回答之间有很长的时间!我已经编辑了我的问题以添加有关 data.reactions 的详细信息
  • 我意识到我将表情符号解析为反应是错误的;这应该仍然有效,因为 Discord.js 使用表情符号名称(实际的 Unicode 表情符号)或自定义表情符号的 ID。我已经删除了我的错误答案,对此感到抱歉。
  • 没什么坏处,别担心。

标签: discord.js


【解决方案1】:

我终于找到了解决方案,或者我最好将其称为解决方法,因此我在这里分享它以关闭这篇文章。

首先,我不得不说msg.reactions.resolve('✅').users.fetch().then(somestuff) 完成了它的工作并且不是问题的一部分,因为问题在于消息获取过程。获取一堆消息或获取特定消息(按 ID)会导致不同的结果。

通过 ID 获取特定消息可让您访问 ReactionManager 的缓存,而获取多条消息似乎不会填充缓存。

【讨论】:

  • 你刚刚救了我的命,我正在做同样的事情,但使用 fetch() 而不是 resolve([emoji])。谢谢!
  • 我很高兴,很高兴听到它帮助了某人! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
  • 2014-01-05
相关资源
最近更新 更多