# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀ # █▀█ █ █ █ █▀█ █▀▄ █ # © Copyright 2022 # https://t.me/hikariatama # # 🔒 Licensed under the GNU AGPLv3 # 🌐 https://www.gnu.org/licenses/agpl-3.0.html # meta pic: https://img.icons8.com/external-xnimrodx-lineal-color-xnimrodx/512/000000/external-translate-discussion-xnimrodx-lineal-color-xnimrodx.png # meta banner: https://mods.hikariatama.ru/badges/deepl.jpg # meta developer: @hikarimods # scope: hikka_only # scope: hikka_min 1.2.10 import logging import random import time import typing import requests from telethon.tl.types import Message from .. import loader, utils async def translate(text: str, target: str, proxy: dict) -> str: a = await utils.run_sync( requests.post, "https://www2.deepl.com/jsonrpc?method=LMT_handle_jobs", headers={ "User-Agent": ( "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML," " like Gecko) Chrome/92.0.4515.131 Safari/537.36" ), "Content-type": "application/json", "Accept": "*/*", "Sec-GPC": "1", "Origin": "https://www.deepl.com", "Sec-Fetch-Site": "same-site", "Sec-Fetch-Mode": "cors", "Sec-Fetch-Dest": "empty", "Referer": "https://www.deepl.com/", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "en-US,en;q=0.9,ru;q=0.8", }, json={ "jsonrpc": "2.0", "method": "LMT_handle_jobs", "params": { "jobs": [ { "kind": "default", "sentences": [{"text": text, "id": 0, "prefix": ""}], "raw_en_context_before": [], "raw_en_context_after": [], "preferred_num_beams": 4, "quality": "fast", } ], "lang": { "user_preferred_langs": ["EN", "DE", "RU"], "source_lang_user_selected": "auto", "target_lang": target.upper(), }, "priority": -1, "commonJobParams": { "regionalVariant": None, "browserType": 1, "formality": None, }, "timestamp": time.time() * 1000, }, "id": random.randint(1000000, 99999999), }, proxies=proxy, ) try: return a.json()["result"]["translations"][0]["beams"][0]["sentences"][0]["text"] except Exception: logger.error(a.text) try: return f"Error while translating: {a.json()['error']['message']}" except Exception: return "Error while translating" logger = logging.getLogger(__name__) @loader.tds class DeepLMod(loader.Module): """Translates text via DeepL scraping. Proxies are recommended""" strings = { "name": "DeepLScraper", "no_text": ( "🚫 No text specified" ), "translated": "🇺🇸 {}", } strings_ru = { "no_text": ( "🚫 Не указан текст" ), "translated": "🇺🇸 {}", "_cmd_doc_deepl": " - Перевести текст через DeepL", "_cls_doc": "Переводит текст через DeepL. Рекомендуется использовать прокси", } strings_de = { "no_text": ( "🚫 Kein Text" " angegeben" ), "translated": "🇺🇸 {}", "_cmd_doc_deepl": " - Übersetze Text über DeepL", "_cls_doc": ( "Übersetzt Text über DeepL. Es wird empfohlen, einen Proxy zu verwenden" ), } strings_uz = { "no_text": ( "🚫 Matn" " ko'rsatilmadi" ), "translated": "🇺🇸 {}", "_cmd_doc_deepl": " - DeepL orqali matnni tarjima qilish", "_cls_doc": ( "DeepL orqali matnni tarjima qilish. Proxydan foydalanish maslahat beriladi" ), } strings_hi = { "no_text": ( "🚫 कोई टेक्स्ट नहीं दिया" " गया" ), "translated": "🇺🇸 {}", "_cmd_doc_deepl": "<टेक्स्ट या उत्तर> - डीपएल के माध्यम से पाठ का अनुवाद करें", "_cls_doc": ( "डीपएल के माध्यम से पाठ का अनुवाद करता है। प्रॉक्सी का उपयोग करने की सलाह दी जाती है" ), } strings_tr = { "no_text": ( "🚫 Metin" " belirtilmedi" ), "translated": "🇺🇸 {}", "_cmd_doc_deepl": " - DeepL ile metni çevir", "_cls_doc": "DeepL ile metni çevirir. Proxy kullanmanız önerilir", } def __init__(self): self.config = loader.ModuleConfig( loader.ConfigValue("proxy", "", lambda: "Proxy url") ) async def deeplcmd(self, message: Message): """ - Translate text via DeepL scraping""" args = utils.get_args_raw(message) target = ( "en" if not args or "->" not in args else args[args.find("->") + 2 :][:2] ) args = args.replace(f"->{target}", "") reply = await message.get_reply_message() if not args and (not reply or not reply.raw_text): await utils.answer(message, self.strings("no_text")) return text = args or reply.raw_text await utils.answer( message, self.strings("translated").format( await translate(text, target, {"https": self.config["proxy"]}) ), )