version = (0, 0, 1) # _ _ _ _ # | | | | (_) | # | | _ | |_ _ _ _| | # | | / _ \| / _ \/ | | |/ / # | |_| (_) | || (_) \ \ | < # \_/\_/ \\_/|_/_|_|\_\ # # © Copyright 2022 # # developed by @lotosiiik, @byateblan # █ █ ▀ █▄▀ ▄▀█ █▀█ ▀ # █▀█ █ █ █ █▀█ █▀▄ █ # © Copyright 2022 # https://t.me/hikariatama # # 🔒 Licensed under the GNU AGPLv3 # 🌐 https://www.gnu.org/licenses/agpl-3.0.html # meta developer: @hikkaftgmods # meta banner: https://i.imgur.com/BtmS5QF.jpeg # meta pic: https://i.imgur.com/wB0SFBi.jpeg import logging import git from telethon.tl.types import Message from telethon.utils import get_display_name from .. import loader, utils, main logger = logging.getLogger(__name__) @loader.tds class HFInfoMod(loader.Module): """Show userbot info""" strings = { "name": "HFInfo", "owner": "Owner", "version": "Version", "build": "Build", "Uptime": "Uptime", "prefix": "Prefix", "up-to-date": "😌 Up-to-date", "update_required": "😕 Update required .update", "_cfg_cst_msg": ( "Custom message for info. May contain {me}, {version}, {build}, {prefix}," " {platform}, {upd}, {uptime} keywords" ), "_cfg_cst_btn": "Custom button for info. Leave empty to remove button", "_cfg_cst_frmt": "Custom fileformat for Banner info.", "_cfg_banner": "URL to image banner", } strings_ru = { "owner": "Владелец", "version": "Версия", "build": "Сборка", "prefix": "Префикс", "uptime": "Аптайм", "up-to-date": "😌 Актуальная версия", "update_required": "😕 Требуется обновление .update", "_cfg_cst_msg": ( "Кастомный текст сообщения в info. Может содержать ключевые слова {me}," " {version}, {build}, {prefix}, {platform}, {upd}, {uptime}" ), "_cfg_cst_btn": ( "Кастомная кнопка в сообщении в info. Оставь пустым, чтобы убрать кнопку" ), "_cfg_banner": "Ссылка на баннер-картинку", "_cfg_cst_frmt": "Кастомный формат файла для информации баннера", } def __init__(self): self.config = loader.ModuleConfig( loader.ConfigValue( "custom_message", doc=lambda: self.strings("_cfg_cst_msg"), ), loader.ConfigValue( "custom_banner", "https://i.imgur.com/jJwhJkK.jpeg", doc=lambda: self.strings("_cfg_banner") ), loader.ConfigValue( "custom_format", "photo", lambda: self.strings("_cfg_cst_frmt"), validator=loader.validators.Choice(["photo", "video", "audio", "gif"]), ), loader.ConfigValue( "disable_banner", False, lambda: self.strings("_cfg_banner"), validator=loader.validators.Boolean(), ), loader.ConfigValue( "custom_button1", [], lambda: self.strings("_cfg_cst_btn"), validator=loader.validators.Series(min_len=0, max_len=2), ), loader.ConfigValue( "custom_button2", [], lambda: self.strings("_cfg_cst_btn"), validator=loader.validators.Series(min_len=0, max_len=2), ), loader.ConfigValue( "custom_button3", [], lambda: self.strings("_cfg_cst_btn"), validator=loader.validators.Series(min_len=0, max_len=2), ), loader.ConfigValue( "custom_button4", [], lambda: self.strings("_cfg_cst_btn"), validator=loader.validators.Series(min_len=0, max_len=2), ), loader.ConfigValue( "custom_button5", [], lambda: self.strings("_cfg_cst_btn"), validator=loader.validators.Series(min_len=0, max_len=2), ), loader.ConfigValue( "custom_button6", [], lambda: self.strings("_cfg_cst_btn"), validator=loader.validators.Series(min_len=0, max_len=2), ), ) async def client_ready(self, client, db): self._me = await client.get_me() def _render_info(self) -> str: ver = utils.get_git_hash() or "Unknown" try: repo = git.Repo(search_parent_directories=True) diff = repo.git.log(["HEAD..origin/master", "--oneline"]) upd = ( self.strings("update_required") if diff else self.strings("up-to-date") ) except Exception: upd = "" me = f'{utils.escape_html(get_display_name(self._me))}' version = f'{".".join(list(map(str, list(main.__version__))))}' build = ( f'#{ver[:8]}' ) prefix = f"«{utils.escape_html(self.get_prefix())}»" platform = utils.get_named_platform() return ( self.config["custom_message"].format( me=me, version=version, build=build, prefix=prefix, platform=platform, upd=upd, uptime=utils.formatted_uptime(), ) if self.config["custom_message"] and self.config["custom_message"] != "no" else ( "🌚 HF Info\n" f'🤴 {self.strings("owner")}: {me}\n\n' f"🔮 {self.strings('version')}: {version} {build}\n" f"{upd}\n\n" f"📼 {self.strings('prefix')}: {prefix}\n" f"⌚️ {self.strings('uptime')}: {utils.formatted_uptime()}\n" f"{platform}\n" ) ) def _get_mark(self, btn_count): btn_count = str(btn_count) return ( { "text": self.config[f"custom_button{btn_count}"][0], "url": self.config[f"custom_button{btn_count}"][1], } if self.config[f"custom_button{btn_count}"] else None ) @loader.unrestricted async def hfinfocmd(self, message: Message): """Send userbot info""" m = {x: self._get_mark(x) for x in range(13)} await self.inline.form( message=message, text=self._render_info(), reply_markup=[ [ *([m[1]] if m[1] else []), *([m[2]] if m[2] else []), *([m[3]] if m[3] else []), ], [ *([m[4]] if m[4] else []), *([m[5]] if m[5] else []), *([m[6]] if m[6] else []), ], ], **{} if self.config["disable_banner"] else {self.config["custom_format"]: self.config["custom_banner"]}, )