UNPKG

telebot

Version:

The easy way to write Telegram bots.

242 lines (218 loc) 5.47 kB
var querystring = require('querystring'); var got = require('got'); var safeEval = require('safe-eval'); translate.suffix = 'com'; var languages = { 'auto': 'Automatic', 'af': 'Afrikaans', 'sq': 'Albanian', 'am': 'Amharic', 'ar': 'Arabic', 'hy': 'Armenian', 'az': 'Azerbaijani', 'eu': 'Basque', 'be': 'Belarusian', 'bn': 'Bengali', 'bs': 'Bosnian', 'bg': 'Bulgarian', 'ca': 'Catalan', 'ceb': 'Cebuano', 'ny': 'Chichewa', 'zh-cn': 'Chinese Simplified', 'zh-tw': 'Chinese Traditional', 'co': 'Corsican', 'hr': 'Croatian', 'cs': 'Czech', 'da': 'Danish', 'nl': 'Dutch', 'en': 'English', 'eo': 'Esperanto', 'et': 'Estonian', 'tl': 'Filipino', 'fi': 'Finnish', 'fr': 'French', 'fy': 'Frisian', 'gl': 'Galician', 'ka': 'Georgian', 'de': 'German', 'el': 'Greek', 'gu': 'Gujarati', 'ht': 'Haitian Creole', 'ha': 'Hausa', 'haw': 'Hawaiian', 'iw': 'Hebrew', 'hi': 'Hindi', 'hmn': 'Hmong', 'hu': 'Hungarian', 'is': 'Icelandic', 'ig': 'Igbo', 'id': 'Indonesian', 'ga': 'Irish', 'it': 'Italian', 'ja': 'Japanese', 'jw': 'Javanese', 'kn': 'Kannada', 'kk': 'Kazakh', 'km': 'Khmer', 'ko': 'Korean', 'ku': 'Kurdish (Kurmanji)', 'ky': 'Kyrgyz', 'lo': 'Lao', 'la': 'Latin', 'lv': 'Latvian', 'lt': 'Lithuanian', 'lb': 'Luxembourgish', 'mk': 'Macedonian', 'mg': 'Malagasy', 'ms': 'Malay', 'ml': 'Malayalam', 'mt': 'Maltese', 'mi': 'Maori', 'mr': 'Marathi', 'mn': 'Mongolian', 'my': 'Myanmar (Burmese)', 'ne': 'Nepali', 'no': 'Norwegian', 'ps': 'Pashto', 'fa': 'Persian', 'pl': 'Polish', 'pt': 'Portuguese', 'ma': 'Punjabi', 'ro': 'Romanian', 'ru': 'Russian', 'sm': 'Samoan', 'gd': 'Scots Gaelic', 'sr': 'Serbian', 'st': 'Sesotho', 'sn': 'Shona', 'sd': 'Sindhi', 'si': 'Sinhala', 'sk': 'Slovak', 'sl': 'Slovenian', 'so': 'Somali', 'es': 'Spanish', 'su': 'Sundanese', 'sw': 'Swahili', 'sv': 'Swedish', 'tg': 'Tajik', 'ta': 'Tamil', 'te': 'Telugu', 'th': 'Thai', 'tr': 'Turkish', 'uk': 'Ukrainian', 'ur': 'Urdu', 'uz': 'Uzbek', 'vi': 'Vietnamese', 'cy': 'Welsh', 'xh': 'Xhosa', 'yi': 'Yiddish', 'yo': 'Yoruba', 'zu': 'Zulu' }; function getCode(desiredLang) { if (!desiredLang) { return false; } desiredLang = desiredLang.toLowerCase(); if (languages[desiredLang]) { return desiredLang; } var keys = Object.keys(languages).filter(function (key) { if (typeof languages[key] !== 'string') { return false; } return languages[key].toLowerCase() === desiredLang; }); return keys[0] || false; } function isSupported(desiredLang) { return Boolean(getCode(desiredLang)); } function translate(text, opts) { opts = opts || {}; var e; [opts.from, opts.to].forEach(function (lang) { if (lang && !isSupported(lang)) { e = new Error(); e.code = 400; e.message = 'The language \'' + lang + '\' is not supported'; } }); if (e) { return new Promise(function (resolve, reject) { reject(e); }); } opts.from = opts.from || 'auto'; opts.to = opts.to || 'en'; opts.from = getCode(opts.from); opts.to = getCode(opts.to); var url = 'https://translate.google.' + translate.suffix + '/translate_a/single'; var data = { client: 'gtx', sl: opts.from, tl: opts.to, hl: opts.to, dt: ['at', 'bd', 'ex', 'ld', 'md', 'qca', 'rw', 'rm', 'ss', 't'], ie: 'UTF-8', oe: 'UTF-8', otf: 1, ssel: 0, tsel: 0, kc: 7 }; url = url + '?' + querystring.stringify(data); return got(url, { 'method': 'POST', 'body': { q: text } }).then(function (res) { var result = { text: '', from: { language: { didYouMean: false, iso: '' }, text: { autoCorrected: false, value: '', didYouMean: false } }, raw: '' }; if (opts.raw) { result.raw = res.body; } var body = safeEval(res.body); body[0].forEach(function (obj) { if (obj[0]) { result.text += obj[0]; } }); if (body[2] === body[8][0][0]) { result.from.language.iso = body[2]; } else { result.from.language.didYouMean = true; result.from.language.iso = body[8][0][0]; } if (body[7] && body[7][0]) { var str = body[7][0]; str = str.replace(/<b><i>/g, '['); str = str.replace(/<\/i><\/b>/g, ']'); result.from.text.value = str; if (body[7][5] === true) { result.from.text.autoCorrected = true; } else { result.from.text.didYouMean = true; } } return result; }).catch(function (err) { throw err; }); } module.exports = translate; module.exports.languages = languages;