__version__ = (2, 0, 0)
# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀
# █▀█ █ █ █ █▀█ █▀▄ █
# © Copyright 2022
# https://t.me/hikariatama
#
# 🔒 Licensed under the GNU AGPLv3
# 🌐 https://www.gnu.org/licenses/agpl-3.0.html
# meta pic: https://static.dan.tatar/serverinfo_icon.png
# meta banner: https://mods.hikariatama.ru/badges/serverinfo.jpg
# meta developer: @hikarimods
# requires: psutil
# scope: hikka_only
# scope: hikka_min 1.2.10
import contextlib
import os
import platform
import sys
import psutil
from telethon.tl.types import Message
from .. import loader, utils
def bytes_to_megabytes(b: int) -> int:
return round(b / 1024 / 1024, 1)
@loader.tds
class serverInfoMod(loader.Module):
"""Show server info"""
strings = {
"name": "ServerInfo",
"loading": (
"🚘 Loading server"
" info..."
),
"servinfo": (
"🚘 Server"
" Info:\n\n💻 CPU:"
" {cpu} Cores {cpu_load}%\n💻 RAM: {ram} /"
" {ram_load_mb}MB"
" ({ram_load}%)\n\n💻"
" Kernel: {kernel}\n{arch_emoji} Arch: {arch}\n💻 OS: {os}\n\n💻 Python: {python}"
),
}
strings_ru = {
"loading": (
"🚘 Загрузка информации о"
" сервере..."
),
"servinfo": (
"🚘 Информация о сервере"
":\n\n💻 CPU:"
" {cpu} ядер(-ро) {cpu_load}%\n💻 RAM: {ram} /"
" {ram_load_mb}MB"
" ({ram_load}%)\n\n💻"
" Kernel: {kernel}\n{arch_emoji} Arch: {arch}\n💻 OS: {os}\n\n💻 Python: {python}"
),
"_cls_doc": "Показывает информацию о сервере",
}
@loader.command(ru_doc="Показать информацию о сервере")
async def serverinfo(self, message: Message):
"""Show server info"""
message = await utils.answer(message, self.strings("loading"))
inf = {
"cpu": "n/a",
"cpu_load": "n/a",
"ram": "n/a",
"ram_load_mb": "n/a",
"ram_load": "n/a",
"kernel": "n/a",
"arch_emoji": "n/a",
"arch": "n/a",
"os": "n/a",
}
with contextlib.suppress(Exception):
inf["cpu"] = psutil.cpu_count(logical=True)
with contextlib.suppress(Exception):
inf["cpu_load"] = psutil.cpu_percent()
with contextlib.suppress(Exception):
inf["ram"] = bytes_to_megabytes(
psutil.virtual_memory().total - psutil.virtual_memory().available
)
with contextlib.suppress(Exception):
inf["ram_load_mb"] = bytes_to_megabytes(psutil.virtual_memory().total)
with contextlib.suppress(Exception):
inf["ram_load"] = psutil.virtual_memory().percent
with contextlib.suppress(Exception):
inf["kernel"] = utils.escape_html(platform.release())
with contextlib.suppress(Exception):
inf["arch"] = utils.escape_html(platform.architecture()[0])
inf["arch_emoji"] = (
"💻"
if "64" in (inf.get("arch", "") or "")
else "💻"
)
with contextlib.suppress(Exception):
system = os.popen("cat /etc/*release").read()
b = system.find('DISTRIB_DESCRIPTION="') + 21
system = system[b : system.find('"', b)]
inf["os"] = utils.escape_html(system)
with contextlib.suppress(Exception):
inf["python"] = (
f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"
)
await utils.answer(message, self.strings("servinfo").format(**inf))