From a2282e48c1988b90eda8e53a8bc63c627564ef23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=A4KayJayDee?= Date: Thu, 1 Jun 2023 19:31:12 +0200 Subject: [PATCH] Use V2 Crowdin API --- .env.example | 5 ++--- Events/ready.js | 50 ++++++++++++++++++++++++++++++++++--------------- index.js | 16 ++++++++++------ package.json | 7 ++++--- 4 files changed, 51 insertions(+), 27 deletions(-) diff --git a/.env.example b/.env.example index bbdc0e5..4e0d7a4 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,3 @@ TOKEN=YOUR_DISCORD_BOT_TOKEN_GOES_HERE -PROJECT=YOUR_PROJECT_NAME -LOGIN=YOUR_USERNAME -ACCOUNT_KEY=YOUR_ACCOUNT_API_KEY +PROJECT_ID=YOUR_PROJECT_ID_GOES_HERE +ACCESS_TOKEN=YOUR_ACCESS_TOKEN_GOES_HERE diff --git a/Events/ready.js b/Events/ready.js index 1f2fc44..60d03c4 100644 --- a/Events/ready.js +++ b/Events/ready.js @@ -1,14 +1,17 @@ -const Discord = require(`discord.js`); +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/project/${process.env.PROJECT}/status?login=${process.env.LOGIN}&account-key=${process.env.ACCOUNT_KEY}&json`; + 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); - return body; + 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!`); @@ -26,31 +29,48 @@ module.exports = async (bot) => { 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 MessageEmbed - let embed = new Discord.MessageEmbed() + // Creates a discord EmbedBuilder + let embed = new EmbedBuilder() .setDescription(`**Status of the languages**${link}`) - .setFooter(`Last edit ${new Date()}`); + .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) { - // Field data - embed.addField(`${languages.name} (${languages.code})`, `Translated Progress: ${languages.translated_progress}%\nApproved progress: ${languages.approved_progress}%\nSentences: ${languages.phrases}, Translated: ${languages.translated}, Approved: ${languages.approved}\nWords: ${languages.words}, Translated: ${languages.words_translated}, Approved: ${languages.words_approved}`); + 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(embed); + 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 Discord.MessageEmbed(); + + let embedEdit = new EmbedBuilder(); embedEdit.setDescription(`**Status of the languages**${link}`) - .setFooter(`Last edit ${new Date()}`); + .setFooter({ text: `Last edit ${new Date()}` }); let newData = await getData(); for (let languages of newData) { - // Field data - embedEdit.addField(`${languages.name} (${languages.code})`, `Translated Progress: ${languages.translated_progress}%\nApproved progress: ${languages.approved_progress}%\nSentences: ${languages.phrases}, Translated: ${languages.translated}, Approved: ${languages.approved}\nWords: ${languages.words}, Translated: ${languages.words_translated}, Approved: ${languages.words_approved}`); + 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(embedEdit); + message.edit({ embeds: [embedEdit] }); }, bot.config.editTime); }; \ No newline at end of file diff --git a/index.js b/index.js index fde83aa..3143213 100644 --- a/index.js +++ b/index.js @@ -1,7 +1,11 @@ -const Discord = require(`discord.js`); -const bot = new Discord.Client({ +const { Client, Collection, GatewayIntentBits } = require(`discord.js`); +const bot = new Client({ disableEveryone: true, - autoReconnect: true + autoReconnect: true, + intents: [ + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildMessages + ] }); const { promisify @@ -12,10 +16,10 @@ require(`dotenv`).config(); bot.login(process.env.TOKEN); bot.config = require(`./config.json`); -bot.commands = new Discord.Collection(); -bot.aliases = new Discord.Collection(); +bot.commands = new Collection(); +bot.aliases = new Collection(); -(async function() { +(async function () { const eventFiles = await readdir(`./Events/`); eventFiles.forEach(file => { const eventName = file.split(`.`)[0]; diff --git a/package.json b/package.json index c15772c..8fac713 100644 --- a/package.json +++ b/package.json @@ -17,8 +17,9 @@ }, "homepage": "https://github.com/Mr-KayJayDee/discord-crowdin-status#readme", "dependencies": { - "discord.js": "^12.5.1", - "dotenv": "^8.2.0", - "superagent": "^6.1.0" + "axios": "^1.4.0", + "discord.js": "^14.11.0", + "dotenv": "^16.1.3", + "superagent": "^8.0.9" } }