add handling for different sizes (if too big)
This commit is contained in:
74
bot.py
74
bot.py
@@ -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,39 +30,48 @@ 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
|
|
||||||
|
|
||||||
image_data = await resp.read()
|
await loading_msg.edit(content=f"⏳ Versuche {size}.webp...")
|
||||||
|
|
||||||
# Überprüfe Dateigröße (Discord Limit: 256KB)
|
async with session.get(cdn_url) as resp:
|
||||||
if len(image_data) > 256000:
|
if resp.status == 200:
|
||||||
await loading_msg.edit(
|
image_data = await resp.read()
|
||||||
content=f"❌ Fehler: Das Bild ist zu groß! ({len(image_data) / 1000:.1f}KB > 256KB)\n"
|
|
||||||
f"Versuche es mit einer kleineren Version."
|
# Überprüfe Dateigröße (Discord Limit: 256KB)
|
||||||
)
|
if len(image_data) <= 256000:
|
||||||
return
|
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
|
# Erstelle das Emoji
|
||||||
emoji = await ctx.guild.create_custom_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(
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user