add handling for different sizes (if too big)

This commit is contained in:
Darius
2025-11-01 15:06:57 +01:00
parent 41589816f3
commit 8516e9ffc8

64
bot.py
View File

@@ -3,20 +3,22 @@ from nextcord.ext import commands
import aiohttp import aiohttp
import os import os
from dotenv import load_dotenv from dotenv import load_dotenv
import sys
# Set up intents # Set up intents
intents = nextcord.Intents.default() intents = nextcord.Intents.default()
intents.message_content = True # Required to read message content intents.message_content = True # Required to read message content
load_dotenv() 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 # Create bot instance
bot = commands.Bot(command_prefix=os.getenv("PREFIX"), intents=intents) bot = commands.Bot(command_prefix=prefix, intents=intents)
@bot.event
async def on_ready():
print(f"Logged in as {bot.user}!")
# PREFIX COMMAND für 7TV Import # PREFIX COMMAND für 7TV Import
@@ -28,37 +30,46 @@ async def seven_tv_import(ctx, name: str, link: str):
Beispiel: !7tvimport PogChamp 7tv.app/emotes/603cac391cd55c0014d989be Beispiel: !7tvimport PogChamp 7tv.app/emotes/603cac391cd55c0014d989be
""" """
# Lade-Nachricht
loading_msg = await ctx.send("⏳ Lade Emote herunter...") loading_msg = await ctx.send("⏳ Lade Emote herunter...")
# Konstruiere die CDN URL
if "7tv.app/emotes/" in link or "7tv.io/emotes/" in link: if "7tv.app/emotes/" in link or "7tv.io/emotes/" in link:
emote_id = link.split("/emotes/")[-1].split("?")[0] 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"): elif link.startswith("cdn.7tv.app"):
cdn_url = f"https://{link}/4x.webp" emote_id = link.split("/emote/")[-1].split("/")[0]
else: else:
# Falls nur die ID gegeben wurde # 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: try:
# Bild vom CDN herunterladen
async with aiohttp.ClientSession() as session: async with aiohttp.ClientSession() as session:
async with session.get(cdn_url) as resp: for size in sizes:
if resp.status != 200: cdn_url = f"https://cdn.7tv.app/emote/{emote_id}/{size}.webp"
await loading_msg.edit(
content=f"❌ Fehler: Konnte das Bild nicht herunterladen! (Status: {resp.status})\n"
f"URL: {cdn_url}"
)
return
await loading_msg.edit(content=f"⏳ Versuche {size}.webp...")
async with session.get(cdn_url) as resp:
if resp.status == 200:
image_data = await resp.read() image_data = await resp.read()
# Überprüfe Dateigröße (Discord Limit: 256KB) # Überprüfe Dateigröße (Discord Limit: 256KB)
if len(image_data) > 256000: if len(image_data) <= 256000:
used_size = size
break
else:
await loading_msg.edit( await loading_msg.edit(
content=f"❌ Fehler: Das Bild ist zu groß! ({len(image_data) / 1000:.1f}KB > 256KB)\n" content=f"⚠️ {size}.webp ist zu groß ({len(image_data) / 1000:.1f}KB), versuche kleinere Version..."
f"Versuche es mit einer kleineren 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 return
@@ -68,9 +79,7 @@ async def seven_tv_import(ctx, name: str, link: str):
) )
await loading_msg.edit( await loading_msg.edit(
content=f"✅ Emote {emoji} erfolgreich hinzugefügt!\n" content=f"✅ Emote {emoji} erfolgreich hinzugefügt!\nName: `{name}`\nGröße: `{used_size}.webp` ({len(image_data) / 1000:.1f}KB)"
f"Name: `{name}`\n"
f"Größe: {len(image_data) / 1000:.1f}KB"
) )
except nextcord.Forbidden: except nextcord.Forbidden:
@@ -79,8 +88,7 @@ async def seven_tv_import(ctx, name: str, link: str):
) )
except nextcord.HTTPException as e: except nextcord.HTTPException as e:
await loading_msg.edit( await loading_msg.edit(
content=f"❌ Discord-Fehler: {e}\n" content=f"❌ Discord-Fehler: {e}\nMögliche Gründe: Server-Emoji-Limit erreicht, ungültiger Name, oder Netzwerkfehler."
f"Mögliche Gründe: Server-Emoji-Limit erreicht, ungültiger Name, oder Netzwerkfehler."
) )
except Exception as e: except Exception as e:
await loading_msg.edit(content=f"❌ Unerwarteter Fehler: {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!") await ctx.send("❌ Ich habe keine Berechtigung, Emojis zu verwalten!")
bot.run(os.getenv("DISCORD_TOKEN")) bot.run(discordToken)