Как бы я перебирал массив с помощью .addField

#javascript #bots #discord #discord.js

#javascript #боты #Discord #discord.js

Вопрос:

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

 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:

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`);
});
  

Комментарии:

1. Большое вам спасибо, я не понимал, что синтаксис был embed.addField для объединения файлов. Затем вывод команды отправки и встраивания переменной из цикла сработал отлично!