【问题标题】:Is there a better way to cache a message indefinitely?有没有更好的方法来无限期地缓存消息?
【发布时间】:2022-08-04 10:00:26
【问题描述】:

我有一条消息,人们可以添加/删除反应。一旦用户添加了一个反应,它就会在一个单独的频道中更新一个嵌入。我的机器人将在消息发送后的前 30 分钟左右检测到这些反应,然后完全忽略对该消息的所有进一步反应。为了解决这个问题,我创建了一个每 15 分钟运行一次的函数,以使用 channel.messages.fetch() 缓存消息。我很想知道是否有更好的方法来实现无限期缓存的消息,最好不使用setInterval() 函数。谢谢!

  • 如果您提供一些详细的代码,以便我们可以帮助您改进它会更好。
  • 我不认为这是正确的问题。相反,您应该告诉我们您想要实现什么,到目前为止您已经尝试过什么,以及什么行不通。无论如何,您不需要缓存这些消息来接收反应。

标签: javascript typescript discord discord.js


【解决方案1】:

您不应该无限期地尝试缓存消息 - 机器人仍会收到所有消息反应事件的通知 - 默认情况下,它只是 discord.js 仅对缓存消息执行,您可以通过启用部分事件来收听它们。

您需要为MessageChannelReaction 启用部分事件——这三个都需要获得反应事件。

import { Client, GatewayIntentBits, Partials } from 'discord.js';
const client = new Client({
    intents: [...],
    partials: [Partials.Message, Partials.Channel, Partials.Reaction]

})

这将导致在有时数据不足时运行 MessageReactionEvent 并可能导致错误 - 检查事件是部分事件(并非所有数据都得到保证)还是完整事件(结构的所有数据都将存在)您可以只检查反应的.partial 属性。

但是,这样做将允许您侦听未缓存消息的消息反应事件。

【讨论】:

    猜你喜欢
    • 2013-04-02
    • 2011-02-06
    • 2012-06-22
    • 2019-09-03
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多