import nextcord 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=prefix, intents=intents) # PREFIX COMMAND für 7TV Import @bot.command(name="7tvimport") async def seven_tv_import(ctx, name: str, link: str): """Importiert ein 7TV Emote direkt vom CDN Verwendung: !7tvimport Beispiel: !7tvimport PogChamp 7tv.app/emotes/603cac391cd55c0014d989be """ loading_msg = await ctx.send("⏳ Lade Emote herunter...") if "7tv.app/emotes/" in link or "7tv.io/emotes/" in link: emote_id = link.split("/emotes/")[-1].split("?")[0] elif link.startswith("cdn.7tv.app"): emote_id = link.split("/emote/")[-1].split("/")[0] else: # Falls nur die ID gegeben wurde emote_id = link # Versuche verschiedene Auflösungen sizes = ["4x", "3x", "2x", "1x"] image_data = None used_size = None try: async with aiohttp.ClientSession() as session: for size in sizes: cdn_url = f"https://cdn.7tv.app/emote/{emote_id}/{size}.webp" 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() # Ü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( name=name, image=image_data, reason=f"7TV Import von {ctx.author}" ) await loading_msg.edit( content=f"✅ Emote {emoji} erfolgreich hinzugefügt!\nName: `{name}`\nGröße: `{used_size}.webp` ({len(image_data) / 1000:.1f}KB)" ) except nextcord.Forbidden: await loading_msg.edit( content="❌ Fehler: Ich habe keine Berechtigung, Emojis zu verwalten!" ) except nextcord.HTTPException as e: await loading_msg.edit( 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}") # PREFIX COMMAND für Permissions Check @bot.command(name="checkperms") async def check_perms(ctx): """Überprüfe Bot-Berechtigungen""" perms = ctx.guild.me.guild_permissions if perms.manage_emojis: await ctx.send("✅ Ich habe die Berechtigung, Emojis zu verwalten!") else: await ctx.send("❌ Ich habe keine Berechtigung, Emojis zu verwalten!") bot.run(discordToken)