"""
_
__ _____ ___ ___ ___ __| | ___ _ __
\ \ / / __|/ _ \/ __/ _ \ / _` |/ _ \ '__|
\ V /\__ \ __/ (_| (_) | (_| | __/ |
\_/ |___/\___|\___\___/ \__,_|\___|_|
Copyleft 2022 t.me/vsecoder
This program is free software; you can redistribute it and/or modify
"""
# meta developer: @vsecoder_m
# meta pic: https://img.icons8.com/external-vitaliy-gorbachev-lineal-color-vitaly-gorbachev/344/external-translate-online-learning-vitaliy-gorbachev-lineal-color-vitaly-gorbachev.png
# meta banner: https://chojuu.vercel.app/api/banner?img=https://img.icons8.com/external-vitaliy-gorbachev-lineal-color-vitaly-gorbachev/344/external-translate-online-learning-vitaliy-gorbachev-lineal-color-vitaly-gorbachev.png&title=VsecoderTranlate&description=Telegram%20Translate%20Bot
__version__ = (2, 2, 1)
import logging
import translators as vt # type: ignore
from .. import loader, utils # type: ignore
logger = logging.getLogger(__name__)
@loader.tds
class VseTranslateMod(loader.Module):
"""Traslate text"""
strings = {
"name": "💠 Vsecoder Translate",
"invalid_args": "📥 Invalid arguments!",
"answer": (
"💠 {} from:[{}]"
" to:[{}]\n\n{}"
),
"error": "📥 Error!",
}
strings_ru = {
"invalid_args": "📥 Неправильные аргументы!",
"answer": (
"💠 {} с:[{}] на:[{}]\n\n{}"
),
"error": "📥 Ошибка!",
}
def __init__(self):
self.config = loader.ModuleConfig(
loader.ConfigValue(
"default_lang",
"ru",
"Which language to translate by default",
validator=loader.validators.Choice(
["ru", "en", "de", "fr", "es", "it", "pt", "ja", "zh", "ko"]
),
),
loader.ConfigValue(
"default_translator",
"google",
"Which translator to use by default",
validator=loader.validators.Choice(
["google", "yandex", "bing", "iciba"]
),
),
)
async def client_ready(self, client, _):
self._client = client
async def translate(
self,
text: str,
lang_from: str = "auto",
lang_to: str = "ru",
translator: str = "google",
) -> dict:
translators = {
"google": vt.google,
"yandex": vt.yandex,
"bing": vt.bing,
"iciba": vt.iciba,
}
if translator not in translators:
return {"error": self.strings["invalid_translator"]}
translater = translators[translator]
return {
"translator": translator,
"from": lang_from,
"to": lang_to,
"text": translater(text, from_language=lang_from, to_language=lang_to),
}
async def vsetranslatecmd(self, message):
"""
[from_language] [to_language] [text]
.vsetranslate en ru Hello, world!
"""
args = utils.get_args(message)
langs = ["auto", "ru", "en", "de", "fr", "es", "it", "pt", "ja", "zh", "ko"]
translators = ["google", "yandex", "bing", "iciba"]
text = message.text.replace(f"{self.get_prefix()}vsetranslate", "")
t = ""
if not args:
return await utils.answer(message, self.strings["invalid_args"])
if args[0] not in langs: # .vsetranslate text
t = await self.translate(
text,
translator=self.config["default_translator"],
lang_to=self.config["default_lang"],
)
elif args[1] not in langs: # .vsetranslate from_language text
text = message.text.replace(
f"{self.get_prefix()}vsetranslate {args[0]}", ""
)
t = await self.translate(
text,
translator=self.config["default_translator"],
lang_to=self.config["default_lang"],
lang_from=args[0],
)
elif args[2] not in translators: # .vsetranslate from_language to_language text
text = message.text.replace(
f"{self.get_prefix()}vsetranslate {args[0]} {args[1]}", ""
)
t = await self.translate(
text,
translator=self.config["default_translator"],
lang_to=args[1],
lang_from=args[0],
)
else: # .vsetranslate from_language to_language translator text
text = message.text.replace(
f"{self.get_prefix()}vsetranslate {args[0]} {args[1]} {args[2]}", ""
)
t = await self.translate(
text,
translator=args[2],
lang_to=args[1],
lang_from=args[0],
)
try:
await utils.answer(
message,
self.strings["answer"].format(
t["translator"],
t["from"],
t["to"],
t["text"],
),
)
except Exception:
await utils.answer(message, self.strings["error"])