# ÂŠī¸ Dan Gazizullin, 2021-2023 # This file is a part of Hikka Userbot # 🌐 https://github.com/hikariatama/Hikka # You can redistribute it and/or modify it under the terms of the GNU AGPLv3 # 🔑 https://www.gnu.org/licenses/agpl-3.0.html import logging from hikkatl.tl.types import Message from .. import loader, translations, utils from ..inline.types import InlineCall logger = logging.getLogger(__name__) @loader.tds class Translations(loader.Module): """Processes internal translations""" strings = {"name": "Translations"} async def _change_language(self, call: InlineCall, lang: str): self._db.set(translations.__name__, "lang", lang) await self.allmodules.reload_translations() await call.edit(self.strings("lang_saved").format(self._get_flag(lang))) def _get_flag(self, lang: str) -> str: emoji_flags = { "đŸ‡Ŧ🇧": "đŸ‡Ŧ🇧", "đŸ‡ēđŸ‡ŋ": "đŸ‡ēđŸ‡ŋ", "🇷đŸ‡ē": "🇷đŸ‡ē", "đŸ‡ēđŸ‡Ļ": "đŸ‡ēđŸ‡Ļ", "🇮🇹": "🇮🇹", "🇩đŸ‡Ē": "🇩đŸ‡Ē", "đŸ‡Ē🇸": "đŸ‡Ē🇸", "🇹🇷": "🇹🇷", "🇰đŸ‡ŋ": "🇰đŸ‡ŋ", "đŸĨŸ": "đŸĨŸ", } lang2country = {"en": "đŸ‡Ŧ🇧", "tt": "đŸĨŸ", "kk": "🇰đŸ‡ŋ", "ua": "đŸ‡ēđŸ‡Ļ", "de": "🇩đŸ‡Ē"} lang = lang2country.get(lang) or utils.get_lang_flag(lang) return emoji_flags.get(lang, lang) @loader.command() async def setlang(self, message: Message): if not (args := utils.get_args_raw(message)): await self.inline.form( message=message, text=self.strings("choose_language"), reply_markup=utils.chunks( [ { "text": text, "callback": self._change_language, "args": (lang,), } for lang, text in translations.SUPPORTED_LANGUAGES.items() ], 2, ), ) return if any(len(i) != 2 and not utils.check_url(i) for i in args.split()): await utils.answer(message, self.strings("incorrect_language")) return seen = set() seen_add = seen.add args = " ".join(x for x in args.split() if not (x in seen or seen_add(x))) self._db.set(translations.__name__, "lang", args) await self.allmodules.reload_translations() await utils.answer( message, self.strings("lang_saved").format( "".join( [ ( self._get_flag(lang) if not utils.check_url(lang) else "📁" ) for lang in args.split() ] ) ) + ( ("\n\n" + self.strings("not_official")) if any( lang not in translations.SUPPORTED_LANGUAGES for lang in args.split() ) else "" ), ) @loader.command() async def dllangpackcmd(self, message: Message): if not (args := utils.get_args_raw(message)) or not utils.check_url(args): await utils.answer(message, self.strings("check_url")) return current_lang = ( " ".join( lang for lang in self._db.get(translations.__name__, "lang", None).split() if not utils.check_url(lang) ) if self._db.get(translations.__name__, "lang", None) else None ) self._db.set( translations.__name__, "lang", f"{current_lang} {args}" if current_lang else args, ) await utils.answer( message, self.strings( "pack_saved" if await self.allmodules.reload_translations() else "check_pack" ), )