""" █▀▀ ▄▀█ █▄▀ █▀▀ █▀ ▀█▀ █░█░█ █ ▀▄▀ █▄▄ █▀█ █░█ ██▄ ▄█ ░█░ ▀▄▀▄▀ █ █░█ Copyleft 2022 t.me/CakesTwix This program is free software; you can redistribute it and/or modify """ __version__ = (2, 0, 1) # meta pic: https://seeklogo.com/images/H/hentai-haven-logo-B9D8C4B3B8-seeklogo.com.png # meta developer: @cakestwix_mods # requires: NHentai-API import logging from typing import Union from NHentai import NHentaiAsync, CloudFlareSettings from .. import loader, utils from ..inline import GeekInlineQuery, rand from aiogram.utils.markdown import hlink import asyncio logger = logging.getLogger(__name__) # From Hikka https://github.com/hikariatama/Hikka/commit/03f7c71557acd6e14e816df4de932dd55668fd97#diff-b020ffc1f4d0e66f2cfd8724370d8ee28197d945f9d0f2cf7e4358717e71e27cR439-R441 def chunks(_list: Union[list, tuple, set], n: int, /) -> list: """Split provided `_list` into chunks of `n`""" return [_list[i : i + n] for i in range(0, len(_list), n)] def StringBuilder(Hentai): tags = "".join(f"{hlink(tag.name, tag.url)} " for tag in Hentai.tags) langs = "".join(f"{hlink(lang.name, lang.url)} " for lang in Hentai.languages) text = f"{hlink(Hentai.title.english, Hentai.url)} [{Hentai.id}]\n\n" text += f"{tags} \n\n" text += f"Language: {langs} \n" text += f"❤️ {Hentai.total_favorites} | 📄 {Hentai.total_pages}" return text @loader.tds class NHentaiMod(loader.Module): """🍓 Hentai doujin module 18+""" strings = { "name": "NHentai", "no_tags": "🎞 No hentai by your query :(", "no_digit": "1️⃣ Please give me a number.", } strings_ru = { "name": "🍓 NHentai", "no_tags": "🎞 Не нашел хентая по твоему запросу :(", "no_digit": "1️⃣ Пожалуйста, дайте мне число.", } def __init__(self): self.config = loader.ModuleConfig( "CONFIG_CSRFTOKEN", "", lambda: self.strings("cfg_csrftoken"), "CONFIG_CF_CLEARANCE", "", lambda: self.strings("cfg_cf_clearance"), ) async def client_ready(self, client, db) -> None: self.nhentai_async = NHentaiAsync(request_settings=CloudFlareSettings(csrftoken=self.config["CONFIG_CSRFTOKEN"], cf_clearance=self.config["CONFIG_CF_CLEARANCE"])) async def nhrandomcmd(self, message): """🎲 Random hentai doujin""" hentai = await self.nhentai_async.get_random() await message.delete() await message.client.send_file(message.chat_id, hentai.cover.src, caption=StringBuilder(hentai)) async def nhlastcmd(self, message): """⌚️ Latest hentai doujin""" hentai = await self.nhentai_async.get_doujin((await self.nhentai_async.get_page(page=1)).doujins[0].id) await message.delete() await message.client.send_file(message.chat_id, hentai.cover.src, caption=StringBuilder(hentai)) async def nhidcmd(self, message): """1️⃣ Hentai doujin by id""" if args:= utils.get_args_raw(message): if not args.isdigit(): return await message.answer(message, self.strings["no_digit"]) hentai = await self.nhentai_async.get_doujin(args) await message.client.send_file(message.chat_id, hentai.cover.src, caption=StringBuilder(hentai)) async def nhsearchcmd(self, message): """🔎 Search hentai doujin""" if args:= utils.get_args_raw(message): hentai = await self.nhentai_async.search(args) markup = [[{"text":"Link", "url":hentai.doujins[0].url}]] if len(hentai.doujins) != 1: markup.append([{"text":"➡️","callback": self.hentai_pagination__callback, "args": (hentai.doujins, 0, "+")}]) await self.inline.form( text=StringBuilder(hentai.doujins[0]), message=message, photo=hentai.doujins[0].cover.src, reply_markup=markup, ) # Just callbacks async def hentai_pagination__callback(self, call, list_doujins, index, type_button): markup = [[{"text":"Link", "url": list_doujins[index].url}],[]] if type_button == "+": index += 1 markup[1].append({"text":"⬅️","callback": self.hentai_pagination__callback, "args": (list_doujins, index, "-")}) if index != len(list_doujins) - 1: markup[1].append({"text":"➡️","callback": self.hentai_pagination__callback, "args": (list_doujins, index, "+")}) else: index -= 1 if index != 0: markup[1].append({"text":"⬅️","callback": self.hentai_pagination__callback, "args": (list_doujins, index, "-")}) markup[1].append({"text":"➡️","callback": self.hentai_pagination__callback, "args": (list_doujins, index, "+")}) await call.edit(text=StringBuilder(list_doujins[index]), reply_markup=markup, photo=list_doujins[index].cover.src)