__version__ = (0, 0, 72)
# ▄▀█ █▄ █ █▀█ █▄ █ █▀█ ▀▀█ █▀█ █ █ █▀
# █▀█ █ ▀█ █▄█ █ ▀█ ▀▀█ █ ▀▀█ ▀▀█ ▄█
#
# © Copyright 2024
#
# developed by @anon97945
#
# https://t.me/apodiktum_modules
# https://github.com/anon97945
#
# 🔒 Licensed under the GNU GPLv3
# 🌐 https://www.gnu.org/licenses/gpl-3.0.html
# meta developer: @apodiktum_modules
# meta banner: https://t.me/apodiktum_dumpster/11
# meta pic: https://t.me/apodiktum_dumpster/13
# scope: hikka_only
# scope: hikka_min 1.3.3
# requires: googletrans==4.0.0-rc1
import logging
import googletrans
from telethon.tl.types import Message
from .. import loader, utils
if googletrans.__version__ != "4.0.0-rc.1":
raise ImportError( # This will force Hikka to attempt dependency re-installation
f"The googletrans version is {googletrans.__version__}, not"
' "4.0.0-rc.1".It means the module cannot run properly. To fix this,'
" reinstall googletrans==4.0.0-rc1..terminal pip install"
" googletrans==4.0.0-rc1"
)
logger = logging.getLogger(__name__)
@loader.tds
class ApodiktumGTranslateMod(loader.Module):
"""
Google Translator
"""
strings = {
"name": "Apo-GoogleTranslator",
"developer": "@anon97945",
"_cfg_cst_auto_migrate": "Wheather to auto migrate defined changes on startup.",
"_cfg_lang_msg": "Language to translate to by default.",
"_cfg_vodkatr_msg": "If `RU` should be displayed as `Vodka`.",
"invalid_text": "Invalid text to translate",
"split_error": (
"Python split() error, if there is -> in the text, it must split!"
),
"translated": (
"[ {frlang} -> {to}"
" ]\n{output}"
),
"translating": "Translating...",
}
strings_en = {}
strings_de = {
"_cfg_lang_msg": "Sprache, in die standardmäßig übersetzt werden soll.",
"_cfg_vodkatr_msg": "Ob `RU` als `Vodka` angezeigt werden soll.",
"_cmd_doc_cgtranslate": (
"Dadurch wird die Konfiguration für das Modul geöffnet."
),
"invalid_text": "Ungültiger Text zum Übersetzen.",
"split_error": (
"Python split() error, wenn -> im Text steht, muss es gesplittet werden!"
),
"translated": (
"[ {frlang} -> {to}"
" ]\n{output}"
),
"translating": "Übersetze...",
}
strings_ru = {
"_cfg_lang_msg": "Язык на который переводится по умолчанию.",
"_cfg_vodkatr_msg": "Если `RU`, то должно отображаться как `Vodka`.",
"_cmd_doc_cgtranslate": "Это откроет конфиг для модуля.",
"invalid_text": "Неправильный текст для перевода",
"split_error": (
"Ошибка в функции Python – split(). Если в тексте есть ->, то это"
" должно быть разделено."
),
"translated": (
"[ {frlang} -> {to}"
" ]\n{output}"
),
"translating": "Переводим...",
}
all_strings = {
"strings": strings,
"strings_en": strings,
"strings_de": strings_de,
"strings_ru": strings_ru,
}
changes = {
"migration1": {
"name": {
"old": "Apo GoogleTranslator",
"new": "Apo-GoogleTranslator",
},
},
}
def __init__(self):
self._ratelimit = []
self.config = loader.ModuleConfig(
loader.ConfigValue(
"DEFAULT_LANG",
"en",
doc=lambda: self.strings("_cfg_lang_msg"),
validator=loader.validators.String(length=2),
),
loader.ConfigValue(
"vodka_easteregg",
False,
doc=lambda: self.strings("_cfg_vodkatr_msg"),
validator=loader.validators.Boolean(),
),
loader.ConfigValue(
"auto_migrate",
True,
doc=lambda: self.strings("_cfg_cst_auto_migrate"),
validator=loader.validators.Boolean(),
), # for MigratorClass
)
async def client_ready(self):
self.apo_lib = await self.import_lib(
"https://raw.githubusercontent.com/anon97945/hikka-libs/master/apodiktum_library.py",
suspend_on_error=True,
)
self.tr = googletrans.Translator()
async def cgtranslatecmd(self, message: Message):
"""
This will open the config for the module.
"""
name = self.strings("name")
await self.allmodules.commands["config"](
await utils.answer(message, f"{self.get_prefix()}config {name}")
)
async def gtranslatecmd(self, message: Message):
""".gtranslate [from_lang->][->to_lang] """
args = utils.get_args(message)
if len(args) == 0 or "->" not in args[0]:
text = " ".join(args)
args = ["", self.config["DEFAULT_LANG"]]
else:
text = " ".join(args[1:])
args = args[0].split("->")
if not text and message.is_reply:
text = (await message.get_reply_message()).message
if len(text) == 0:
await utils.answer(
message,
self.apo_lib.utils.get_str("invalid_text", self.all_strings, message),
)
return
if args[0] == "":
args[0] = (await utils.run_sync(self.tr.detect, text)).lang
if len(args) == 3:
del args[1]
if len(args) == 1:
logging.error(self.strings("split_error"))
raise RuntimeError()
if args[1] == "":
args[1] = self.config["DEFAULT_LANG"]
args[0] = args[0].lower()
await utils.answer(
message,
self.apo_lib.utils.get_str("translating", self.all_strings, message),
)
translated = (
await utils.run_sync(self.tr.translate, text, dest=args[1], src=args[0])
).text
ret = self.apo_lib.utils.get_str("translated", self.all_strings, message)
if self.config["vodka_easteregg"]:
args = list(map(lambda x: x.replace("ru", "vodka"), args))
ret = ret.format(
text=utils.escape_html(text),
frlang=utils.escape_html(args[0]),
to=utils.escape_html(args[1]),
output=utils.escape_html(translated),
)
await utils.answer(message, ret)