# █▀▀ ▄▀█ █▀▄▀█ █▀█ █▀▄ █▀
# █▀░ █▀█ █░▀░█ █▄█ █▄▀ ▄█
# https://t.me/famods
# 🔒 Licensed under the GNU AGPLv3
# 🌐 https://www.gnu.org/licenses/agpl-3.0.html
# ---------------------------------------------------------------------------------
# Name: HetaLib
# Description: Модуль для работы с heta
# meta developer: @FAmods
# meta banner: https://github.com/FajoX1/FAmods/blob/main/assets/banners/hetalib.png?raw=true
# requires: heta==1.0.2 requests
# ---------------------------------------------------------------------------------
import heta
import asyncio
import requests
import logging
from .. import loader, utils
logger = logging.getLogger(__name__)
@loader.tds
class HetaLib(loader.Module):
"""Модуль для работы с heta"""
strings = {
"name": "HetaLib",
"no_q": "❌ Должно быть {}hsearch [запрос]",
"no_hh": "❌ Должно быть {}decode_hhash [хэш]",
"no_repo": "❌ Должно быть {}mods_repo [ссылка_на_репозиторий]",
"invalid_hh": "😕 Неверный хэш",
"invalid_repo": "😕 Неверный репозиторий модулей",
"no_modules_in_repo": "😕 Нету модулей в репозитории",
"searching": "🔄 Поиск модулей...",
"receiving_modules": "🔄 Получаю модули...",
"decoding": "🔄 Декодирую хэш...",
}
app_name = "famods Hetalib"
def __init__(self):
self.config = loader.ModuleConfig(
loader.ConfigValue(
"search_limit_result",
5,
lambda: "Максимум результатов поиска будет при поиске модулей.",
),
)
async def client_ready(self, client, db):
self.db = db
self._client = client
@loader.command()
async def hsearch(self, message):
"""Поиск модуля в heta"""
q = utils.get_args_raw(message)
if not q:
return await utils.answer(message, self.strings["no_q"].format(self.get_prefix()))
await utils.answer(message, self.strings['searching'])
smods = heta.search(query=q, limit=self.config["search_limit_result"], app_name=self.app_name)
mtext = f"""⛩ Heta search ⛩
🔎 Запрос: {q}
"""
for mod in smods:
mtext += f"""🖥 {mod['module']['name']} (source) by {mod['module']['dev']}
ℹ️ {mod['module']['cls_doc']}
{self.get_prefix()}dlh {mod['module']['hash']}
——
"""
await utils.answer(message, mtext)
@loader.command()
async def decode_hhash(self, message):
"""Декодировать heta hash"""
hhash = utils.get_args_raw(message)
if not hhash:
return await utils.answer(message, self.strings["no_hh"].format(self.get_prefix()))
await utils.answer(message, self.strings['decoding'])
try:
hh_info = heta.decode_hash(mhash=hhash, app_name=self.app_name)
except requests.exceptions.JSONDecodeError:
return await utils.answer(message, self.strings['invalid_hh'])
await utils.answer(message, f"""
🖥 {hh_info['name']} (source)
{self.get_prefix()}dlh {hhash}
""")
@loader.command()
async def mods_repo(self, message):
"""Получить модули с репозитория"""
rep = utils.get_args_raw(message)
if not rep:
return await utils.answer(message, self.strings["no_repo"].format(self.get_prefix()))
await utils.answer(message, self.strings['receiving_modules'])
try:
mods = heta.repo.get_modules(repo=rep)
except requests.exceptions.MissingSchema:
return await utils.answer(message, self.strings['invalid_repo'])
if mods == "no modules":
return await utils.answer(message, self.strings['no_modules_in_repo'])
mdsrepo = f"""
🖥 Модули из этого репозитория
"""
for mod in mods:
mdsrepo += f"{mod['name']} (ссылка)\n"
await utils.answer(message, mdsrepo)