因此,我正在制作一个机器人,它将将通道中发送的所有消息存储到计算机上的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()方法脱机以来,我不确定如何获取每条消息。我该怎么办?
答案 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
初始化为
[]