const { EmbedBuilder } = require(`discord.js`); module.exports = async (bot) => { async function getData() { // Require https module const superagent = require(`superagent`); // Request url let url = `https://api.crowdin.com/api/v2/projects/${process.env.PROJECT_ID}/languages/progress`; // Get the url and store the informations let { body } = await superagent.get(url).set(`Authorization`, `Bearer ${process.env.ACCESS_TOKEN}`); // Return the body return body.data; } // Log when the bot is on console.log(`${bot.user.username} en ligne!`); // Find the status channel let channel = bot.channels.cache.find(c => c.id === bot.config.channel); // Returns an error if the channel is not configured of invalid in the config file if (!channel) return console.log(`You need to set a valid channel in the configuration file (config.json)`); // Fetch all the messages of the status channel await channel.messages.fetch(); // Check wether to purge or not the channel on start let amountToPurge = bot.config.purgeAmount; // Check if the amount of messages to delete is valid in the config file if (isNaN(amountToPurge) || parseInt(amountToPurge) < 1 || parseInt(amountToPurge) > 100) return console.log(`You need to set a valid amount of messages to purge (beetween 1 and 100) in the configuration file (config.json)`); // If purgeOnRestart is set to true in the config bulkDelete the channel if (bot.config.purgeOnRestart) channel.bulkDelete(amountToPurge); // Display or not the project link let link = bot.config.displayLink ? `\nYou can help translating by following [this](${bot.config.projectLink}) link.` : ``; // Creates a discord EmbedBuilder let embed = new EmbedBuilder() .setDescription(`**Status of the languages**${link}`) .setFooter({ text: `Last edit ${new Date()}` }); // Get the data with the getData() function let data = await getData(); // For every object in the body array add a field to the embed for (let languages of data) { let data = languages.data; embed.addFields([ { name: `${data.languageId}`, value: `Translated Progress: ${data.translationProgress}% Approved progress: ${data.approvalProgress}% Sentences: ${data.phrases.total}, Translated: ${data.phrases.translated}, Approved: ${data.phrases.approved} Words: ${data.words.total}, Translated: ${data.words.translated}, Approved: ${data.words.approved}` } ]) } // Send the message let message = await channel.send({ embeds: [embed] }); // Check if the edit time is valid in the config file if (isNaN(bot.config.editTime)) return console.log(`You need to set a valid edit time in the configuration file (config.json)`); setInterval(async () => { let embedEdit = new EmbedBuilder(); embedEdit.setDescription(`**Status of the languages**${link}`) .setFooter({ text: `Last edit ${new Date()}` }); let newData = await getData(); for (let languages of newData) { let data = languages.data; embedEdit.addFields([ { name: `${data.languageId}`, value: `Translated Progress: ${data.translationProgress}% Approved progress: ${data.approvalProgress}% Sentences: ${data.phrases.total}, Translated: ${data.phrases.translated}, Approved: ${data.phrases.approved} Words: ${data.words.total}, Translated: ${data.words.translated}, Approved: ${data.words.approved}` } ]) } message.edit({ embeds: [embedEdit] }); }, bot.config.editTime); };