Heroku/hikka/modules/presets.py

453 lines
19 KiB
Python
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# █ █ ▀ █▄▀ ▄▀█ █▀█ ▀
# █▀█ █ █ █ █▀█ █▀▄ █
# © Copyright 2022
# https://t.me/hikariatama
#
# 🔒 Licensed under the GNU AGPLv3
# 🌐 https://www.gnu.org/licenses/agpl-3.0.html
import asyncio
import logging
from .. import loader, utils
from ..inline.types import BotInlineMessage, InlineCall
logger = logging.getLogger(__name__)
PRESETS = {
"fun": [
"https://mods.hikariatama.ru/aniquotes.py",
"https://mods.hikariatama.ru/artai.py",
"https://mods.hikariatama.ru/inline_ghoul.py",
"https://mods.hikariatama.ru/lovemagic.py",
"https://mods.hikariatama.ru/mindgame.py",
"https://mods.hikariatama.ru/moonlove.py",
"https://mods.hikariatama.ru/neko.py",
"https://mods.hikariatama.ru/purr.py",
"https://mods.hikariatama.ru/rpmod.py",
"https://mods.hikariatama.ru/scrolller.py",
"https://mods.hikariatama.ru/tictactoe.py",
"https://mods.hikariatama.ru/trashguy.py",
"https://mods.hikariatama.ru/truth_or_dare.py",
"https://mods.hikariatama.ru/sticks.py",
"https://mods.hikariatama.ru/premium_sticks.py",
"https://heta.hikariatama.ru/MoriSummerz/ftg-mods/magictext.py",
"https://heta.hikariatama.ru/HitaloSama/FTG-modules-repo/quotes.py",
"https://heta.hikariatama.ru/HitaloSama/FTG-modules-repo/spam.py",
"https://heta.hikariatama.ru/SkillsAngels/Modules/IrisLab.py",
"https://heta.hikariatama.ru/Fl1yd/FTG-Modules/arts.py",
"https://heta.hikariatama.ru/SkillsAngels/Modules/Complements.py",
"https://heta.hikariatama.ru/Den4ikSuperOstryyPer4ik/Astro-modules/Compliments.py",
"https://heta.hikariatama.ru/vsecoder/hikka_modules/mazemod.py",
],
"chat": [
"https://mods.hikariatama.ru/activists.py",
"https://mods.hikariatama.ru/banstickers.py",
"https://mods.hikariatama.ru/hikarichat.py",
"https://mods.hikariatama.ru/inactive.py",
"https://mods.hikariatama.ru/keyword.py",
"https://mods.hikariatama.ru/tagall.py",
"https://mods.hikariatama.ru/voicechat.py",
"https://mods.hikariatama.ru/vtt.py",
"https://heta.hikariatama.ru/SekaiYoneya/Friendly-telegram/BanMedia.py",
"https://heta.hikariatama.ru/iamnalinor/FTG-modules/swmute.py",
"https://heta.hikariatama.ru/GeekTG/FTG-Modules/filter.py",
],
"service": [
"https://mods.hikariatama.ru/account_switcher.py",
"https://mods.hikariatama.ru/surl.py",
"https://mods.hikariatama.ru/httpsc.py",
"https://mods.hikariatama.ru/img2pdf.py",
"https://mods.hikariatama.ru/latex.py",
"https://mods.hikariatama.ru/pollplot.py",
"https://mods.hikariatama.ru/sticks.py",
"https://mods.hikariatama.ru/temp_chat.py",
"https://mods.hikariatama.ru/vtt.py",
"https://heta.hikariatama.ru/vsecoder/hikka_modules/accounttime.py",
"https://heta.hikariatama.ru/vsecoder/hikka_modules/searx.py",
"https://heta.hikariatama.ru/iamnalinor/FTG-modules/swmute.py",
],
"downloaders": [
"https://mods.hikariatama.ru/musicdl.py",
"https://mods.hikariatama.ru/uploader.py",
"https://mods.hikariatama.ru/porn.py",
"https://mods.hikariatama.ru/web2file.py",
"https://heta.hikariatama.ru/AmoreForever/amoremods/instsave.py",
"https://heta.hikariatama.ru/CakesTwix/Hikka-Modules/tikcock.py",
"https://heta.hikariatama.ru/CakesTwix/Hikka-Modules/InlineYouTube.py",
"https://heta.hikariatama.ru/CakesTwix/Hikka-Modules/InlineSpotifyDownloader.py",
"https://heta.hikariatama.ru/GeekTG/FTG-Modules/downloader.py",
"https://heta.hikariatama.ru/Den4ikSuperOstryyPer4ik/Astro-modules/dl_yt_previews.py",
],
}
@loader.tds
class Presets(loader.Module):
"""Suggests new Hikka users a packs of modules to load"""
strings = {
"name": "Presets",
"_fun_title": "🪩 Entertainment modules",
"_fun_desc": "Fun modules — animations, spam, entertainment, etc.",
"_chat_title": "👥 Group Administration Helpers",
"_chat_desc": (
"The collection of tools which will help to moderate your group chat —"
" filters, notes, voice recognition, etc."
),
"_service_title": "⚙️ Useful modules",
"_service_desc": (
"Really useful modules — account management, link shortener, search engine,"
" etc."
),
"_downloaders_title": "📥 Downloaders",
"_downloaders_desc": (
"The collection of tools which will help you download/upload files from/to"
" different sources — YouTube, TikTok, Instagram, Spotify, VK Music, etc."
),
"welcome": (
"👋 <b>Hi there! Tired of scrolling through endless modules in channels? Let"
" me suggest you some pre-made collections. If you need to call this menu"
" again, simply send /presets to this bot!</b>"
),
"preset": (
"<b>{}:</b>\n <i>{}</i>\n\n⚒ <b>Modules in this collection:</b>\n\n{}"
),
"back": "🔙 Back",
"install": "📦 Install",
"installing": (
"<emoji document_id=5451732530048802485>⏳</emoji> <b>Installing preset"
" </b><code>{}</code><b>...</b>"
),
"installing_module": (
"<emoji document_id=5451732530048802485>⏳</emoji> <b>Installing preset"
" </b><code>{}</code><b> ({}/{} modules)...</b>\n\n<emoji"
" document_id=5188377234380954537>🌘</emoji> <i>Installing module"
" {}...</i>"
),
"installed": (
"<emoji document_id=5436040291507247633>🎉</emoji> <b>Preset"
" </b><code>{}</code><b> installed!</b>"
),
"already_installed": "✅ [Installed]",
}
strings_ru = {
"_fun_title": "🪩 Развлекательные модули",
"_fun_desc": "Забавные модули — анимации, спам, игры, и др.",
"_chat_title": "👥 Модули администрирования чата",
"_chat_desc": (
"Коллекция модулей, которые помогут вам администрировать чат — фильтры,"
" заметки, распознавание речи, и др."
),
"_service_title": "⚙️ Полезные модули",
"_service_desc": (
"Действительно полезные модули — управление аккаунтом, сократитель ссылок,"
" поисковик, и др."
),
"_downloaders_title": "📥 Загрузчики",
"_downloaders_desc": (
"Коллекция модулей, которые помогут вам загружать файлы в/из различных(-е)"
" источников(-и) — YouTube, TikTok, Instagram, Spotify, VK Музыка, и др."
),
"welcome": (
"👋 <b>Привет! Устал листать бесчисленное количество модулей в каналах? Могу"
" предложить тебе несколько готовых наборов. Если тебе понадобится повторно"
" вызвать это меню, отправь мне команду /presets</b>"
),
"preset": "<b>{}:</b>\n <i>{}</i>\n\n⚒ <b>Модули в этом наборе:</b>\n\n{}",
"back": "🔙 Назад",
"install": "📦 Установить",
"installing": (
"<emoji document_id=5451732530048802485>⏳</emoji> <b>Установка набора"
" >/b><code>{}</code><b>...</b>"
),
"installing_module": (
"<emoji document_id=5451732530048802485>⏳</emoji> <b>Установка набора"
" </b><code>{}</code><b> ({}/{} модулей)...</b>\n\n<emoji"
" document_id=5188377234380954537>🌘</emoji> <i>Установка модуля {}...</i>"
),
"installed": (
"<emoji document_id=5436040291507247633>🎉</emoji> <b>Набор"
" </b><code>{}</code><b> установлен!</b>"
),
"already_installed": "✅ [Установлен]",
}
strings_de = {
"_fun_title": "🪩 Spaßmodule",
"_fun_desc": "Spaßmodule — Animationen, Spam, Spiele, und mehr.",
"_chat_title": "👥 Chat-Administration",
"_chat_desc": (
"Eine Sammlung von Modulen, die dir helfen, deinen Chat zu verwalten —"
" Filter, Notizen, Spracherkennung, und mehr."
),
"_service_title": "⚙️ Nützliche Module",
"_service_desc": (
"Wirklich nützliche Module — Account-Management, Link-Shortener,"
" Suchmaschine, und mehr."
),
"_downloaders_title": "📥 Download-Module",
"_downloaders_desc": (
"Eine Sammlung von Modulen, die dir helfen, Dateien aus/ins Internet zu"
" laden — YouTube, TikTok, Instagram, Spotify, VK-Musik, und mehr."
),
"welcome": (
"👋 <b>Hallo! Hast du genug von der ewigen Liste von Modulen in den Kanälen?"
" Ich kann dir ein paar fertige Sammlungen anbieten. Wenn du dieses Menü"
" erneut aufrufen möchtest, schicke mir /presets</b>"
),
"preset": (
"<b>{}:</b>\n <i>{}</i>\n\n⚒ <b>Module in dieser Sammlung:</b>\n\n{}"
),
"back": "🔙 Zurück",
"install": "📦 Installieren",
"installing": (
"<emoji document_id=5451732530048802485>⏳</emoji> <b>Installiere Sammlung"
" </b><code>{}</code><b>...</b>"
),
"installing_module": (
"<emoji document_id=5451732530048802485>⏳</emoji> <b>Installiere Sammlung"
" </b><code>{}</code><b> ({}/{} Module)...</b>\n\n<emoji"
" document_id=5188377234380954537>🌘</emoji> <i>Installiere Modul"
" {}...</i>"
),
"installed": (
"<emoji document_id=5436040291507247633>🎉</emoji> <b>Sammlung"
" </b><code>{}</code><b> installiert!</b>"
),
"already_installed": "✅ [Installiert]",
}
strings_tr = {
"_fun_title": "🪩 Eğlence Modülleri",
"_fun_desc": "Eğlence modülleri — Animasyonlar, spam, oyunlar, vb.",
"_chat_title": "👥 Sohbet Yönetimi",
"_chat_desc": (
"Sohbetinizi yönetmenize yardımcı olacak bir modül koleksiyonu —"
" filtreler, notlar, ses tanıma, vb."
),
"_service_title": "⚙️ Faydalı Modüller",
"_service_desc": (
"Gerçekten faydalı modüller — hesap yönetimi, URL kısaltma servisi,"
" arama motoru, vb."
),
"_downloaders_title": "📥 İndirme Modülleri",
"_downloaders_desc": (
"İnternetten dosyaları indirmenize yardımcı olacak bir modül koleksiyonu —"
" YouTube, TikTok, Instagram, Spotify, VK Müzik, vb."
),
"welcome": (
"👋 <b>Merhaba! Kanallardaki sonsuz modül listesinden sıkıldın mı? Sana"
" birkaç hazır koleksiyon sunabilirim. Bu menüyü tekrar görüntülemek"
" istersen, /presets komutunu kullanabilirsin</b>"
),
"preset": (
"<b>{}:</b>\n <i>{}</i>\n\n⚒ <b>Bu koleksiyonda bulunan"
" modüller:</b>\n\n{}"
),
"back": "🔙 Geri",
"install": "📦 Kur",
"installing": (
"<emoji document_id=5451732530048802485>⏳</emoji> <b>Koleksiyon"
" </b><code>{}</code><b> kuruluyor...</b>"
),
"installing_module": (
"<emoji document_id=5451732530048802485>⏳</emoji> <b>Koleksiyon"
" </b><code>{}</code><b> ({}/{} modül) kuruluyor...</b>\n\n<emoji"
" document_id=5188377234380954537>🌘</emoji> <i>Modül {} kuruluyor...</i>"
),
"installed": (
"<emoji document_id=5436040291507247633>🎉</emoji> <b>Koleksiyon"
" </b><code>{}</code><b> kuruldu!</b>"
),
"already_installed": "✅ [Zaten Kurulu]",
}
strings_uz = {
"_fun_title": "🪩 Qiziqarli modullar",
"_fun_desc": "Qiziqarli modullar — animatsiya, spam, o'yin, va boshqa.",
"_chat_title": "👥 Chat boshqarish modullar",
"_chat_desc": (
"Chat boshqarish modullar uchun yordam beruvchi koleksiya ham mavjud —"
" filtrlar, qaydlar, tili aniqlash, va boshqa."
),
"_service_title": "⚙️ Foydali modullar",
"_service_desc": (
"Foydali modullar — hisobni boshqarish, havola qisqartirish,"
" qidiruv injini, va boshqa."
),
"_downloaders_title": "📥 Yuklab oluvchilar",
"_downloaders_desc": (
"Internetdan fayllarni yuklab olish uchun yordam beruvchi koleksiya ham"
" mavjud — YouTube, TikTok, Instagram, Spotify, VK Music, va boshqa."
),
"welcome": (
"👋 <b>Salom! Kanallarda son-sanoqsiz modullarni almashtirishdan"
" charchadingizmi? Men sizga tayyor to'plamlarni taklif qila olaman. Agar"
" siz ushbu menyuni yana chaqirib olishingiz kerak bo'lsa, /presets"
" buyrug'ini menga yuboring</b>"
),
"preset": (
"<b>{}:</b>\n <i>{}</i>\n\n⚒ <b>Koleksiyada mavjud modullar:</b>\n\n{}"
),
"back": "🔙 Orqaga",
"install": "📦 O'rnatish",
"installing": (
"<emoji document_id=5451732530048802485>⏳</emoji> <b>Koleksiyani"
" </b><code>{}</code><b> o'rnatilmoqda...</b>"
),
"installing_module": (
"<emoji document_id=5451732530048802485>⏳</emoji> <b>Koleksiyani"
" </b><code>{}</code><b> ({}/{} modul) o'rnatilmoqda...</b>\n\n<emoji"
" document_id=5188377234380954537>🌘</emoji> <i>Modul {}"
" o'rnatilmoqda...</i>"
),
}
strings_es = {
"_fun_title": "🪩 Módulos divertidos",
"_fun_desc": "Módulos divertidos — animaciones, spam, juegos, etc.",
"_chat_title": "👥 Módulos de administración de chat",
"_chat_desc": (
"También hay ayuda para módulos de administración de chat — filtros, "
"registros, detección de idiomas, etc."
),
"_service_title": "⚙️ Módulos útiles",
"_service_desc": (
"Módulos útiles — administración de cuentas, acortamiento de enlaces, "
"motores de búsqueda, etc."
),
"_downloaders_title": "📥 Descargadores",
"_downloaders_desc": (
"También hay ayuda — YouTube, TikTok, Instagram, Spotify, etc."
),
"welcome": (
"👋 <b>¡Hola! ¿Te sorprendió ver muchos módulos en el canal?"
"También hay algunas colecciones predefinidas. Para volver a abrir este"
"menú, envíe el comando /presets</b>"
),
"preset": (
"<b>{}:</b>\n <i>{}</i>\n\n⚒ <b>Módulos incluidos en la"
" colección:</b>\n\n{}"
),
"back": "🔙 Atrás",
"install": "📦 Instalar",
"installing": (
"<emoji document_id=5451732530048802485>⏳</emoji> <b>Instalando la"
" colección </b><code>{}</code><b>...</b>"
),
"installing_module": (
"<emoji document_id=5451732530048802485>⏳</emoji> <b>Instalando la"
" colección </b><code>{}</code><b> ({}/{} módulos)...</b>\n\n<emoji"
" document_id=5188377234380954537>🌘</emoji> <i>Instalando el módulo"
" {}...</i>"
),
}
async def client_ready(self):
self._markup = utils.chunks(
[
{
"text": self.strings(f"_{preset}_title"),
"callback": self._preset,
"args": (preset,),
}
for preset in PRESETS
],
1,
)
if self.get("sent"):
return
self.set("sent", True)
await self._menu()
async def _menu(self):
await self.inline.bot.send_message(
self._client.tg_id,
self.strings("welcome"),
reply_markup=self.inline.generate_markup(self._markup),
)
async def _back(self, call: InlineCall):
await call.edit(self.strings("welcome"), reply_markup=self._markup)
async def _install(self, call: InlineCall, preset: str):
await call.delete()
m = await self._client.send_message(
self.inline.bot_id, self.strings("installing").format(preset)
)
for i, module in enumerate(PRESETS[preset]):
await m.edit(
self.strings("installing_module").format(
preset, i, len(PRESETS[preset]), module
)
)
try:
await self.lookup("loader").download_and_install(module, None)
except Exception:
logger.exception("Failed to install module %s", module)
await asyncio.sleep(1)
if self.lookup("loader")._fully_loaded:
self.lookup("loader")._update_modules_in_db()
await m.edit(self.strings("installed").format(preset))
await self._menu()
def _is_installed(self, link: str) -> bool:
return any(
link.strip().lower() == installed.strip().lower()
for installed in self.lookup("loader").get("loaded_modules", {}).values()
)
async def _preset(self, call: InlineCall, preset: str):
await call.edit(
self.strings("preset").format(
self.strings(f"_{preset}_title"),
self.strings(f"_{preset}_desc"),
"\n".join(
map(
lambda x: x[0],
sorted(
[
(
"{} <b>{}</b>".format(
(
self.strings("already_installed")
if self._is_installed(link)
else "▫️"
),
link.rsplit("/", maxsplit=1)[1].split(".")[0],
),
int(self._is_installed(link)),
)
for link in PRESETS[preset]
],
key=lambda x: x[1],
reverse=True,
),
)
),
),
reply_markup=[
{"text": self.strings("back"), "callback": self._back},
{
"text": self.strings("install"),
"callback": self._install,
"args": (preset,),
},
],
)
async def aiogram_watcher(self, message: BotInlineMessage):
if message.text != "/presets" or message.from_user.id != self._client.tg_id:
return
await self._menu()