Как бы я перебрать массив с .addField - PullRequest
2 голосов
/ 15 марта 2019

Я сейчас пытаюсь создать диссон-бота, который будет вести обратный отсчет до определенной даты.Прямо сейчас я передаю аргументы в папку файлов .json, где хранятся только имя события и дата выпуска / дата события.

bot.on('ready', () => {
var sendChannel = bot.channels.find(channel => channel.id === '553846848578912257')
setInterval(() =>{

    fs.readdir(folder, (err, files) => {
        files.forEach(file => {
        });
        for(i = 0; i < files.length; i++){
            var input = require(folder+files[i]); 

            if(((new Date(input.releasedate) - currentdate) / days) > 0)
                {
                    var embed = new Discord.RichEmbed()
                    .addField(input.eventName, Math.ceil((new Date(input.releasedate) - currentdate) / days) + ' days until ')
                    //sendChannel.send(Math.ceil((new Date(input.releasedate) - currentdate) / days) + ' days until ' + input.eventName);
                }

            else 
            {
                console.log("arg not passed, invalid or past: "+input.eventName)
            }
        }
        sendChannel.send(embed);
    });
}, 10000);

console.log("Ready")
console.log(`Logged in as ${bot.user.tag} (${bot.user.id}) on ${bot.guilds.size} servers`);
bot.user.setActivity(`Counting things down | ${bot.guilds.size} servers`);
});

В настоящее время он будет работать с командой sendChannel.send и будет отправлять сколько угодно файлов в папке, но по одному за раз.Я пытаюсь получить их все во встроенном сообщении.Проблема в том, что .addField будет хранить только последний элемент в «input».Есть ли способ, чтобы моя программа добавляла .addField после каждого прохода, а не перезаписывала?

1 Ответ

0 голосов
/ 15 марта 2019

addField сохраняет последний вход, потому что вы создаете новый Discord.RichEmbed() в каждом цикле, который создает новый экземпляр и перезаписывает предыдущий.

Вы должны инициализировать встраиваемое сообщение перед циклом, а затем добавить поля в каждый цикл следующим образом:

bot.on('ready', () => {
var sendChannel = bot.channels.find(channel => channel.id === '553846848578912257')
setInterval(() =>{

    fs.readdir(folder, (err, files) => {
        // initialize the embed message here
        var embed = new Discord.RichEmbed();

        files.forEach(file => {
        });
        for(i = 0; i < files.length; i++){
            var input = require(folder+files[i]); 

            if(((new Date(input.releasedate) - currentdate) / days) > 0)
                {
                    embed.addField(input.eventName, Math.ceil((new Date(input.releasedate) - currentdate) / days) + ' days until ');
                }

            else 
            {
                console.log("arg not passed, invalid or past: "+input.eventName)
            }
        }
        sendChannel.send(embed);
    });
}, 10000);

console.log("Ready")
console.log(`Logged in as ${bot.user.tag} (${bot.user.id}) on ${bot.guilds.size} servers`);
bot.user.setActivity(`Counting things down | ${bot.guilds.size} servers`);
});
...