Fix de la base de données

This commit is contained in:
Mathis 2026-06-03 15:52:43 +02:00
parent 9f92d0d212
commit ca5c966c9c
16 changed files with 7980 additions and 79 deletions

View file

@ -166,6 +166,8 @@ class Welcome(commands.Cog):
async def on_member_join(self, member):
kuby_logger.info(f"📥 [Welcome] Événement on_member_join reçu pour {member.name} (ID: {member.id}) sur {member.guild.name}")
welcome_channel = None
self._init_db()
try:
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
@ -216,84 +218,84 @@ class Welcome(commands.Cog):
kuby_logger.error(f"❌ [Welcome] Erreur lors de l'envoi du DM à {member.name}: {e}", exc_info=True)
else:
kuby_logger.info(f" [Welcome] Aucun message de DM configuré pour le serveur {member.guild.id}")
# 2. Gestion du salon de bienvenue
if welcome_channel:
channel = member.guild.get_channel(welcome_channel)
if channel:
try:
# Créer l'image de bienvenue
server_display_name = server_name if server_name else member.guild.name
img = await self.create_welcome_image(
member.name,
member.avatar.url if member.avatar else member.default_avatar.url,
server_name=server_display_name,
banner_background=banner_background,
custom_message=welcome_channel_message
)
# Attendre un peu que le Cog d'invitations traite le join
await asyncio.sleep(1)
# Récupérer l'inviteur
invites_cog = self.bot.get_cog("Invites")
inviter_text = ""
if invites_cog:
try:
inviter_id = invites_cog.get_inviter_info(member.guild.id, member.id)
if inviter_id:
inviter = member.guild.get_member(inviter_id)
if not inviter:
try:
inviter = await self.bot.fetch_user(inviter_id)
except (disnake.NotFound, disnake.HTTPException) as e:
kuby_logger.warning(f"[Welcome] Impossible de récupérer l'inviteur {inviter_id}: {e}")
inviter = None
if inviter:
total, current = invites_cog.get_invite_stats(member.guild.id, inviter_id)
inviter_text = f"\n\n**Invité par :** {inviter.mention} ({current} invitations)"
else:
inviter_text = "\n\n**Invité par :** [Utilisateur introuvable]"
except Exception as e:
kuby_logger.error(f"[Welcome] Erreur lors de la récupération de l'inviteur: {e}", exc_info=True)
inviter_text = ""
# Envoyer le message avec le format exact requis
if img:
server_display_name = server_name if server_name else member.guild.name
# IMPORTANT: transmettre aussi le nom réel du serveur à Pillow pour les placeholders {server}
# (utile quand welcome_server_name n'est pas configuré)
# (server_name est utilisé par create_welcome_image)
embed = disnake.Embed(
description=f"Bienvenue sur {server_display_name} {member.name} ! Grâce à toi, nous avons atteint les {member.guild.member_count} membres !{inviter_text}",
color=0x9B59B6
)
embed.set_image(url="attachment://welcome.png")
await channel.send(embed=embed, file=disnake.File(img, filename="welcome.png"))
kuby_logger.info(f"[Welcome] Message de bienvenue avec image envoyé pour {member.name}")
else:
# Fallback : image non générée, envoyer un message texte
kuby_logger.warning(f"[Welcome] Image non générée pour {member.name}, envoi d'un message texte")
server_display_name = server_name if server_name else member.guild.name
await channel.send(f"Bienvenue sur {server_display_name} {member.mention} ! Grâce à toi, nous avons atteint les {member.guild.member_count} membres !{inviter_text}")
except Exception as e:
kuby_logger.error(f"[Welcome] Erreur lors de l'envoi du message dans le salon: {e}", exc_info=True)
# Fallback avec un message minimal
try:
await channel.send(f"{member.mention} Bienvenue dans le serveur !")
kuby_logger.info(f"[Welcome] Message de fallback envoyé pour {member.name}")
except Exception as e2:
kuby_logger.error(f"[Welcome] Échec du message de fallback: {e2}", exc_info=True)
else:
kuby_logger.warning(f"[Welcome] Salon de bienvenue introuvable (ID: {welcome_channel}) pour {member.guild.name}")
else:
kuby_logger.debug(f"[Welcome] Aucun salon de bienvenue configuré pour {member.guild.name}")
except Exception as e:
kuby_logger.error(f"❌ [Welcome] Erreur critique dans on_member_join: {e}", exc_info=True)
# 2. Gestion du salon de bienvenue
if welcome_channel:
channel = member.guild.get_channel(welcome_channel)
if channel:
try:
# Créer l'image de bienvenue
server_display_name = server_name if server_name else member.guild.name
img = await self.create_welcome_image(
member.name,
member.avatar.url if member.avatar else member.default_avatar.url,
server_name=server_display_name,
banner_background=banner_background,
custom_message=welcome_channel_message
)
# Attendre un peu que le Cog d'invitations traite le join
await asyncio.sleep(1)
# Récupérer l'inviteur
invites_cog = self.bot.get_cog("Invites")
inviter_text = ""
if invites_cog:
try:
inviter_id = invites_cog.get_inviter_info(member.guild.id, member.id)
if inviter_id:
inviter = member.guild.get_member(inviter_id)
if not inviter:
try:
inviter = await self.bot.fetch_user(inviter_id)
except (disnake.NotFound, disnake.HTTPException) as e:
kuby_logger.warning(f"[Welcome] Impossible de récupérer l'inviteur {inviter_id}: {e}")
inviter = None
if inviter:
total, current = invites_cog.get_invite_stats(member.guild.id, inviter_id)
inviter_text = f"\n\n**Invité par :** {inviter.mention} ({current} invitations)"
else:
inviter_text = "\n\n**Invité par :** [Utilisateur introuvable]"
except Exception as e:
kuby_logger.error(f"[Welcome] Erreur lors de la récupération de l'inviteur: {e}", exc_info=True)
inviter_text = ""
# Envoyer le message avec le format exact requis
if img:
server_display_name = server_name if server_name else member.guild.name
# IMPORTANT: transmettre aussi le nom réel du serveur à Pillow pour les placeholders {server}
# (utile quand welcome_server_name n'est pas configuré)
# (server_name est utilisé par create_welcome_image)
embed = disnake.Embed(
description=f"Bienvenue sur {server_display_name} {member.name} ! Grâce à toi, nous avons atteint les {member.guild.member_count} membres !{inviter_text}",
color=0x9B59B6
)
embed.set_image(url="attachment://welcome.png")
await channel.send(embed=embed, file=disnake.File(img, filename="welcome.png"))
kuby_logger.info(f"[Welcome] Message de bienvenue avec image envoyé pour {member.name}")
else:
# Fallback : image non générée, envoyer un message texte
kuby_logger.warning(f"[Welcome] Image non générée pour {member.name}, envoi d'un message texte")
server_display_name = server_name if server_name else member.guild.name
await channel.send(f"Bienvenue sur {server_display_name} {member.mention} ! Grâce à toi, nous avons atteint les {member.guild.member_count} membres !{inviter_text}")
except Exception as e:
kuby_logger.error(f"[Welcome] Erreur lors de l'envoi du message dans le salon: {e}", exc_info=True)
# Fallback avec un message minimal
try:
await channel.send(f"{member.mention} Bienvenue dans le serveur !")
kuby_logger.info(f"[Welcome] Message de fallback envoyé pour {member.name}")
except Exception as e2:
kuby_logger.error(f"[Welcome] Échec du message de fallback: {e2}", exc_info=True)
else:
kuby_logger.warning(f"[Welcome] Salon de bienvenue introuvable (ID: {welcome_channel}) pour {member.guild.name}")
else:
kuby_logger.debug(f"[Welcome] Aucun salon de bienvenue configuré pour {member.guild.name}")
async def save_banner_attachment(self, attachment: disnake.Attachment, guild_id: int) -> str:
"""Sauvegarde l'attachment et retourne le chemin du fichier"""
base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "banners"))