当前位置: 首页 > 知识库问答 >
问题:

在bot重新启动后获取旧消息(Discord bot、NodeJS)

松骏俊
2023-03-14

我正试图制造一个不和谐的机器人,我有一些问题。我想要一种方法来获取某个频道的所有消息,但在bot重新启动后,他无法“看到”旧消息。以下是一个例子:

const commando = require('discord.js-commando');

module.exports = class nbMess extends commando.Command{
    constructor(client) {
        super(client, {
            name: 'nbmsg',
            group: 'admin',
            memberName: 'nbmsg',
            description: 'Return number of messages in a channel'
        });
    }
    async run(msg, args){
        msg.channel.send(`Number of messages : ${msg.channel.messages.size}`);
    }
}

因此,我发送了3条随机消息,然后启动bot并启动命令。对于调用命令的消息,结果是1。

共有2个答案

艾俊晖
2023-03-14

我也有同样的不和谐问题。js,并发现不和谐。js light不依赖缓存,它的事件可以在未缓存的对象上触发。

https://www.npmjs.com/package/discord.js-light

存在一些差异,您可能必须获取一些数据,否则这些数据会自动填充到discord中。js。

莫英卓
2023-03-14

使用. finchMessages()方法获取过去发送的消息。

上文档中的示例。获取消息

// Get messages
channel.fetchMessages()
  .then(messages => console.log(`Received ${messages.size} messages`))
  .catch(console.error);

所以你的例子看起来像这样:

module.exports = class nbMess extends commando.Command{
    ...
    async run(msg, args){
        msg.channel.fetchMessages()
        .then(messages => {
            msg.channel.send(`Number of messages : ${messages.size}`);
        });
    }
}

您可以传递一个可选设置,如限制/max-number-of-messages-return-请参阅此处的设置:ChannelLogsQueryOptions

 类似资料:
  • 抱歉我英语不好。 我想让角色反应机器人我的问题是我的机器人在重新启动之前看不到消息发送 我已经接受了这个代码,但他没有看到旧消息的反应。 我能做些什么来使这个代码看到对旧消息的反应。

  • 我处理实时应用程序的timeseries数据。所以旧数据没有意义。我只想处理流应用程序启动后收到的数据,而不是之前提交的偏移量。重启Kafka流应用后,忽略旧记录的正确方法是什么? 对于kafka consumer API,我通常使用方法向前跳到最新记录。流是否有一种等效的机制?我希望避免过滤自上次提交以来的所有邮件,以忽略旧邮件。

  • 我正在使用BackoffSupervisor策略来创建一个必须处理某些消息的子参与者。我想实现一个非常简单的重启策略,其中在发生异常时: > 子级将失败消息传播给主管 supervisor重新启动子程序并再次发送失败消息。 主管重试3次后放弃 这给出了类似于以下输出的内容: 但是没有来自钩子的日志

  • 我有一个Kafka集群正在运行,当重新启动应用程序(消费者)时,它会跳过一些在应用程序关闭时推送到主题的消息。 当应用程序启动时,我可以看到它读取带有偏移量的消息,然后将偏移量推送到。然后当应用程序关闭时,带有偏移量的消息被推送到主题。重启应用程序后,它读取并将其偏移量设置为,因此跳过。 这是我的配置:

  • 我想让我的机器人只读取DM消息,并将其发送到不和谐的渠道,但我的代码垃圾邮件消息无限,垃圾邮件5次,然后它暂停几秒钟,然后再次垃圾邮件,机器人也不只读取DM消息,并读取公会消息,所以如果我在公会里发送任何东西,它会发送垃圾邮件。 我到底想要什么?如果有人发送“你好!”(消息内容)到DM中的bot,bot需要发送'Hello!'(消息内容)到指定的频道(日志频道)。

  • 我正在使用kafkapython来消费来自kafka队列(kafka版本0.10.2.0)的消息。特别是我使用的是KafkaConsumer类型。如果消费者停止,并且在一段时间后重新启动,我希望从最新生成的消息重新启动,即删除消费者停止时生成的所有消息。我怎样才能做到这一点? 谢谢