Lanbot_Translate/index.js
2022-01-04 02:41:57 +00:00

111 lines
3.2 KiB
JavaScript

const { Client, MessageEmbed } = require('discord.js');
const axios = require('axios');
const fs = require('fs');
const DEFAULT_LANG = 'FR';
const AUTH_FILE = './auth.json';
const auth_key = require("./auth.json");
const token = require("./auth.json");
const client = new Client();
client.once('ready', () => {
console.log('Ready!');
});
let activites = ['Prêt pour vos traductions, Créer par Lantium !'], i = 0;
setInterval(() => client.user.setPresence({ activity: { name: `${activites [i++ % activites.length]}`, type: 'PLAYING' }, status: 'online' }), 5000);
client.on('message', message => {
if (message.author.bot) return;
if (!message.channel.topic) return;
const translationConfig = message.channel.topic.trim().match(/deepl-translate\((.+)\)/);
if (!translationConfig) return;
const target_lang = translationConfig[1];
if (!target_lang) return;
post(message.content, target_lang)
.then(response => {
// if source text's language was same as target language, text was translated into default language.
if (response.data.translations.length === 1 &&
response.data.translations[0].detected_source_language === target_lang) {
post(message.content, DEFAULT_LANG)
.then(retry => {
send(message, [ { lang: DEFAULT_LANG, translations: retry.data.translations } ]);
})
// if souce text's language was neither target language nor default language
// add default language translation.
} else if (
response.data.translations[0].detected_source_language !== target_lang
&&
response.data.translations[0].detected_source_language !== DEFAULT_LANG) {
post(message.content, DEFAULT_LANG)
.then(retry => {
send(message,
[
{
lang: target_lang,
translations: response.data.translations
},
{
lang: DEFAULT_LANG,
translations: retry.data.translations
}
]);
})
// text was translated into target language.
} else {
send(message, [ { lang: target_lang, translations: response.data.translations } ]);
}
})
});
const post = (message, lang) => {
return axios.post('https://api.deepl.com/v2/translate?' +
'auth_key=' + auth_key +'&' +
'text=' + encodeURIComponent(message) + '&' +
'target_lang=' + lang)
}
const send = (message, translations) => {
const embed = new MessageEmbed()
.setAuthor(message.author.username, message.author.avatarURL())
.setColor(0xff0000)
.setDescription(
translations.map(t => {
let text = '`' + t.lang + ':` ' + t.translations[0].text;
if (t.translations.length > 1) {
text += ' (';
text += t.translations.slice(1).map(others =>
(others.detected_source_language + ': ' + others.text ))
.join(', ');
text += ')';
}
return text;
})
.join('\n'));
message.channel.send(embed);
}
if (fs.existsSync(AUTH_FILE)) {
console.log('auth: using auth file.');
var auth = require(AUTH_FILE);
token = auth.token;
auth_key = auth.auth_key;
} else {
console.log('auth: not found.');
process.exit(1);
}
if (process.env.KEEP_ALIVE_ENDPOINT) {
require('./heartbeat');
}
client.login(token);