机器人重启后获取旧消息(Discord 机器人,NodeJS)

Get old messages after bot reboot (Discord bot, NodeJS)

我正在尝试制作 Discord 机器人,但遇到了一些问题。 我想要一种获取频道所有消息的方法,但是在机器人重启后,他不会 "see" 旧消息。 这是一个例子:

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 条随机消息,之后,我启动了机器人并启动了命令。 结果为1,对于调用命令的消息。

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

来自 .fetchMessages 上文档的示例:

// 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}`);
        });
    }
}

您可以将 limit / 最大消息数等可选设置传递给 return - 请在此处查看这些设置:ChannelLogsQueryOptions

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

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

存在一些差异,您可能需要获取一些在 discord.js 中自动填充的数据。