# Β©οΈ 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
from hikkatl.tl.types import Message
from hikkatl.utils import get_display_name
from .. import loader, utils, version
from ..inline.types import InlineQuery
import subprocess
@loader.tds
class HikkaInfoMod(loader.Module):
"""Show userbot info"""
strings = {"name": "HikkaInfo"}
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"),
validator=loader.validators.Link(),
),
)
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 "heroku" 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(),
cpu_usage=utils.get_cpu_usage(),
ram_usage=f"{utils.get_ram_usage()} MB",
branch=version.branch,
hostname=subprocess.run(['hostname'], capture_output=True).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
else "πͺ Heroku"
),
"π",
"π«",
"π³",
"β¨οΈ",
"βοΈ",
"β‘οΈ",
"πΌ",
platform,
),
)
)
)
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):
await utils.answer_file(
message,
self.config["banner_url"],
self._render_info(False),
)
@loader.command()
async def hikkainfo(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"))