使用Discord.js获取自机器人离线以来发送的所有消息

时间:2020-05-15 17:11:13

标签: javascript discord.js

因此,我正在制作一个机器人,它将将通道中发送的所有消息存储到计算机上的txt文件中。由于我一直没有电脑,并且我在计算机上运行该漫游器,因此在.txt文件中存储的消息中会留有空白。我正在努力做到这一点,以便我的机器人可以获取自脱机以来发送的所有消息,并将所有消息存储在我的文件中。我创建了一个txt文件,该文件保存了每条消息的消息ID,它将覆盖最后一条消息,因此它基本上只是其中一个消息ID的文件。当我的机器人启动时,布尔变量将实例化为false,并且在启动过程完成后将其设置为true。这是我到目前为止所拥有的:

var latest;
var beenRunning = false;

bot.on('message', msg => {
    latest = msg.id;
    if(beenRunning == false) {
      msg.channel.messages.fetch(latest, {limit: 100})
      .then(messages =>  
        //code to get messages since last online
        )
      .catch(console.error);
      beenRunning = true;
    }
    else {
      messageTest(msg);
    }
    fs.writeFile('lastMsg.txt', latest, (err) => { 
      if (err) throw err; 
  }) 
}); 

自从使用fetch()方法脱机以来,我不确定如何获取每条消息。我该怎么办?

1 个答案:

答案 0 :(得分:0)

不知道您如何构造lastMsg.txt,所以我只是使用json。

可能会有点慢,因为它将是一个更大的文件,并且使用了许多数组高级函数

let logged = require("./lastMsg.json");
let beenRunning;

bot.on('message', msg => {
    if (!beenRunning) {
        msg.channel.messages.fetch({ limit: 100 })
            .then(messages => {
                const reduced = messages
                    .map(e => ({ id: e.id, content: e.content }))
                    .filter(e => {
                        return logged.find(l => l.id === e.id && l.content === e.content);
                    });

                logged = logged.concat(reduced.array());
                beenRunning = true;
            })
            .catch(console.error);
    } else {
        messageTest(msg);
    }

    fs.writeFile('lastMsg.json', JSON.stringify(logged), (err) => {
        if (err) throw err;
    })
});

将您的./lastMsg.json初始化为 []