"""
█▀▀ ▄▀█ █▄▀ █▀▀ █▀ ▀█▀ █░█░█ █ ▀▄▀
█▄▄ █▀█ █░█ ██▄ ▄█ ░█░ ▀▄▀▄▀ █ █░█
Copyleft 2022 t.me/CakesTwix
This program is free software; you can redistribute it and/or modify
"""
__version__ = (1, 0, 1)
# scope: inline
# scope: geektg_only
# scope: geektg_min 3.1.15
# meta pic: https://img.icons8.com/external-others-iconmarket/512/000000/external-national-flags-others-iconmarket-5.png
# meta developer: @cakestwix_mods
import asyncio
import aiohttp
import logging
from aiogram.utils.markdown import hlink
from aiogram.types import (
InlineQueryResultArticle,
InputTextMessageContent,
)
from ..inline import GeekInlineQuery, rand
from .. import loader, utils
logger = logging.getLogger(__name__)
@loader.unrestricted
@loader.ratelimit
@loader.tds
class HurtomMod(loader.Module):
"""Український торрент трекер"""
strings = {
"name": "InlineHurtom",
"no_args": "🚫 Будь ласка, введіть ключові слова, за якими я знайду Вам тему",
"no_args_inline": "Будь ласка, введіть ключові слова, за якими я знайду Вам тему",
"no_args_inline_description": "ℹ Наприклад : Кот",
"no_torrent": "🚫 Не було знайдено жодного торрента",
"forum_name": "Назва Розділу : ",
"comments": "Коментарі : ",
"size": "Розмір : ",
"size_inline": "Розмір: ",
"seeders": "Роздають : ",
"leechers": "Завантажують : ",
}
def stringBuilder(self, json):
text = "{}\n".format(hlink(json["title"], json["link"]))
text += (
self.strings["forum_name"]
+ json["forum_name"]
+ " | "
+ json["forum_parent"]
+ "\n"
)
text += self.strings["comments"] + json["comments"] + "\n"
text += self.strings["size"] + json["size"] + "\n"
text += self.strings["seeders"] + json["seeders"] + "\n"
text += self.strings["leechers"] + json["leechers"] + "\n"
return text
@loader.unrestricted
@loader.ratelimit
async def hsearchcmd(self, message):
"""Пошук по трекеру toloka.to (повертає перший елемент)"""
args = utils.get_args_raw(message)
if not args:
await utils.answer(message, self.strings["no_args"])
await asyncio.sleep(5)
await message.delete()
return
async with aiohttp.ClientSession() as session:
async with session.get(f"https://toloka.to/api.php?search={args}") as get:
if not get.ok:
return
data = await get.json()
if data == []:
await utils.answer(message, self.strings["no_torrent"])
return
await session.close()
await utils.answer(message, self.stringBuilder(data[0]))
# Inline
async def hsearch_inline_handler(self, query: GeekInlineQuery) -> None:
"""
Пошук по трекеру toloka.to (Inline)
@allow: all
"""
text = query.args
if not text:
await query.answer(
[
InlineQueryResultArticle(
id=1,
title=self.strings["no_args_inline"],
description=self.strings["no_args_inline_description"],
input_message_content=InputTextMessageContent(
self.strings["no_args"],
"HTML",
disable_web_page_preview=True,
),
thumb_url="https://img.icons8.com/android/128/26e07f/ball-point-pen.png",
thumb_width=128,
thumb_height=128,
)
],
cache_time=0,
)
return
async with aiohttp.ClientSession() as session:
async with session.get(f"https://toloka.to/api.php?search={text}") as get:
if not get.ok:
return
data = await get.json()
if data == []:
return
await session.close()
inline_query = [
InlineQueryResultArticle(
id=rand(50),
title=torrent["title"],
description=self.strings["size_inline"] + torrent["size"],
input_message_content=InputTextMessageContent(
self.stringBuilder(torrent), "HTML", disable_web_page_preview=True
),
)
for torrent in data
]
await query.answer(inline_query, cache_time=0)