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

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View file

@ -149,6 +149,7 @@ class Goodbye(commands.Cog):
async def on_member_remove(self, member):
kuby_logger.info(f"[Goodbye] Départ détecté: {member.name} (ID: {member.id}) du serveur {member.guild.name}")
self._init_db()
try:
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()

View file

@ -217,6 +217,7 @@ class Moderation(commands.Cog):
if chan: await chan.send(components=components)
async def send_modpanel_v2(self, interaction: disnake.Interaction, member: disnake.Member, edit=False):
self._init_db()
conn = sqlite3.connect(self.db_path); cursor = conn.cursor()
cursor.execute('SELECT COUNT(*) FROM sanctions WHERE guild_id = ? AND user_id = ? AND type = "WARN" AND status = "ACTIVE"', (interaction.guild_id, member.id))
warn_count = cursor.fetchone()[0]

View file

@ -3162,6 +3162,7 @@ class TicketCommands(commands.Cog):
if not (
str(custom_id).startswith("ticket_")
or str(custom_id).startswith("catv2_")
or str(custom_id).startswith("cat_")
or str(custom_id) in {"close_confirm", "close_cancel", "delay_cancel"}
):
return
@ -3208,6 +3209,9 @@ class TicketCommands(commands.Cog):
else:
modal = TicketPriorityModal(self.bot, config, category)
# Sécurité anti-crash : Limite stricte de Discord à 45 caractères pour le titre
if hasattr(modal, "title") and modal.title:
modal.title = str(modal.title)[:45]
await inter.response.send_modal(modal)
except Exception as e:
kuby_logger.error(f"[TicketSystem] cat| routing error: {e}", exc_info=True)
@ -3230,12 +3234,70 @@ class TicketCommands(commands.Cog):
else:
modal = TicketPriorityModal(self.bot, config, category)
# Sécurité anti-crash : Limite stricte de Discord à 45 caractères pour le titre
if hasattr(modal, "title") and modal.title:
modal.title = str(modal.title)[:45]
await inter.response.send_modal(modal)
except Exception as e:
kuby_logger.error(f"[TicketSystem] catv2_ routing error: {e}", exc_info=True)
if not inter.response.is_done():
await inter.response.send_message(f"Erreur interne: {e}", ephemeral=True)
elif custom_id == "ticket_create":
# Construction du layout de sélection Premium V2
category_items = [
disnake.ui.TextDisplay(
content="# 📂 Sélectionner une Catégorie - Omega Kube\n\n"
"Veuillez choisir la catégorie qui correspond au motif de votre demande pour ouvrir un ticket."
)
]
# Génération dynamique des sections avec Emojis et Descriptions configurées
for cat in config.categories[:5]:
cat_emoji = getattr(cat, "emoji", "") or ""
cat_desc = getattr(cat, "description", "") or getattr(cat, "desc", "") or ""
category_items.append(disnake.ui.Separator(divider=True))
category_items.append(
disnake.ui.Section(
f"### {cat_emoji} {cat.name}\n{cat_desc}" if cat_desc else f"### {cat_emoji} {cat.name}",
accessory=disnake.ui.Button(
label="Choisir",
style=disnake.ButtonStyle.blurple,
custom_id=f"cat_{cat.id}_select"
)
)
)
await inter.response.send_message(
components=[disnake.ui.Container(*category_items)],
ephemeral=True
)
elif custom_id == "ticket_my_tickets":
# Afficher les tickets de l'utilisateur
user_tickets = self.storage.get_user_tickets(inter.guild.id, inter.user.id)
if not user_tickets:
await inter.response.send_message("Vous n'avez aucun ticket ouvert.", ephemeral=True)
return
# Créer un message avec la liste des tickets
ticket_list = []
for ticket in user_tickets:
channel = self.bot.get_channel(ticket.channel_id)
if channel:
ticket_list.append(f"{channel.mention} - {ticket.status.value}")
else:
ticket_list.append(f"• #{ticket.channel_id} - {ticket.status.value}")
embed = disnake.Embed(
title="📂 Vos Tickets",
description="\n".join(ticket_list) if ticket_list else "Aucun ticket trouvé.",
color=0x9B59B6
)
await inter.response.send_message(embed=embed, ephemeral=True)
elif custom_id == "ticket_analytics":
panel_view = TicketPanelView(self.bot, config, self.storage)
await panel_view._analytics_callback(inter)
elif custom_id == "ticket_claim":
ticket = self.storage.load_ticket(inter.channel.id)
if ticket:
@ -3747,7 +3809,7 @@ class TicketCommands(commands.Cog):
"""Ouvre le panel des tickets"""
config = self.storage.load_config(inter.guild.id)
view = TicketPanelView(self.bot, config, self.storage)
await inter.response.send_message(components=view.get_components_v2(), view=view, ephemeral=True)
await inter.response.send_message(components=view.get_components_v2(), ephemeral=True)
@commands.slash_command(name="ticketpanel", description="Envoie le panel de création de tickets dans un canal")
@commands.has_permissions(administrator=True)
@ -3818,4 +3880,3 @@ class TicketCommands(commands.Cog):
def setup(bot):
"""Setup function"""
bot.add_cog(TicketCommands(bot))

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,8 +218,6 @@ 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}")
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:
@ -293,6 +293,8 @@ class Welcome(commands.Cog):
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)
async def save_banner_attachment(self, attachment: disnake.Attachment, guild_id: int) -> str:
"""Sauvegarde l'attachment et retourne le chemin du fichier"""

View file

@ -2,5 +2,9 @@
"1369669999345537145": {
"absence_channel_id": 1369669999677145103,
"absence_role_id": 1369669999345537154
},
"1402491843899555840": {
"absence_channel_id": 1494492360732835972,
"absence_role_id": 1501619311918190703
}
}

View file

@ -1,3 +1,4 @@
{
"1369669999345537145": {}
"1369669999345537145": {},
"1402491843899555840": {}
}

View file

@ -1,5 +1,10 @@
{
"4": 971446412690722826,
"5": 971446412690722826,
"15": 971446412690722826
"15": 971446412690722826,
"153": 534003230435442690,
"160": 971446412690722826,
"161": 971446412690722826,
"162": 971446412690722826,
"164": 971446412690722826
}

7826
nohup.out Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 KiB