# ©️ 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 git import time from hikkatl.tl.types import Message from hikkatl.utils import get_display_name import requests import os from .. import loader, utils, version from ..inline.types import InlineQuery import subprocess @loader.tds class HerokuInfoMod(loader.Module): """Show userbot info""" strings = {"name": "HerokuInfo"} def __init__(self): self.config = loader.ModuleConfig( loader.ConfigValue( "custom_message", doc=lambda: self.strings("_cfg_cst_msg"), ), loader.ConfigValue( "banner_url", "https://imgur.com/a/7LBPJiq.png", lambda: self.strings("_cfg_banner"), ), loader.ConfigValue( "pp_to_banner", False, validator=loader.validators.Boolean(), ), loader.ConfigValue( "show_heroku", True, validator=loader.validators.Boolean(), ), ) 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._client.hikka_me.id, utils.escape_html(get_display_name(self._client.hikka_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() for emoji, icon in [ ("🍊", "🧑"), ("πŸ‡", "πŸ’œ"), ("πŸ˜Άβ€πŸŒ«οΈ", "πŸ˜Άβ€πŸŒ«οΈ"), ("❓", "πŸ“±"), ("πŸ€", "πŸ€"), ("🦾", "🦾"), ("πŸš‚", "πŸš‚"), ("🐳", "🐳"), ("πŸ•Ά", "πŸ“±"), ("πŸˆβ€β¬›", "πŸˆβ€β¬›"), ("✌️", "✌️"), ("πŸ’Ž", "πŸ’Ž"), ("πŸ›‘", "🌩"), ("πŸ’˜", "πŸ’˜"), ("🌼", "❀️"), ("🎑", "🎑"), ("🐧", "🐧") ]: platform = platform.replace(emoji, icon) return ( ( "πŸͺ Heroku\n" if self.config["show_heroku"] else "" ) + self.config["custom_message"].format( me=me, version=_version, build=build, prefix=prefix, platform=platform, upd=upd, uptime=utils.formatted_uptime(), cpu_usage=utils.get_cpu_usage(), ram_usage=f"{utils.get_ram_usage()} MB", branch=version.branch, hostname=subprocess.run(['hostname'], stdout=subprocess.PIPE).stdout.decode().strip(), user=subprocess.run(['whoami'], stdout=subprocess.PIPE).stdout.decode().strip(), ) if self.config["custom_message"] else ( f'{{}}\n\n{{}} {self.strings("owner")}: {me}\n\n{{}}' f' {self.strings("version")}: {_version} {build}\n{{}}' f' {self.strings("branch")}:' f" {version.branch}\n{upd}\n\n{{}}" f' {self.strings("prefix")}: {prefix}\n{{}}' f' {self.strings("uptime")}:' f" {utils.formatted_uptime()}\n\n{{}}" f' {self.strings("cpu_usage")}:' f" ~{utils.get_cpu_usage()} %\n{{}}" f' {self.strings("ram_usage")}:' f" ~{utils.get_ram_usage()} MB\n{{}}" ).format( *map( lambda x: utils.remove_html(x) if inline else x, ( ( utils.get_platform_emoji() if self._client.hikka_me.premium and self.config["show_heroku"] else "" ), "😎", "πŸ’«", "🌳", "⌨️", "βŒ›οΈ", "⚑️", "πŸ’Ό", platform, ), ) ) ) async def upload_pp_to_oxo(self, photo): save_path = "profile_photo.jpg" await self._client.download_media(photo, file=save_path) try: with open(save_path, 'rb') as file: oxo = await utils.run_sync( requests.post, "https://0x0.st", files={"file": file}, data={"secret": True}, ) if oxo.status_code == 200: return oxo.text.strip() else: return "https://imgur.com/a/7LBPJiq.png" except Exception: return "https://imgur.com/H56KRbM" finally: if os.path.exists(save_path): os.remove(save_path) async def get_pp_for_banner(self): photos = await self._client.get_profile_photos('me') if photos: return await self.upload_pp_to_oxo(photos[0]) return "https://imgur.com/a/7LBPJiq.png" 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() async def infocmd(self, message: Message): if self.config.get('pp_to_banner', True): print(self.config['banner_url']) try: new_banner_url = await self.get_pp_for_banner() if new_banner_url: self.config['banner_url'] = new_banner_url await self._db.set("Config", "banner_url", new_banner_url) except Exception: pass await utils.answer_file( message, self.config["banner_url"], self._render_info(False), ) @loader.command() async def herokuinfo(self, message: Message): await utils.answer(message, self.strings("desc")) @loader.command() async def setinfo(self, message: Message): if not (args := utils.get_args_html(message)): return await utils.answer(message, self.strings("setinfo_no_args")) self.config["custom_message"] = args await utils.answer(message, self.strings("setinfo_success"))