From 8516e9ffc807588bd0b78c06736d7dc7aa3399c1 Mon Sep 17 00:00:00 2001 From: Darius Date: Sat, 1 Nov 2025 15:06:57 +0100 Subject: [PATCH] add handling for different sizes (if too big) --- bot.py | 74 ++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/bot.py b/bot.py index 5837834..860c00b 100644 --- a/bot.py +++ b/bot.py @@ -3,20 +3,22 @@ from nextcord.ext import commands import aiohttp import os from dotenv import load_dotenv +import sys # Set up intents intents = nextcord.Intents.default() intents.message_content = True # Required to read message content load_dotenv() +prefix = os.getenv("PREFIX") +discordToken = os.getenv("DISCORD_TOKEN") + +if not prefix or not discordToken: + print("❌ Fehler: env variable ist nicht gesetzt!") + sys.exit(1) # Create bot instance -bot = commands.Bot(command_prefix=os.getenv("PREFIX"), intents=intents) - - -@bot.event -async def on_ready(): - print(f"Logged in as {bot.user}!") +bot = commands.Bot(command_prefix=prefix, intents=intents) # PREFIX COMMAND für 7TV Import @@ -28,39 +30,48 @@ async def seven_tv_import(ctx, name: str, link: str): Beispiel: !7tvimport PogChamp 7tv.app/emotes/603cac391cd55c0014d989be """ - # Lade-Nachricht loading_msg = await ctx.send("⏳ Lade Emote herunter...") - # Konstruiere die CDN URL if "7tv.app/emotes/" in link or "7tv.io/emotes/" in link: emote_id = link.split("/emotes/")[-1].split("?")[0] - cdn_url = f"https://cdn.7tv.app/emote/{emote_id}/4x.webp" elif link.startswith("cdn.7tv.app"): - cdn_url = f"https://{link}/4x.webp" + emote_id = link.split("/emote/")[-1].split("/")[0] else: # Falls nur die ID gegeben wurde - cdn_url = f"https://cdn.7tv.app/emote/{link}/4x.webp" + emote_id = link + + # Versuche verschiedene Auflösungen + sizes = ["4x", "3x", "2x", "1x"] + image_data = None + used_size = None try: - # Bild vom CDN herunterladen async with aiohttp.ClientSession() as session: - async with session.get(cdn_url) as resp: - if resp.status != 200: - await loading_msg.edit( - content=f"❌ Fehler: Konnte das Bild nicht herunterladen! (Status: {resp.status})\n" - f"URL: {cdn_url}" - ) - return + for size in sizes: + cdn_url = f"https://cdn.7tv.app/emote/{emote_id}/{size}.webp" - image_data = await resp.read() + await loading_msg.edit(content=f"⏳ Versuche {size}.webp...") - # Überprüfe Dateigröße (Discord Limit: 256KB) - if len(image_data) > 256000: - await loading_msg.edit( - content=f"❌ Fehler: Das Bild ist zu groß! ({len(image_data) / 1000:.1f}KB > 256KB)\n" - f"Versuche es mit einer kleineren Version." - ) - return + async with session.get(cdn_url) as resp: + if resp.status == 200: + image_data = await resp.read() + + # Überprüfe Dateigröße (Discord Limit: 256KB) + if len(image_data) <= 256000: + used_size = size + break + else: + await loading_msg.edit( + content=f"⚠️ {size}.webp ist zu groß ({len(image_data) / 1000:.1f}KB), versuche kleinere Version..." + ) + continue + + # Wenn kein passendes Bild gefunden wurde + if image_data is None or used_size is None: + await loading_msg.edit( + content=f"❌ Fehler: Konnte kein passendes Bild finden!\nEmote ID: {emote_id}" + ) + return # Erstelle das Emoji emoji = await ctx.guild.create_custom_emoji( @@ -68,9 +79,7 @@ async def seven_tv_import(ctx, name: str, link: str): ) await loading_msg.edit( - content=f"✅ Emote {emoji} erfolgreich hinzugefügt!\n" - f"Name: `{name}`\n" - f"Größe: {len(image_data) / 1000:.1f}KB" + content=f"✅ Emote {emoji} erfolgreich hinzugefügt!\nName: `{name}`\nGröße: `{used_size}.webp` ({len(image_data) / 1000:.1f}KB)" ) except nextcord.Forbidden: @@ -79,8 +88,7 @@ async def seven_tv_import(ctx, name: str, link: str): ) except nextcord.HTTPException as e: await loading_msg.edit( - content=f"❌ Discord-Fehler: {e}\n" - f"Mögliche Gründe: Server-Emoji-Limit erreicht, ungültiger Name, oder Netzwerkfehler." + content=f"❌ Discord-Fehler: {e}\nMögliche Gründe: Server-Emoji-Limit erreicht, ungültiger Name, oder Netzwerkfehler." ) except Exception as e: await loading_msg.edit(content=f"❌ Unerwarteter Fehler: {e}") @@ -98,4 +106,4 @@ async def check_perms(ctx): await ctx.send("❌ Ich habe keine Berechtigung, Emojis zu verwalten!") -bot.run(os.getenv("DISCORD_TOKEN")) +bot.run(discordToken)