diff --git a/commandes/goodbye.py b/commandes/goodbye.py index 07406f3..9b23c9b 100644 --- a/commandes/goodbye.py +++ b/commandes/goodbye.py @@ -121,12 +121,45 @@ class Goodbye(commands.Cog): kuby_logger.error(f"[Goodbye] Police introuvable: {font_path}") raise FileNotFoundError(f"Police introuvable: {font_path}") - font_large = ImageFont.truetype(font_large_path, 70) - font_small = ImageFont.truetype(font_small_path, 50) - - # Dessiner uniquement le nom du serveur (comme pour welcome) - display_name = server_name if server_name else "OMEGA KUBE" - draw.text((325, 135), display_name, font=font_large, fill=(255,255,255)) + # Adapter le texte pour éviter les débordements et afficher correctement le nom + line1_text = "AU REVOIR" + line2_text = username.upper() + line3_text = (server_name or "OMEGA KUBE").upper() + + text_area_left = 300 + text_area_right = background.width - 20 + 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 avatar = Image.open(io.BytesIO(avatar_bytes)).convert("RGBA").resize((224, 224), Image.LANCZOS) @@ -188,9 +221,10 @@ class Goodbye(commands.Cog): if img: embed = disnake.Embed( - description=f"{member.mention} vient de nous quitter.\n\n{message_text}\n\n⌛ **Avait rejoint :** {joined_message}", - color=0x7289DA + description=f"{member.mention} vient de nous quitter.\n\n{message_text}", + color=0x9B59B6 ) + embed.set_footer(text=f"avait rejoint · {joined_message}") embed.set_image(url="attachment://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}") @@ -198,9 +232,10 @@ class Goodbye(commands.Cog): # 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") embed = disnake.Embed( - description=f"{member.mention} vient de nous quitter.\n\n{message_text}\n\n⌛ **Avait rejoint :** {joined_message}", - color=0x7289DA + description=f"{member.mention} vient de nous quitter.\n\n{message_text}", + color=0x9B59B6 ) + embed.set_footer(text=f"avait rejoint · {joined_message}") await channel.send(embed=embed) except Exception as e: diff --git a/commandes/welcome.py b/commandes/welcome.py index 81c9d53..b03db89 100644 --- a/commandes/welcome.py +++ b/commandes/welcome.py @@ -191,11 +191,27 @@ class Welcome(commands.Cog): if welcome_dm_text and not member.bot: kuby_logger.info(f"✉️ [Welcome] Tentative d'envoi de DM à {member.name}") try: - formatted_message = welcome_dm_text.format( - username=member.name, - servername=member.guild.name, - member_count=member.guild.member_count - ) + template_values = { + # Alias populaires + "user": member.mention, + "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 gif_url = "https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExNXV1NW02NTk0bGF2ZHcyMGFna2F6amRrbGpobGpsMHowOW5xa2E5eCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/ZtFuW4rsUbfrRzPauJ/giphy.gif" embed = disnake.Embed(