mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-16 14:34:17 +02:00
138 lines
4.9 KiB
Python
138 lines
4.9 KiB
Python
"""
|
|
|
|
█▀▀ ▄▀█ █▄▀ █▀▀ █▀ ▀█▀ █░█░█ █ ▀▄▀
|
|
█▄▄ █▀█ █░█ ██▄ ▄█ ░█░ ▀▄▀▄▀ █ █░█
|
|
|
|
Copyleft 2022 t.me/CakesTwix
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
"""
|
|
|
|
__version__ = (2, 0, 0)
|
|
|
|
# meta pic: https://img.icons8.com/color/512/40C057/translate-text.png
|
|
# meta developer: @cakestwix_mods
|
|
# requires: translators
|
|
|
|
import logging
|
|
import aiohttp, asyncio
|
|
from .. import loader, utils
|
|
import translators as trl
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@loader.unrestricted
|
|
@loader.ratelimit
|
|
@loader.tds
|
|
class TranslatorMod(loader.Module):
|
|
"""
|
|
🔡 Module for text translation
|
|
➡️ .tr en ru | Hello World
|
|
➡️ .tr ru | Hello World
|
|
➡️ .tr ru + reply to message
|
|
"""
|
|
|
|
strings = {
|
|
"name": "🔡 Translator",
|
|
"cfg_lingva_url": "Alternative front-end for Google Translate",
|
|
"error": "Error!\n .gtr [en] ru | text or check help",
|
|
}
|
|
|
|
strings_ru = {
|
|
"cfg_lingva_url": "Альтернативный интерфейс для Google Translate",
|
|
"error": "Ошибка!\n .gtr [en] ru | текст или проверьте хелп",
|
|
}
|
|
|
|
def __init__(self):
|
|
self.config = loader.ModuleConfig(
|
|
"lingva_url",
|
|
"https://lingva.ml/api/v1/{source}/{target}/{query}",
|
|
lambda m: self.strings("cfg_lingva_url", m),
|
|
)
|
|
self.name = self.strings["name"]
|
|
|
|
async def tr(self, message, translator):
|
|
if args:= utils.get_args_raw(message):
|
|
lang_args = args.split("|")[0].split() # Lang
|
|
if reply := await message.get_reply_message():
|
|
if reply.message == '':
|
|
return await utils.answer(message, self.strings["error"])
|
|
if len(lang_args) == 2:
|
|
translated_text = translator(reply.message, from_language=lang_args[0], to_language=lang_args[1])
|
|
return await utils.answer(message, translated_text)
|
|
elif len(lang_args) == 1:
|
|
translated_text = translator(reply.message, to_language=lang_args[0])
|
|
return await utils.answer(message, translated_text)
|
|
else:
|
|
await utils.answer(message, self.strings["error"])
|
|
await asyncio.sleep(5)
|
|
await message.delete()
|
|
return
|
|
|
|
text_args = args.split("|")[1] # Text
|
|
if len(lang_args) == 2 and text_args:
|
|
translated_text = translator(text_args, from_language=lang_args[0], to_language=lang_args[1])
|
|
elif len(lang_args) == 1 and text_args:
|
|
translated_text = translator(text_args, to_language=lang_args[0])
|
|
else:
|
|
await utils.answer(message, self.strings["error"])
|
|
await asyncio.sleep(5)
|
|
await message.delete()
|
|
return
|
|
|
|
await utils.answer(message, translated_text)
|
|
else:
|
|
await utils.answer(message, self.strings["error"])
|
|
await asyncio.sleep(5)
|
|
await message.delete()
|
|
|
|
async def atrcmd(self, message):
|
|
"""
|
|
Based on Argos (LibreTranslate)
|
|
"""
|
|
await self.tr(message, trl.argos)
|
|
|
|
async def itrcmd(self, message):
|
|
"""
|
|
Based on Iciba
|
|
"""
|
|
await self.tr(message, trl.iciba)
|
|
|
|
async def gtrcmd(self, message):
|
|
"""
|
|
Based on Google Translate
|
|
"""
|
|
await self.tr(message, trl.google)
|
|
|
|
async def ltrcmd(self, message):
|
|
"""
|
|
Based on lingva.ml (Google Translate)
|
|
"""
|
|
if args:= utils.get_args_raw(message):
|
|
lang_args = args.split("|")[0].split() # Lang
|
|
text_args = args.split("|")[1] # Text
|
|
if len(lang_args) == 2 and text_args:
|
|
url = self.config["lingva_url"].format(
|
|
source=lang_args[0], target=lang_args[1], query=text_args
|
|
)
|
|
elif len(lang_args) == 1 and text_args:
|
|
url = self.config["lingva_url"].format(
|
|
source="auto", target=lang_args[0], query=text_args
|
|
)
|
|
else:
|
|
await utils.answer(message, self.strings["error"])
|
|
await asyncio.sleep(5)
|
|
await message.delete()
|
|
return
|
|
|
|
async with aiohttp.ClientSession() as session:
|
|
async with session.get(url) as get:
|
|
translated_text = await get.json()
|
|
await session.close()
|
|
|
|
await utils.answer(message, translated_text["translation"])
|
|
else:
|
|
await utils.answer(message, self.strings["error"])
|
|
await asyncio.sleep(5)
|
|
await message.delete()
|