From fa19ad9c68582fa0e7361589369877644767cbf5 Mon Sep 17 00:00:00 2001 From: loicbersier Date: Sun, 29 Dec 2019 23:15:16 +0100 Subject: [PATCH] use yandex dictionary --- commands/utility/translate.js | 61 ++++++++++++++++++++++++++++------- 1 file changed, 49 insertions(+), 12 deletions(-) diff --git a/commands/utility/translate.js b/commands/utility/translate.js index 21d43a0c..d6b94bd9 100644 --- a/commands/utility/translate.js +++ b/commands/utility/translate.js @@ -1,6 +1,6 @@ const { Command } = require('discord-akairo'); const fetch = require('node-fetch'); -const { yandexAPI } = require('../../config.json'); +const { yandexTRN, yandexDICT } = require('../../config.json'); class TranslationCommand extends Command { constructor() { @@ -40,7 +40,7 @@ class TranslationCommand extends Command { let text = args.text; let textURI = encodeURI(text); - fetch(`https://translate.yandex.net/api/v1.5/tr.json/translate?key=${yandexAPI}&text=${textURI}&lang=${language}&options=1`, { + fetch(`https://translate.yandex.net/api/v1.5/tr.json/translate?key=${yandexTRN}&text=${textURI}&lang=${language}&options=1`, { }).then((response) => { return response.json(); }).then((response) => { @@ -48,19 +48,56 @@ class TranslationCommand extends Command { return message.channel.send(`${response.message}, you probably didn't input the correct language code, you can check them here! https://tech.yandex.com/translate/doc/dg/concepts/api-overview-docpage/`); else if (response.code != '200') return message.channel.send('An error has occured'); + let description = response.text[0]; + let lang = response.detected.lang; + // Lookup in yandex dictionary the translated word and find other word for it + fetch(`https://dictionary.yandex.net/api/v1/dicservice.json/lookup?key=${yandexDICT}&lang=${language}-${language}&text=${encodeURI(response.text[0])}`, { + }).then((response) => { + return response.json(); + }).then((response) => { + console.log(response); + if (response.code == '501') return message.channel.send(response.message); + // If it didn't find anything in the dictionary simply send the translation + if (response.def.length == 0) { + const translationEmbed = this.client.util.embed() + .setColor(message.member.displayHexColor) + .setTitle('Asked for the following translation:') + .setURL('https://tech.yandex.com/dictionary/') + .setAuthor(message.author.username) + .addField('Translated text', description) + .addField('Translated from', lang) + .setTimestamp() + .setFooter('Powered by Yandex.Translate'); - const translationEmbed = this.client.util.embed() - .setColor(message.member.displayHexColor) - .setTitle('Asked for the following translation:') - .setAuthor(message.author.username) - .setDescription(response.text[0]) - .addField('Original text', text) - .addField('Translated from', response.detected.lang) - .setTimestamp() - .setFooter('Powered by Yandex.Translate '); + return message.channel.send(translationEmbed); + } + + let dict = ''; + + if (response.def[0].ts == undefined) + description = `${response.def[0].pos} - ${response.def[0].text}`; + else + description = `${response.def[0].pos} - ${response.def[0].text} - [${response.def[0].ts}]`; + + for (let i = 0; i < response.def[0].tr.length; i++ ) { + dict += `\n${response.def[0].tr[i].pos} - ${response.def[0].tr[i].text} `; + } + + const translationEmbed = this.client.util.embed() + .setColor(message.member.displayHexColor) + .setTitle('Asked for the following translation:') + .setURL('https://tech.yandex.com/dictionary/') + .setAuthor(message.author.username) + .addField('Translated text', description) + .addField('Dictionary', dict) + .addField('Translated from', lang) + .setTimestamp() + .setFooter('Powered by Yandex.Translate & Yandex.Dictionary'); + + return message.channel.send(translationEmbed); + }); - message.channel.send(translationEmbed); }); } }