You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
3.3 KiB
JavaScript

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