from interactions import Extension, slash_command, SlashContext, EmbedAttachment, EmbedFooter, EmbedField, Embed import requests from random import choice from urllib.parse import quote from datetime import datetime, timedelta tag_blacklist = ["loli", "shota", "gore", "guro", "scat", "3d", "futanari", "animated", "video"] timeout = datetime.now() class YuriExtension(Extension): @slash_command(name="yuri", description="Pošle náhodný yuri obrázek z Gelbooru (NSFW pouze v NSFW kanálech)") async def yuri(self, ctx: SlashContext): global timeout await ctx.defer() if datetime.now() < timeout: await ctx.respond(ephemeral="Počkej chvíli než pošleš tenhle příkaz znovu") return timeout = datetime.now() + timedelta(seconds=5) p = "yuri sort:random" for tag in tag_blacklist: p += f" -{tag}" if not ctx.channel.nsfw: p += " rating:general score:>100" else: p += " rating:explicit score:>100" r = requests.get("https://gelbooru.com/index.php?page=dapi&s=post&q=index&api_key=anonymous&user_id=9455&json" f"=1&tags={quote(p)}", headers={"User-Agent": "Maplebot/1.0.0"}) if r.status_code > 399: print("Error while requesting from Gelbooru!") print(r.status_code) print(r.json()) await ctx.respond(ephemeral=True, content="Chyba při zpracování požadavku") return posts = r.json()["post"] pick = choice(posts) while pick["has_children"] is True and pick["rating"] != "general": pick = choice(posts) tags = pick["tags"] if len(tags) >= 4096: tags = tags[0:4093] + "..." await ctx.respond(embed=Embed( title="Čáry máry!", url=f"https://gelbooru.com/index.php?page=post&s=view&id={pick['id']}", images=[EmbedAttachment(url=pick["file_url"])], description=tags, footer=EmbedFooter(text="Skrz gelbooru.com", icon_url="https://gelbooru.com/favicon.png") ) )