我试图制作Discord 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条随机消息,然后我启动机器人并启动命令。 对于调用命令的消息,结果为1。
答案 0 :(得分: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
/最大数量的邮件返回 - 请参阅此处的设置:ChannelLogsQueryOptions
答案 1 :(得分:0)
我在discord.js中遇到了同样的问题,发现discord.js-light不依赖于缓存,并且其事件可以在未缓存的对象上触发。
https://www.npmjs.com/package/discord.js-light
有一些区别,您可能必须获取某些数据,这些数据原本是在discord.js中自动填充的。