# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀ # █▀█ █ █ █ █▀█ █▀▄ █ # © Copyright 2022 # https://t.me/hikariatama # # 🔒 Licensed under the GNU AGPLv3 # 🌐 https://www.gnu.org/licenses/agpl-3.0.html import git from telethon.tl.types import Message from telethon.utils import get_display_name from .. import loader, utils, version from ..inline.types import InlineQuery @loader.tds class HikkaInfoMod(loader.Module): """Show userbot info""" strings = { "name": "HikkaInfo", "owner": "Owner", "version": "Version", "build": "Build", "prefix": "Prefix", "uptime": "Uptime", "branch": "Branch", "send_info": "Send userbot info", "description": "ℹ This will not compromise any sensitive info", "up-to-date": ( "😌 Up-to-date" ), "update_required": ( "😕 Update required" " .update" ), "setinfo_no_args": ( "😢 You need to specify" " text to change info to" ), "setinfo_success": ( "🎉 Info changed" " successfully" ), "_cfg_cst_msg": ( "Custom message for info. May contain {me}, {version}, {build}, {prefix}," " {platform}, {upd}, {uptime}, {branch} keywords" ), "_cfg_cst_btn": "Custom button for info. Leave empty to remove button", "_cfg_banner": "URL to image banner", "desc": ( "🌌" " Hikka\n\nTelegram userbot with a lot of features, like inline" " galleries, forms, lists and animated emojis support. Userbot - software," " running on your Telegram account. If you write a command to any chat, it" " will get executed right there. Check out live examples at GitHub' ), } strings_ru = { "owner": "Владелец", "version": "Версия", "build": "Сборка", "prefix": "Префикс", "uptime": "Аптайм", "branch": "Ветка", "send_info": "Отправить информацию о юзерботе", "description": "ℹ Это не раскроет никакой личной информации", "_ihandle_doc_info": "Отправить информацию о юзерботе", "up-to-date": ( "😌 Актуальная версия" ), "update_required": ( "😕 Требуется обновление" " .update" ), "_cfg_cst_msg": ( "Кастомный текст сообщения в info. Может содержать ключевые слова {me}," " {version}, {build}, {prefix}, {platform}, {upd}, {uptime}, {branch}" ), "_cfg_cst_btn": ( "Кастомная кнопка в сообщении в info. Оставь пустым, чтобы убрать кнопку" ), "_cfg_banner": "Ссылка на баннер-картинку", "setinfo_no_args": ( "😢 Тебе нужно указать" " текст для кастомного инфо" ), "setinfo_success": ( "🎉 Текст инфо успешно" " изменен" ), "desc": ( "🌌" " Hikka\n\nTelegram юзербот с огромным количеством функций, из" " которых: инлайн галереи, формы, списки, а также поддержка" " анимированных эмодзи. Юзербот - программа, которая запускается на" " твоем Telegram-аккаунте. Когда ты пишешь команду в любом чате, она" " сразу же выполняется. Обрати внимание на живые примеры на GitHub' ), } strings_de = { "owner": "Besitzer", "version": "Version", "build": "Build", "prefix": "Prefix", "uptime": "Uptime", "branch": "Branch", "send_info": "Botinfo senden", "description": "ℹ Dies enthüllt keine persönlichen Informationen", "_ihandle_doc_info": "Sende Botinfo", "up-to-date": "😌 Aktuell", "update_required": ( "😕 Update benötigt" " .update" ), "_cfg_cst_msg": ( "Custom message for info. May contain {me}, {version}, {build}, {prefix}," " {platform}, {upd}, {uptime}, {branch} keywords" ), "_cfg_cst_btn": "Custom button for info. Leave empty to remove button", "_cfg_banner": "URL to image banner", "setinfo_no_args": ( "😢 Bitte gib einen" " Text an, um die Info zu ändern" ), "setinfo_success": ( "🎉 Info geändert" ), "desc": ( "🌌" " Hikka\n\nTelegram userbot mit vielen Funktionen, wie z.B. Inline" " Galerien, Formulare, Listen und Unterstützung für animierte Emojis." " Userbot - Software, die auf deinem Telegram-Account läuft. Wenn du" " einen Befehl in irgendeinem Chat schreibst, wird er dort ausgeführt." " Sieh dir Live-Beispiele auf GitHub' ), } strings_uz = { "owner": "Egasi", "version": "Versiya", "build": "Build", "prefix": "Prefix", "uptime": "Ishlash vaqti", "branch": "Vetkasi", "send_info": "Bot haqida ma'lumot", "description": "ℹ Bu shaxsiy ma'lumot emas", "_ihandle_doc_info": "Bot haqida ma'lumot", "up-to-date": ( "😌 So'ngi versia" ), "update_required": ( "😕 Yangilash" " kerak .update" ), "_cfg_cst_msg": ( "Xabar uchun shaxsiy xabar. {me}, {version}, {build}, {prefix}," " {platform}, {upd}, {uptime}, {branch} kalit so'zlarni ishlatishingiz" " mumkin" ), "_cfg_cst_btn": ( "Xabar uchun shaxsiy tugma. Tugmani o'chirish uchun bo'sh qoldiring" ), "_cfg_banner": "URL uchun rasmi", "setinfo_no_args": ( "😢 Ma'lumotni" " o'zgartirish uchun matn kiriting" ), "setinfo_success": ( "🎉 Ma'lumotlar" " o'zgartirildi" ), "desc": ( "🌌 Hikka\n\nKo'p" " funksiyali userbot, buning ichida: ichki-gallereya, formalar, ro'yhatlar," " hamda animatsiyalangan emojilar. Userbot - bu sening" " telegram-akkauntingni ichida ishlaydigan ilova. Hohlagan chatga komanda" " yozsangiz, tez orada bu komanda ishlaydi. GitHub da misollarni' " ko'rishingiz mumkin" ), } strings_tr = { "owner": "Sahip", "version": "Sürüm", "build": "Derleme", "prefix": "Önek", "uptime": "Aktif Süre", "branch": "Dal", "send_info": "Bot hakkında bilgi", "description": "ℹ️ Kişisel bilgileri tehlikeye atmaz", "_ihandle_doc_info": "Bot hakkında bilgi", "up-to-date": "😌 Güncel", "update_required": ( "😕 Güncelleme" " gerekli .update" ), "_cfg_cst_msg": ( "Kişisel mesaj için bilgi. {me}, {version}, {build}, {prefix}," " {platform}, {upd}, {uptime}, {branch} anahtar kelimeleri kullanılabilir" ), "_cfg_cst_btn": "Kişisel tuş için bilgi. Tuşu kaldırmak için boş bırakın", "_cfg_banner": "Resim için URL", "setinfo_no_args": ( "😢 Bilgiyi değiştirmek" " için herhangi bir metin girin" ), "setinfo_success": ( "🎉 Bilgiler" " değiştirildi" ), "desc": ( "🌌 Hikka\n\\Çok fazla" " özellik barındıran Telegram kullanıcı botu, örneğin Çevrimiçi galeri," " formlar, listeler ve animasyonlu emoji desteği gibi. Kullanıcı botu -" " Telegram hesabınızda çalışan bir yazılımdır. Bir sohbete bir komut" " yazarsanız, hemen orada çalışacaktır. Örnekleri görmek için GitHub\'ı ziyaret' " edebilirsin" ), } strings_es = { "owner": "Propietario", "version": "Versión", "build": "Construir", "prefix": "Prefijo", "uptime": "Tiempo de actividad", "branch": "Rama", "send_info": "Enviar información del bot", "description": "ℹ️ No exponga su información personal", "_ihandle_doc_info": "Información del bot", "up-to-date": ( "😌 Actualizado" ), "update_required": ( "😕 Actualización" " necesaria .update" ), "_cfg_cst_msg": ( "Información del mensaje personalizado. Puede usar las palabras clave {me}," " {version}, {build}, {prefix}, {platform}, {upd}, {uptime}, {branch}" ), "_cfg_cst_btn": ( "Información del botón personalizado. Eliminar el botón deje en blanco" ), "_cfg_banner": "URL de la imagen", "setinfo_no_args": ( "😢 Para cambiar la" " información, ingrese algún texto" ), "setinfo_success": ( "🎉 Información cambiada" " con éxito" ), "desc": ( "🌌 Hikka\n\nEl bot de" " usuario proporciona varias funciones. Por ejemplo: Galería en línea," " formulario, lista, Emoji animado y más. El bot de usuario es una" " aplicación que funciona dentro de una cuenta de Telegram. Las órdenes de" " chat se ejecutan de inmediato. Para obtener más información, consulte GitHub' ), } strings_tt = { "owner": "Идарәче", "version": "Версия", "build": "Билд", "prefix": "Префикс", "uptime": "Тәртиби вакыты", "branch": "Кишелек", "send_info": "Бот турында мәгълүматны җибәрү", "description": "ℹ️ Шәхси мәгълүматыңызны тыяу", "_ihandle_doc_info": "Бот турында мәгълүмат", "up-to-date": ( "😌 Яңартылган" ), "update_required": ( "😕 Яңартылу" " таләп ителә.update" ), "_cfg_cst_msg": ( "Шәхси хәбәр мәгълүматы. {me}, {version}, {build}, {prefix}, {platform}," " {upd}, {uptime}, {branch} күчермәләрен җибәрү мөмкин" ), "_cfg_cst_btn": "Шәхси төймә мәгълүматы. Төймәне юймагыч, буш җибәрү", "_cfg_banner": "Сүрәт URL-ы", "setinfo_no_args": ( "😢 Мәгълүматны" " үзгәртү өчен, мәгълүматны кертегез" ), "setinfo_success": ( "🎉 Мәгълүмат" " мөмкин булды" ), "desc": ( "🌌 Hikka\n\nКулланучы" " боты монда бер көйләүләрне күрсәтә: онлайн галерея, форма, рәвештә," " эмоджи һәм башкалары. Кулланучы боты Telegram аккаунтында исәпләнә. Чат" " өчен күрсәтмәләр асабынча исәпләнә. Башка мәгълүмат өчен GitHub' ), } def __init__(self): self.config = loader.ModuleConfig( loader.ConfigValue( "custom_message", doc=lambda: self.strings("_cfg_cst_msg"), ), loader.ConfigValue( "custom_button", ["🌘 Support chat", "https://t.me/hikka_talks"], lambda: self.strings("_cfg_cst_btn"), validator=loader.validators.Union( loader.validators.Series(fixed_len=2), loader.validators.NoneType(), ), ), loader.ConfigValue( "banner_url", "https://github.com/hikariatama/assets/raw/master/hikka_banner.mp4", lambda: self.strings("_cfg_banner"), validator=loader.validators.Link(), ), ) async def client_ready(self): self._me = await self._client.get_me() # Legacy migration if ( self.config["banner_url"] == "https://github.com/hikariatama/assets/raw/master/hikka_banner.png" ): self.config[ "banner_url" ] = "https://github.com/hikariatama/assets/raw/master/hikka_banner.mp4" def _render_info(self, inline: bool) -> str: try: repo = git.Repo(search_parent_directories=True) diff = repo.git.log([f"HEAD..origin/{version.branch}", "--oneline"]) upd = ( self.strings("update_required") if diff else self.strings("up-to-date") ) except Exception: upd = "" me = '{}'.format( self._me.id, utils.escape_html(get_display_name(self._me)), ) build = utils.get_commit_url() _version = f'{".".join(list(map(str, list(version.__version__))))}' prefix = f"«{utils.escape_html(self.get_prefix())}»" platform = utils.get_named_platform() return ( ( "🌘 Hikka\n" if "hikka" not in self.config["custom_message"].lower() else "" ) + self.config["custom_message"].format( me=me, version=_version, build=build, prefix=prefix, platform=platform, upd=upd, uptime=utils.formatted_uptime(), branch=version.branch, ) if self.config["custom_message"] else ( "{}\n\n" f'{{}} {self.strings("owner")}: {me}\n\n' f"{{}} {self.strings('version')}: {_version} {build}\n" f"{{}} {self.strings('branch')}: {version.branch}\n" f"{upd}\n\n" f"{{}} {self.strings('prefix')}: {prefix}\n" f"{{}} {self.strings('uptime')}: {utils.formatted_uptime()}\n" f"{platform}\n" ).format( *map( lambda x: utils.remove_html(x) if inline else x, ( utils.get_platform_emoji() if self._client.hikka_me.premium and not inline else "🌘 Hikka", "😎", "💫", "🌳", "⌨️", "⌛️", ), ) ) ) def _get_mark(self): return ( { "text": self.config["custom_button"][0], "url": self.config["custom_button"][1], } if self.config["custom_button"] else None ) @loader.inline_handler( thumb_url="https://img.icons8.com/external-others-inmotus-design/344/external-Moon-round-icons-others-inmotus-design-2.png" ) @loader.inline_everyone async def info(self, _: InlineQuery) -> dict: """Send userbot info""" return { "title": self.strings("send_info"), "description": self.strings("description"), **( {"photo": self.config["banner_url"], "caption": self._render_info(True)} if self.config["banner_url"] else {"message": self._render_info(True)} ), "thumb": ( "https://github.com/hikariatama/Hikka/raw/master/assets/hikka_pfp.png" ), "reply_markup": self._get_mark(), } @loader.command( ru_doc="Отправляет информацию о боте", de_doc="Sendet Informationen über den Bot", tr_doc="Bot hakkında bilgi gönderir", uz_doc="Bot haqida ma'lumot yuboradi", es_doc="Envía información sobre el bot", ) @loader.unrestricted async def infocmd(self, message: Message): """Send userbot info""" if self.config["custom_button"]: await self.inline.form( message=message, text=self._render_info(True), reply_markup=self._get_mark(), **( {"photo": self.config["banner_url"]} if self.config["banner_url"] else {} ), ) else: try: await self._client.send_file( message.peer_id, self.config["banner_url"], caption=self._render_info(False), ) except Exception: await utils.answer(message, self._render_info(False)) else: if message.out: await message.delete() @loader.unrestricted @loader.command( ru_doc="Отправить информацию по типу 'Что такое Хикка?'", de_doc="Sende Informationen über den Bot", tr_doc="Bot hakkında bilgi gönderir", uz_doc="Bot haqida ma'lumot yuborish", es_doc="Enviar información sobre el bot", ) async def hikkainfocmd(self, message: Message): """Send info aka 'What is Hikka?'""" await utils.answer(message, self.strings("desc")) @loader.command( ru_doc="<текст> - Изменить текст в .info", de_doc=" - Ändere den Text in .info", tr_doc=" - .info'da metni değiştir", uz_doc=" - .info'dagi matnni o'zgartirish", es_doc=" - Cambiar el texto en .info", ) async def setinfo(self, message: Message): """ - Change text in .info""" args = utils.get_args_html(message) if not args: return await utils.answer(message, self.strings("setinfo_no_args")) self.config["custom_message"] = args await utils.answer(message, self.strings("setinfo_success"))