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 ? ` \n You 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 ) ;
} ;