# ©️ 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__) SUPPORTED_LANGUAGES = { "en": "🇬🇧 English", "ru": "🇷🇺 Русский", "fr": "🇫🇷 Français", "it": "🇮🇹 Italiano", "de": "🇩🇪 Deutsch", "tr": "🇹🇷 Türkçe", "uz": "🇺🇿 O'zbekcha", "es": "🇪🇸 Español", "kk": "🇰🇿 Қазақша", "tt": "🥟 Татарча", } @loader.tds class Translations(loader.Module): """Processes internal translations""" strings = { "name": "Translations", "lang_saved": "{} Language saved!", "pack_saved": ( "👍 Translate pack" " saved!" ), "incorrect_language": ( "🚫 Incorrect language" " specified" ), "lang_removed": ( "👍 Translations reset" " to default ones" ), "check_pack": ( "🚫 Invalid pack format" " in url" ), "check_url": ( "🚫 You need to specify" " valid url containing a langpack" ), "too_long": ( "📁 Command output seems" " to be too long, so it's sent in file." ), "opening_form": " Opening form...", "opening_gallery": " Opening gallery...", "opening_list": " Opening list...", "inline403": ( "🚫 You can't send inline" " units in this chat" ), "invoke_failed": "🚫 Unit invoke failed! More info in logs", "show_inline_cmds": "📄 Show all available inline commands", "no_inline_cmds": "You have no available commands", "no_inline_cmds_msg": ( "😔 There are no available inline commands or you lack access to them" ), "inline_cmds": "ℹ️ You have {} available command(-s)", "inline_cmds_msg": "ℹ️ Available inline commands:\n\n{}", "run_command": "🏌️ Run command", "command_msg": "🌘 Command «{}»\n\n{}", "command": "🌘 Command «{}»", "button403": "You are not allowed to press this button!", "keep_id": "⚠️ Do not remove ID! {}", "choose_language": "🗽 Choose language", "not_official": ( "⚠️ This language is not" " officially supported" ), "requested_join": ( "💫 Module {} requested to join channel {}\n\n❓ Reason: {}" ), "fw_error": ( "🕒 Call" " {} caused FloodWait of {} on method" " {}" ), "rpc_error": ( "🚫 Call" " {} failed due to RPC error:" " {}" ), } strings_ru = { "lang_saved": "{} Язык сохранён!", "pack_saved": ( "👍 Пакет переводов" " сохранён!" ), "incorrect_language": ( "🚫 Указан неверный" " язык" ), "lang_removed": ( "👍 Переводы сброшены" " на стандартные" ), "check_pack": ( "🚫 Неверный формат" " пакета переводов в ссылке" ), "check_url": ( "🚫 Вы должны указать" " ссылку, содержащую пакет переводов" ), "too_long": ( "📁 Вывод команды слишком" " длинный, поэтому он отправлен в файле." ), "opening_form": " Открываю форму...", "opening_gallery": " Открываю галерею...", "opening_list": " Открываю список...", "inline403": ( "🚫 Вы не можете" " отправлять встроенные элементы в этом чате" ), "invoke_failed": "🚫 Вызов модуля не удался! Подробнее в логах", "show_inline_cmds": "📄 Показать все доступные встроенные команды", "no_inline_cmds": "У вас нет доступных inline команд", "no_inline_cmds_msg": ( "😔 Нет доступных inline команд или у вас нет доступа к ним" ), "inline_cmds": "ℹ️ У вас {} доступная(-ых) команда(-ы)", "inline_cmds_msg": "ℹ️ Доступные inline команды:\n\n{}", "run_command": "🏌️ Выполнить команду", "command_msg": "🌘 Команда «{}»\n\n{}", "command": "🌘 Команда «{}»", "button403": "Вы не можете нажать на эту кнопку!", "keep_id": "⚠️ Не удаляйте ID! {}", "choose_language": "🗽 Выберите язык", "not_official": ( "⚠️ Этот язык не" " поддерживается официально" ), "requested_join": ( "💫 Модуль {} запросил присоединение к каналу {}\n\n❓ Причина: {}" ), "fw_error": ( "🕒 Команда" " {} вызвал FloodWait {} в методе {}" ), "rpc_error": ( "🚫 Команда" " {} не удалась из-за ошибки RPC:" " {}" ), } strings_fr = { "lang_saved": "{} Langue enregistrée!", "pack_saved": ( "👍 Paquet de traduction" " enregistré!" ), "incorrect_language": ( "🚫 Langue incorrecte" ), "lang_removed": ( "👍 Traductions" " réinitialisées à celles par défaut" ), "check_pack": ( "🚫 Format de paquet de" " traduction invalide dans le lien" ), "check_url": ( "🚫 Vous devez fournir un" " lien contenant un paquet de traduction" ), "too_long": ( "📁 La sortie de la" " commande est trop longue, donc elle a été envoyée dans un fichier." ), "opening_form": " Ouverture du formulaire...", "opening_gallery": " Ouverture de la galerie...", "opening_list": " Ouverture de la liste...", "inline403": ( "🚫 Vous ne pouvez pas" " envoyer d'éléments intégrés dans ce chat" ), "invoke_failed": ( "🚫 L'appel du module a échoué! Voir les journaux pour plus de" " détails" ), "show_inline_cmds": "📄 Afficher toutes les commandes intégrées disponibles", "no_inline_cmds": "Vous n'avez aucune commande inline disponible", "no_inline_cmds_msg": ( "😔 Vous n'avez aucune commande inline disponible ou vous n'avez pas" " accès à celles-ci" ), "inline_cmds": "ℹ️ Vous avez {} commande disponible", "inline_cmds_msg": "ℹ️ Commandes inline disponibles:\n\n{}", "run_command": "🏌️ Exécuter la commande", "command_msg": "🌘 Commande «{}»\n\n{}", "command": "🌘 Commande «{}»", "button403": "Vous ne pouvez pas appuyer sur ce bouton!", "keep_id": "⚠️ Ne supprimez pas l'ID! {}", "choose_language": "🗽 Choisissez la langue", "not_official": ( "⚠️ Cette langue n'est" " pas officiellement prise en charge" ), "requested_join": ( "💫 Le module {} a demandé à rejoindre le canal {}\n\n❓ Raison: {}" ), "fw_error": ( "🕒 La commande" " {} a provoqué un FloodWait {} dans la méthode " " {}" ), "rpc_error": ( "🚫 La commande" " {} ne s'est pas déroulée en raison d'une erreur RPC:" " {}" ), } strings_it = { "lang_saved": "{} Lingua salvata!", "pack_saved": ( "👍 Pacchetto di" " traduzione salvato!" ), "incorrect_language": ( "🚫 Lingua specificata" " non corretta" ), "lang_removed": ( "👍 Traduzioni" " ripristinate" ), "check_pack": ( "🚫 Formato pacchetto di" " traduzione specificato errato" ), "check_url": ( "🚫 Deve essere" " specificata un url contenente il pacchetto di traduzione" ), "too_long": ( "📁 Output della stringa" " troppo lungo, viene inviato in un file" ), "opening_form": " Apertura form...", "opening_gallery": " Apertura galleria...", "opening_list": " Apertura lista...", "inline403": ( "🚫 Non puoi" " inviare inline in questo chat" ), "invoke_failed": "🚫 Invocazione modulo fallita! controlla i log", "show_inline_cmds": "📄 Mostra tutti i comandi inline disponibili", "no_inline_cmds": "Non hai comandi inline disponibili", "no_inline_cmds_msg": ( "😔 Non hai comandi inline disponibili o non hai accesso a loro" ), "inline_cmds": "ℹ️ Hai {} comando(-i) disponibili", "inline_cmds_msg": "ℹ️ Comandi inline disponibili:\n\n{}", "run_command": "🏌️ Esegui comando", "command_msg": "🌘 Comando «{}»\n\n{}", "command": "🌘 Comando «{}»", "button403": "Non puoi premere questo pulsante!", "keep_id": "⚠️ Non cancellare ID! {}", "choose_language": "🗽 Scegli la lingua", "not_official": ( "⚠️ Questa lingua non" " è supportata ufficialmente" ), "requested_join": ( "💫 Il modulo {} ha richiesto di unirsi al canale {}\n\n❓ Motivo: {}" ), "fw_error": ( "🕒 Il comando" " {} ha causato un FloodWait di {} nel metodo " " {}" ), "rpc_error": ( "🚫 Il comando" " {} non è riuscito a causa di un RPC error:" " {}" ), } strings_de = { "lang_saved": "{} Sprache gespeichert!", "pack_saved": ( "👍 Übersetzungs" " Paket gespeichert!" ), "incorrect_language": ( "🚫 Falsche Sprache" " angegeben" ), "lang_removed": ( "👍 Übersetzungen" " auf Standard zurückgesetzt" ), "check_pack": ( "🚫 Ungültiges" " Übersetzungs Paket in der URL" ), "check_url": ( "🚫 Sie müssen eine" " gültige URL angeben, die ein Übersetzungs Paket enthält" ), "too_long": ( "📁 Befehlsausgabe scheint" " zu lang zu sein, daher wird sie in einer Datei gesendet." ), "opening_form": " Formular wird geöffnet...", "opening_gallery": " Galerie wird geöffnet...", "opening_list": " Liste wird geöffnet...", "inline403": ( "🚫 Sie können" " Inline-Einheiten in diesem Chat nicht senden" ), "invoke_failed": ( "🚫 Modulaufruf" " fehlgeschlagen! Weitere Informationen in den Protokollen" ), "show_inline_cmds": "📄 Zeige alle verfügbaren Inline-Befehle", "no_inline_cmds": "Sie haben keine verfügbaren Inline-Befehle", "no_inline_cmds_msg": ( "😔 Keine verfügbaren Inline-Befehle oder Sie haben keinen Zugriff" " auf sie" ), "inline_cmds": "ℹ️ Sie haben {} verfügbare(n) Befehl(e)", "inline_cmds_msg": "ℹ️ Verfügbare Inline-Befehle:\n\n{}", "run_command": "🏌️ Befehl ausführen", "command_msg": "🌘 Befehl «{}»\n\n{}", "command": "🌘 Befehl «{}»", "button403": "Sie können auf diese Schaltfläche nicht klicken!", "keep_id": "⚠️ Löschen sie das ID nicht! {}", "choose_language": "🗽 Wählen Sie eine Sprache", "not_official": ( "⚠️ Diese Sprache wird" " nicht offiziell unterstützt" ), "requested_join": ( "💫 Modul {} hat den Beitritt zum Kanal {} angefordert\n\n❓ Grund:" " {}" ), "fw_error": ( "🕒 Befehl" " {} hat FloodWait {} in der Methode" " {}" ), "rpc_error": ( "🚫 Befehl" " {} ist fehlgeschlagen wegen RPC-Fehler" ": {}" ), } strings_tr = { "lang_saved": "{} Dil kaydedildi!", "pack_saved": ( "👍 Çeviri paketi" " kaydedildi!" ), "incorrect_language": ( "🚫 Yanlış dil" " belirtildi" ), "lang_removed": ( "👍 Çeviriler varsayılan" " hale getirildi" ), "check_pack": ( "🚫 URL'deki çeviri" " paketi geçersiz" ), "check_url": ( "🚫 Geçerli bir dil paketi" " içeren URL belirtmelisiniz" ), "too_long": ( "📁 Komut çıktısı çok uzun" " görünüyor, bu yüzden dosya olarak gönderildi." ), "opening_form": " Form açılıyor...", "opening_gallery": " Galeri açılıyor...", "opening_list": " Liste açılıyor...", "inline403": ( "🚫 Bu sohbete satır içi" " birimler gönderemezsin" ), "invoke_failed": ( "🚫 Modül çağrısı" " başarısız! Kayıtlardan daha fazla bilgiye erişebilirsin" ), "show_inline_cmds": "📄 Tüm kullanılabilir satır içi komutlarını göster", "no_inline_cmds": "Kullanılabilir satır içi komutunuz yok", "no_inline_cmds_msg": ( "😔 Kullanılabilir satır içi komutunuz yok veya erişiminiz yok" ), "inline_cmds": "ℹ️ {} adet kullanılabilir komutunuz var", "inline_cmds_msg": "ℹ️ Kullanılabilir satır içi komutlar:\n\n{}", "run_command": "🏌️ Komutu çalıştır", "command_msg": "🌘 Komut «{}»\n\n{}", "command": "🌘 Komut «{}»", "button403": "Bu düğmeye basamazsınız!", "keep_id": "⚠️ ID'yi silmeyin! {}", "choose_language": "🗽 Bir dil seçin", "not_official": ( "⚠️ Bu dil resmi olarak" " desteklenmiyor" ), "requested_join": ( "💫 Modül {} {}" " kanalına katılma isteği gönderdi\n\n❓ Sebep: {}" ), "fw_error": ( "🕒 Komut" " {} FloodWait {} nedeniyle {}" " yönteminde başarısız oldu" ), "rpc_error": ( "🚫 Komut" " {} RPC hatası nedeniyle başarısız" " oldu: {}" ), } strings_uz = { "lang_saved": "{} Til saqlandi!", "pack_saved": ( "👍 Tarjima paketi" " saqlandi!" ), "incorrect_language": ( "🚫 Noto'g'ri til" " belgilandi" ), "lang_removed": ( "👍 Tarjimalar" " standart holatga qaytarildi" ), "check_pack": ( "🚫 URL'dagi tarjima" " paketi noto'g'ri" ), "check_url": ( "🚫 Siz noto'g'ri URL" " belirtdingiz" ), "too_long": ( "📁 Bajarilgan buyruq" " natijasi juda uzun, shuning uchun fayl sifatida yuborildi." ), "opening_form": " Formani ochish...", "opening_gallery": " Galeriyani ochish...", "opening_list": " Ro'yxatni ochish...", "inline403": ( "🚫 Siz bu guruhda inline obyektlarni yuborishingiz mumkin emas" ), "invoke_failed": ( "🚫 Modulni chaqirish" " muvaffaqiyatsiz! Batafsil ma'lumotlar jurnallarda" ), "show_inline_cmds": "📄 Barcha mavjud inline buyruqlarini ko'rsatish", "no_inline_cmds": "Sizda mavjud inline buyruqlar yo'q", "no_inline_cmds_msg": ( "😔 Sizda mavjud inline buyruqlar yo'q yoki ularga kirish huquqingiz" " yo'q" ), "inline_cmds": "ℹ️ Sizda {} mavjud buyruq bor", "inline_cmds_msg": "ℹ️ Mavjud inline buyruqlar:\n\n{}", "run_command": "🏌️ Buyruqni bajarish", "command_msg": "🌘 Buyruq «{}»\n\n{}", "command": "🌘 Buyruq «{}»", "button403": "Siz ushbu tugmani bosib bo'lmaysiz!", "keep_id": "⚠️ ID-ni o'chirmang! {}", "choose_language": "🗽 Tilni tanlang", "not_official": ( "⚠️ Ushbu til" " rasmiylashtirilmagan" ), "requested_join": ( "💫 Modul {} {}" " guruhiga qo'shilish so'rovi yubordi\n\n❓ Sababi: {}" ), "fw_error": ( "🕒 Buyruq" " {} FloodWait {} sababli {} usuli" " bilan muvaffaqiyatsiz bo'ldi" ), "rpc_error": ( "🚫 Buyruq" " {} RPC xatosi sababli muvaffaqiyatsiz" " bo'ldi: {}" ), } strings_es = { "lang_saved": "{} ¡Idioma guardado!", "pack_saved": ( "👍 ¡Paquete de" " traducción guardado!" ), "incorrect_language": ( "🚫 Idioma" " incorrecto seleccionado" ), "lang_removed": ( "👍 Restablecer la" " traducción a los valores predeterminados" ), "check_pack": ( "🚫 Paquete de" " traducción seleccionado incorrecto" ), "check_url": ( "🚫 URL incorrecta" " seleccionada" ), "too_long": ( "📁 El resultado del" " comando excede el límite. Enviado como archivo." ), "opening_form": " Abriendo formulario...", "opening_gallery": " Abriendo galería...", "opening_list": " Abriendo lista...", "inline403": ( "🚫 No se permiten elementos de interfaz de usuario en este grupo" ), "invoke_failed": ( "🚫 ¡Error al invocar la" " unidad! Consulte el registro para obtener más detalles" ), "show_inline_cmds": "📄 Mostrar todos los comandos disponibles", "no_inline_cmds": "No hay comandos disponibles", "no_inline_cmds_msg": ( "😔 No hay comandos disponibles o no tienes permiso para acceder a" " los comandos" ), "inline_cmds": "ℹ️ {} comandos disponibles", "inline_cmds_msg": "ℹ️ Comandos disponibles:\n\n{}", "run_command": "🏌️ Ejecutar comando", "command_msg": "🌘 Comando '{}'\n\n{}", "command": "🌘 Comando '{}'", "button403": "¡No puedes presionar este botón!", "button404": "¡No puedes presionar este botón ahora!", "keep_id": "⚠️ ¡No elimines el ID! {}", "choose_language": "🗽 Elige un idioma", "not_official": ( "⚠️ Este idioma no está" " oficialmente respaldado" ), "requested_join": ( "💫 El módulo {} {}" " solicitó unirse al grupo\n\n❓ Razón: {}" ), "fw_error": ( "🕒 El comando" " {} falló debido a FloodWait {}: {}" ), "rpc_error": ( "🚫 El comando" " {} falló debido a un error RPC:" " {}" ), } strings_kk = { "lang_saved": "{} Тіл сақталды!", "pack_saved": ( "👍 Аударма пакеті" " сақталды!" ), "incorrect_language": ( "🚫 Жарамсыз тіл" " белгіленді" ), "lang_removed": ( "👍 Аударма пакеті" " өшірілді" ), "check_pack": ( "🚫 Аударма пакеті" " сілтемесінің пішімі жарамсыз" ), "check_url": ( "🚫 Сіз аударма пакеті" " бар сілтемені көрсетуіңіз керек" ), "too_long": ( "📁 Команда жауап" " өте ұзын, ол файлда жіберілді." ), "opening_form": " Форманы ашу...", "opening_gallery": " Галереяны ашу...", "opening_list": " Тізімні ашу...", "inline403": ( "🚫 Сіз бұл сөйлесуде кірістірілген элементтерді жібере алмайсыз" ), "invoke_failed": ( "🚫 Модульді іске қосу" " сәтсіз аяқталды! Толығырақ құжаттың журналында" ), "show_inline_cmds": "📄 Барлық қол жетімді кірістірілген командаларды көрсету", "no_inline_cmds": "Сіздің қол жетімді inline командаларыңыз жоқ", "no_inline_cmds_msg": ( "😔 Қол жетімді inline командалар жоқ немесе Сізге оларға қатынасуға" " рұқсат жоқ" ), "inline_cmds": "ℹ️ Сіздің {} қол жетімді команда(-лар)ыңыз бар", "inline_cmds_msg": "ℹ️ Қол жетімді inline командалар:\n\n{}", "run_command": "🏌️ Команданы іске қосу", "command_msg": "🌘 «{}» командасы\n\n{}", "command": "🌘 «{}» командасы", "button403": "Сіз бұл түймешіге баса алмайсыз!", "keep_id": "⚠️ ID тастамаңыз! {}", "choose_language": "🗽 Тілді таңдаңыз", "not_official": ( "⚠️ Бұл тіл официалдықтың" " тағы да қолдауы көрсетілмейді" ), "requested_join": ( "💫 Модуль {} {}< арнаға" " қосылуды сұрады. /a>\n\n❓ Себебі: {}" ), "fw_error": ( "🕒 Команда" " {} {} секундтан кейін қайталап көрінеді" ), "rpc_error": ( "🚫 Команда" " {} RPC қатесінен қате орындалды:" " {}" ), } strings_tt = { "lang_saved": "{} Тел сакланган!", "pack_saved": ( "👍 Тәрҗемә пакеты" " сакланган!" ), "incorrect_language": ( "🚫 Дөрес булмаган тел" " күрсәтелгән" ), "lang_removed": ( "👍 Тәрҗемәләр стандартка" " ташланган" ), "check_pack": ( "🚫 Сылтамада тәрҗемә" " пакетларының дөрес булмаган форматы" ), "check_url": ( "🚫 Сез тәрҗемә пакеты" " булган сылтаманы кертергә тиеш/b>" ), "too_long": ( "📁 Команда чыгышы бик" " озын, шуңа күрә ул файлда җибәрелә." ), "opening_form": " Мин форманы ачам...", "opening_gallery": " Мин галереяны ачам...", "opening_list": " Исемлекне ачу...", "inline403": ( "🚫 Сез бу чатта" " урнаштырылган элементларны җибәрә алмыйсыз" ), "invoke_failed": "🚫 Модуль проблемасы уңышлы булмады! Логларда тулырак", "show_inline_cmds": "📄 Барлык урнаштырылган командаларны күрсәтегез", "no_inline_cmds": "Сезнең inline командаларыгыз юк", "no_inline_cmds_msg": ( "😔 Inline командалар юк яисә аларга керү мөмкинлеге юк" ), "inline_cmds": "ℹ️ Сездә {} уңайлы командалар бар", "inline_cmds_msg": "ℹ️ Inline командалар:\n\n{}", "run_command": "🏌️ Команданы үтәгез", "command_msg": "🌘 Команда «{}»\n\n{}", "command": "🌘 Команда «{}»", "button403": "Сез төймәгә баса алмыйсыз!", "keep_id": "⚠️ ID'ны бетеремэгез {}", "choose_language": "🗽 Телне таңдаңыз", "not_official": ( "⚠️ Бу тел официалдықтың" " тағы да қолдауы көрсетілмейді" ), "fw_error": ( "🕒 Команда" " {} FloodWait {} методына туры" " килде{}" ), "rpc_error": ( "🚫 Команда" " {} RPC хатасынан баш тартылды:" " {}" ), } 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": "🇰🇿"} lang = lang2country.get(lang) or utils.get_lang_flag(lang) return emoji_flags.get(lang, lang) @loader.command( ru_doc="[языки] - Изменить стандартный язык", fr_doc="[langues] - Changer la langue par défaut", it_doc="[lingue] - Cambia la lingua predefinita", de_doc="[Sprachen] - Ändere die Standard-Sprache", tr_doc="[Diller] - Varsayılan dili değiştir", uz_doc="[til] - Standart tili o'zgartirish", es_doc="[Idiomas] - Cambiar el idioma predeterminado", kk_doc="[тілдер] - Бастапқы тілді өзгерту", ) async def setlang(self, message: Message): """[languages in the order of priority] - Change default language""" args = utils.get_args_raw(message) if not args: 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 SUPPORTED_LANGUAGES.items() ], 2, ), ) return if any(len(i) != 2 for i in args.split(" ")): await utils.answer(message, self.strings("incorrect_language")) return self._db.set(translations.__name__, "lang", args.lower()) await self.allmodules.reload_translations() await utils.answer( message, self.strings("lang_saved").format( "".join([self._get_flag(lang) for lang in args.lower().split()]) ) + ( ("\n\n" + self.strings("not_official")) if any(lang not in SUPPORTED_LANGUAGES for lang in args.lower().split()) else "" ), ) @loader.command( ru_doc="[ссылка на пак | пустое чтобы удалить] - Изменить внешний пак перевода", fr_doc=( "[lien vers le paquet | vide pour supprimer] - Changer le paquet de" " traduction externe" ), it_doc=( "[link al pacchetto | vuoto per rimuovere] - Cambia il pacchetto di" " traduzione esterno" ), de_doc=( "[Link zum Paket | leer um zu entfernen] - Ändere das externe Übersetzungs" " Paket" ), tr_doc=( "[Çeviri paketi bağlantısı | boş bırakmak varsayılan hale getirir] - Harici" " çeviri paketini değiştir" ), uz_doc=( "[tarjima paketi havolasini | bo'sh qoldirish standart holatga qaytaradi] -" " Tashqi tarjima paketini o'zgartirish" ), es_doc="[Enlace al paquete | vacío para eliminar] - Cambiar el paquete de", kk_doc=( "[тілдік пакеттің сілтемесі | бос қалдырып бастапқы қалдыру] - Сыртқы" " тілдік пакетін өзгерту" ), ) async def dllangpackcmd(self, message: Message): """[link to a langpack | empty to remove] - Change Hikka translate pack (external)""" args = utils.get_args_raw(message) if not args: self._db.set(translations.__name__, "pack", False) await self.translator.init() await utils.answer(message, self.strings("lang_removed")) return if not utils.check_url(args): await utils.answer(message, self.strings("check_url")) return self._db.set(translations.__name__, "pack", args) await utils.answer( message, self.strings( "pack_saved" if await self.allmodules.reload_translations() else "check_pack" ), )