From 41589816f3a3edfe00456b9759f80eea2381d6c0 Mon Sep 17 00:00:00 2001 From: Darius Date: Fri, 31 Oct 2025 23:04:29 +0100 Subject: [PATCH] initial commit --- .env.example | 2 + .gitignore | 5 +++ bot.py | 101 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 2 + 4 files changed, 110 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 bot.py create mode 100644 requirements.txt diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..2a90589 --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +PREFIX=prefixLike! +DISCORD_TOKEN=discordToken diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c9c3224 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.env +.env.* +!.env.example +dist +db diff --git a/bot.py b/bot.py new file mode 100644 index 0000000..5837834 --- /dev/null +++ b/bot.py @@ -0,0 +1,101 @@ +import nextcord +from nextcord.ext import commands +import aiohttp +import os +from dotenv import load_dotenv + +# Set up intents +intents = nextcord.Intents.default() +intents.message_content = True # Required to read message content + +load_dotenv() + +# 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}!") + + +# 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 + """ + + # 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" + else: + # Falls nur die ID gegeben wurde + cdn_url = f"https://cdn.7tv.app/emote/{link}/4x.webp" + + 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 + + image_data = await resp.read() + + # Ü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 + + # 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!\n" + f"Name: `{name}`\n" + f"Größe: {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}\n" + f"Mö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(os.getenv("DISCORD_TOKEN")) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..cdbf47f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +nextcord[speed] +python-dotenv