Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用csv-nodeJS数据创建嵌入式消息_Javascript_Node.js - Fatal编程技术网

Javascript 使用csv-nodeJS数据创建嵌入式消息

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

所以今天我得到了我的脚本,将csv中的数据提取到一个数组中,并对其进行reduce+排序。 现在我想用这些数据来嵌入不和谐的信息。 但是,嵌入消息的代码无法获取数据,因为它位于超出其范围的常量中。 我需要从哪里开始创建discord嵌入,或者如何将数据放入全局范围

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(排序);在我的控制台中,出现了一个通道未定义的错误。但我能解决这个问题。谢谢你的帮助