Fix multiple bug et optimisation

This commit is contained in:
Mathis 2026-06-18 17:40:55 +02:00
parent b0535af75c
commit 886bfa4b1e
2 changed files with 66 additions and 15 deletions

View file

@ -121,12 +121,45 @@ class Goodbye(commands.Cog):
kuby_logger.error(f"[Goodbye] Police introuvable: {font_path}") kuby_logger.error(f"[Goodbye] Police introuvable: {font_path}")
raise FileNotFoundError(f"Police introuvable: {font_path}") raise FileNotFoundError(f"Police introuvable: {font_path}")
font_large = ImageFont.truetype(font_large_path, 70) # Adapter le texte pour éviter les débordements et afficher correctement le nom
font_small = ImageFont.truetype(font_small_path, 50) line1_text = "AU REVOIR"
line2_text = username.upper()
line3_text = (server_name or "OMEGA KUBE").upper()
# Dessiner uniquement le nom du serveur (comme pour welcome) text_area_left = 300
display_name = server_name if server_name else "OMEGA KUBE" text_area_right = background.width - 20
draw.text((325, 135), display_name, font=font_large, fill=(255,255,255)) text_area_width = text_area_right - text_area_left
text_area_center_x = text_area_left + text_area_width // 2
def fit_font(font_path, text, max_size, max_width):
size = max_size
while size > 10:
font = ImageFont.truetype(font_path, size)
bbox = draw.textbbox((0, 0), text, font=font)
w = bbox[2] - bbox[0]
if w <= max_width:
h = bbox[3] - bbox[1]
return font, w, h
size -= 2
font = ImageFont.truetype(font_path, 10)
bbox = draw.textbbox((0, 0), text, font=font)
return font, bbox[2] - bbox[0], bbox[3] - bbox[1]
font1, w1, h1 = fit_font(font_large_path, line1_text, 65, text_area_width)
font2, w2, h2 = fit_font(font_small_path, line2_text, 38, text_area_width)
font3, w3, h3 = fit_font(font_large_path, line3_text, 65, text_area_width)
spacing_1_2 = 12
spacing_2_3 = 12
total_height = h1 + spacing_1_2 + h2 + spacing_2_3 + h3
start_y = (background.height - total_height) // 2
y = start_y
draw.text((text_area_center_x - w1 // 2, y), line1_text, font=font1, fill=(255, 255, 255))
y += h1 + spacing_1_2
draw.text((text_area_center_x - w2 // 2, y), line2_text, font=font2, fill=(255, 255, 255))
y += h2 + spacing_2_3
draw.text((text_area_center_x - w3 // 2, y), line3_text, font=font3, fill=(255, 255, 255))
# Ajouter l'avatar # Ajouter l'avatar
avatar = Image.open(io.BytesIO(avatar_bytes)).convert("RGBA").resize((224, 224), Image.LANCZOS) avatar = Image.open(io.BytesIO(avatar_bytes)).convert("RGBA").resize((224, 224), Image.LANCZOS)
@ -188,9 +221,10 @@ class Goodbye(commands.Cog):
if img: if img:
embed = disnake.Embed( embed = disnake.Embed(
description=f"{member.mention} vient de nous quitter.\n\n{message_text}\n\n⌛ **Avait rejoint :** {joined_message}", description=f"{member.mention} vient de nous quitter.\n\n{message_text}",
color=0x7289DA color=0x9B59B6
) )
embed.set_footer(text=f"avait rejoint · {joined_message}")
embed.set_image(url="attachment://goodbye.png") embed.set_image(url="attachment://goodbye.png")
await channel.send(embed=embed, file=disnake.File(img, filename="goodbye.png")) await channel.send(embed=embed, file=disnake.File(img, filename="goodbye.png"))
kuby_logger.info(f"[Goodbye] Message de départ avec image envoyé pour {member.name}") kuby_logger.info(f"[Goodbye] Message de départ avec image envoyé pour {member.name}")
@ -198,9 +232,10 @@ class Goodbye(commands.Cog):
# Fallback : image non générée # Fallback : image non générée
kuby_logger.warning(f"[Goodbye] Image non générée pour {member.name}, envoi d'un message texte") kuby_logger.warning(f"[Goodbye] Image non générée pour {member.name}, envoi d'un message texte")
embed = disnake.Embed( embed = disnake.Embed(
description=f"{member.mention} vient de nous quitter.\n\n{message_text}\n\n⌛ **Avait rejoint :** {joined_message}", description=f"{member.mention} vient de nous quitter.\n\n{message_text}",
color=0x7289DA color=0x9B59B6
) )
embed.set_footer(text=f"avait rejoint · {joined_message}")
await channel.send(embed=embed) await channel.send(embed=embed)
except Exception as e: except Exception as e:

View file

@ -191,11 +191,27 @@ class Welcome(commands.Cog):
if welcome_dm_text and not member.bot: if welcome_dm_text and not member.bot:
kuby_logger.info(f"✉️ [Welcome] Tentative d'envoi de DM à {member.name}") kuby_logger.info(f"✉️ [Welcome] Tentative d'envoi de DM à {member.name}")
try: try:
formatted_message = welcome_dm_text.format( template_values = {
username=member.name, # Alias populaires
servername=member.guild.name, "user": member.mention,
member_count=member.guild.member_count "username": member.name,
) "member": member.mention,
"member_name": member.name,
"server": member.guild.name,
"servername": member.guild.name,
"guild": member.guild.name,
"guild_name": member.guild.name,
"member_count": member.guild.member_count,
"count": member.guild.member_count,
"members": member.guild.member_count,
}
class SafeDict(dict):
def __missing__(self, key):
return "{" + key + "}"
formatted_message = welcome_dm_text.format_map(SafeDict(template_values))
# On combine le texte et le GIF dans un Embed élégant pour masquer le lien brut # On combine le texte et le GIF dans un Embed élégant pour masquer le lien brut
gif_url = "https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExNXV1NW02NTk0bGF2ZHcyMGFna2F6amRrbGpobGpsMHowOW5xa2E5eCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/ZtFuW4rsUbfrRzPauJ/giphy.gif" gif_url = "https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExNXV1NW02NTk0bGF2ZHcyMGFna2F6amRrbGpobGpsMHowOW5xa2E5eCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/ZtFuW4rsUbfrRzPauJ/giphy.gif"
embed = disnake.Embed( embed = disnake.Embed(