mirror of
https://github.com/MuRuLOSE/limoka.git
synced 2026-06-16 14:34:17 +02:00
154 lines
5.3 KiB
Python
154 lines
5.3 KiB
Python
"""
|
||
_
|
||
__ _____ ___ ___ ___ __| | ___ _ __
|
||
\ \ / / __|/ _ \/ __/ _ \ / _` |/ _ \ '__|
|
||
\ 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": (
|
||
"💠 <b>{}</b> <i>from:</i><b>[{}]</b>"
|
||
" <i>to:</i><b>[{}]</b>\n\n<code>{}</code>"
|
||
),
|
||
"error": "📥 Error!",
|
||
}
|
||
|
||
strings_ru = {
|
||
"invalid_args": "📥 Неправильные аргументы!",
|
||
"answer": (
|
||
"💠 <b>{}</b> <i>с:</i><b>[{}]</b> <i>на:</i><b>[{}]</b>\n\n<code>{}</code>"
|
||
),
|
||
"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"])
|