Javascript 使用csv-nodeJS数据创建嵌入式消息
所以今天我得到了我的脚本,将csv中的数据提取到一个数组中,并对其进行reduce+排序。 现在我想用这些数据来嵌入不和谐的信息。 但是,嵌入消息的代码无法获取数据,因为它位于超出其范围的常量中。 我需要从哪里开始创建discord嵌入,或者如何将数据放入全局范围Javascript 使用csv-nodeJS数据创建嵌入式消息,javascript,node.js,Javascript,Node.js,所以今天我得到了我的脚本,将csv中的数据提取到一个数组中,并对其进行reduce+排序。 现在我想用这些数据来嵌入不和谐的信息。 但是,嵌入消息的代码无法获取数据,因为它位于超出其范围的常量中。 我需要从哪里开始创建discord嵌入,或者如何将数据放入全局范围 const csv = require('csv-parser'); // npm install csv-parser const fs = require('fs'); // npm install fs const Discor
const csv = require('csv-parser'); // npm install csv-parser
const fs = require('fs'); // npm install fs
const Discord = require('discord.js');
let data = []; // empty array in which the downloaded data will be pushed in
fs.createReadStream('./FFA/csv/rankme.csv') // read csv file
.pipe(csv({ delimiter: ',', from_line: 2 })) // data starts at line 2 ; line 1 will be headers
.on('data', (row) => {
const keyLookup = ['name', 'score', 'kills']; // constant to filter out the properties that are needed
const newData = Object.keys(row)
.filter(key => keyLookup.includes(key))
.reduce((obj, key) => {
obj[key] = row[key];
return obj;
}, {});
data.push(newData); // push data into the data array that we created at the beinning
})
.on("close", () => {
let sorted = data.sort((a,b) => b.score - a.score).slice(0,5); // sorts the objects based on their points and only keeps the 5 highest
console.log(sorted);
});
const embedTop = new Discord.MessageEmbed();
embedTop.setColor('#0099ff');
embedTop.setTitle('FFA Deathmatch TOP 5');
embedTop.setAuthor('BIG NUTS Bot','https://cdn.discordapp.com/app-icons/766003096517345300/f3a15990dd7f7ec50d8b9fea65047efc.png');
embedTop.setDescription('FFA Leaderboard');
embedTop.setThumbnail('https://cdn.discordapp.com/app-icons/766003096517345300/f3a15990dd7f7ec50d8b9fea65047efc.png');
embedTop.addField('1. Place: ', sorted[0].name, ' - Score : ', sorted[0].score, ' - Kills : ', sorted[0].kills);
embedTop.addField('2. Place: ', sorted[1].name, ' - Score : ', sorted[1].score, ' - Kills : ', sorted[1].kills);
embedTop.addField('3. Place: ', sorted[2].name, ' - Score : ', sorted[2].score, ' - Kills : ', sorted[2].kills);
embedTop.addField('4. Place: ', sorted[3].name, ' - Score : ', sorted[3].score, ' - Kills : ', sorted[3].kills);
embedTop.addField('5. Place: ', sorted[4].name, ' - Score : ', sorted[4].score, ' - Kills : ', sorted[4].kills);
embedTop.setFooter('Last update');
embedTop.setTimestamp();
message.channel.send(embedTop);
您需要将创建
MessageEmbed
的所有代码放置在关闭事件的回调中。大概是这样的:
.on("close", () => {
let sorted = data.sort((a,b) => b.score - a.score).slice(0,5); // sorts the objects based on their points and only keeps the 5 highest
console.log(sorted);
const embedTop = new Discord.MessageEmbed();
embedTop.setColor('#0099ff');
embedTop.setTitle('FFA Deathmatch TOP 5');
embedTop.setAuthor('BIG NUTS Bot','https://cdn.discordapp.com/app-icons/766003096517345300/f3a15990dd7f7ec50d8b9fea65047efc.png');
embedTop.setDescription('FFA Leaderboard');
embedTop.setThumbnail('https://cdn.discordapp.com/app-icons/766003096517345300/f3a15990dd7f7ec50d8b9fea65047efc.png');
embedTop.addField('1. Place: ', sorted[0].name, ' - Score : ', sorted[0].score, ' - Kills : ', sorted[0].kills);
embedTop.addField('2. Place: ', sorted[1].name, ' - Score : ', sorted[1].score, ' - Kills : ', sorted[1].kills);
embedTop.addField('3. Place: ', sorted[2].name, ' - Score : ', sorted[2].score, ' - Kills : ', sorted[2].kills);
embedTop.addField('4. Place: ', sorted[3].name, ' - Score : ', sorted[3].score, ' - Kills : ', sorted[3].kills);
embedTop.addField('5. Place: ', sorted[4].name, ' - Score : ', sorted[4].score, ' - Kills : ', sorted[4].kills);
embedTop.setFooter('Last update');
embedTop.setTimestamp();
message.channel.send(embedTop);
});
我发现了问题。读取流从不关闭。我更改了它,添加了:
.var readStream = fs.createReadStream('./FFA/csv/rankme.csv')
(....)
.on('end', function () {
readStream.destroy();
})
现在我得到console.log(已排序);在我的控制台中,出现了一个通道未定义的错误。但我能解决这个问题。感谢您的帮助现在,我在控制台中再也没有收到任何错误,但是我的bot不会发送embed eitherTry日志记录所发送的内容,并尝试发送不同的消息,以查看问题是否出在
embedTop
变量或与您的bot的连接上。我发现了问题。读取流从不关闭。我更改了它,添加了:``.on('end',function(){console.log('文件中的所有数据都已读取');readStream.destroy();})``现在我得到了console.log(排序);在我的控制台中,出现了一个通道未定义的错误。但我能解决这个问题。谢谢你的帮助