From d82f704c75310d91877a4aeda3636264efa4bcaa Mon Sep 17 00:00:00 2001 From: Mathis Date: Sat, 28 Mar 2026 22:23:23 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20restauration=20du=20design=20des=20MPs?= =?UTF-8?q?=20de=20validation=20et=20ajout=20du=20choix=20de=20statut=20?= =?UTF-8?q?=C3=A0=20la=20r=C3=A9ouverture=20des=20tickets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commandes/ticket_whitelist.py | 74 +++++++++++++++++++++++++---------- 1 file changed, 54 insertions(+), 20 deletions(-) diff --git a/commandes/ticket_whitelist.py b/commandes/ticket_whitelist.py index 9a3b953..4bb97c0 100644 --- a/commandes/ticket_whitelist.py +++ b/commandes/ticket_whitelist.py @@ -430,26 +430,50 @@ class ClosedTicketView(discord.ui.view.View): return await interaction.followup.send("❌ Impossible de trouver le propriétaire du ticket à réouvrir.", ephemeral=True) try: - await interaction.channel.set_permissions(owner, read_messages=True, send_messages=True) - - # Rétablir le nom original en se basant sur la validation - citoyen_role_id = settings.get("citoyen_role_id") - attente_oral_role_id = settings.get("attente_oral_role_id") - - prefix = "ouvert" - if citoyen_role_id and any(r.id == int(citoyen_role_id) for r in owner.roles): - prefix = "accepté" - elif attente_oral_role_id and any(r.id == int(attente_oral_role_id) for r in owner.roles): - prefix = "oral-à-faire" - - await interaction.channel.edit(name=f"{prefix}-{owner.display_name}".replace(" ", "-").lower()[:100]) + # On demande au staff quel statut remettre + embed = discord.Embed( + title="♻️ Réouverture du Ticket", + description=f"Choisissez le statut à appliquer pour **{owner.display_name}**.", + color=discord.Color.blue() + ) + view = ReopenStatusView(owner) + await interaction.channel.send(embed=embed, view=view) + await interaction.followup.send("✅ Choisissez le statut ci-dessous.", ephemeral=True) + except Exception as e: + kuby_logger.error(f"Erreur lors de la préparation de réouverture: {e}") + await interaction.followup.send(f"❌ Erreur : {e}", ephemeral=True) + +class ReopenStatusView(discord.ui.view.View): + """Vue pour choisir le statut lors d'une réouverture""" + def __init__(self, owner: discord.Member): + super().__init__(timeout=180) + self.owner = owner + + @discord.ui.button(label="Écrit (Ouvert)", style=discord.ButtonStyle.secondary) + async def set_written(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.apply_status(interaction, "ouvert") + + @discord.ui.button(label="Oral (À faire)", style=discord.ButtonStyle.primary) + async def set_oral(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.apply_status(interaction, "oral-à-faire") + + @discord.ui.button(label="Accepté", style=discord.ButtonStyle.success) + async def set_accepted(self, interaction: discord.Interaction, button: discord.ui.Button): + await self.apply_status(interaction, "accepté") + + async def apply_status(self, interaction: discord.Interaction, prefix: str): + await interaction.response.defer(ephemeral=True) + try: + await interaction.channel.set_permissions(self.owner, read_messages=True, send_messages=True) + new_name = f"{prefix}-{self.owner.display_name}".replace(" ", "-").lower()[:100] + await interaction.channel.edit(name=new_name) new_view = TicketManagementView() - await interaction.channel.send(f"✅ Ticket réouvert par {interaction.user.mention}.", view=new_view) - await interaction.followup.send("✅ Ticket réouvert.", ephemeral=True) + await interaction.channel.send(f"✅ Ticket réouvert par {interaction.user.mention} (Statut: {prefix}).", view=new_view) + await interaction.followup.send(f"✅ Statut {prefix} appliqué.", ephemeral=True) + self.stop() except Exception as e: - kuby_logger.error(f"Erreur lors de la réouverture du ticket: {e}") - await interaction.followup.send(f"❌ Erreur lors de la réouverture : {e}", ephemeral=True) + await interaction.followup.send(f"❌ Erreur : {e}", ephemeral=True) @discord.ui.button(label="❌ Supprimer le Ticket", style=discord.ButtonStyle.danger, custom_id="delete_ticket") async def delete_ticket(self, interaction: discord.Interaction, button: discord.ui.Button): @@ -598,7 +622,7 @@ class Ticket(commands.Cog): ) await message.channel.send(embed=embed_val) - # DM au joueur + # DM au joueur (RESTAURATION DESIGN CAPTURE) try: embed_dm = discord.Embed( title="🎉 Félicitations - Citoyenneté Validée !", @@ -607,7 +631,11 @@ class Ticket(commands.Cog): ) embed_dm.add_field(name="🏙️ Nouveau Statut", value="Citoyen", inline=True) embed_dm.add_field(name="📍 Serveur", value=message.guild.name, inline=True) + embed_dm.add_field(name="📋 Prochaine étape", value="Tu peux désormais te connecter au serveur et commencer ton aventure RP. N'oublie pas de consulter les salons d'informations !", inline=False) + embed_dm.add_field(name="🔗 Lien vers ton ticket", value=f"[Clique ici pour voir ton ticket]({message.channel.jump_url})", inline=False) embed_dm.set_footer(text=f"L'équipe {message.guild.name}") + if message.guild.icon: embed_dm.set_thumbnail(url=message.guild.icon.url) + await user.send(embed=embed_dm) except: pass @@ -628,13 +656,19 @@ class Ticket(commands.Cog): ) await message.channel.send(embed=embed_val) - # DM au joueur + # DM au joueur (RESTAURATION DESIGN CAPTURE) try: embed_dm = discord.Embed( title="📝 Validation Étape Écrite", - description=f"Ta candidature écrite sur **{message.guild.name}** a été validée ! Merci de te rendre en vocal 'Attente Oral'.", + description=f"Ta candidature écrite sur **{message.guild.name}** a été examinée et validée par notre équipe !", color=discord.Color.orange() ) + embed_dm.add_field(name="🎤 Statut Actuel", value="Attente Oral", inline=True) + embed_dm.add_field(name="🛠️ Action Requise", value="Merci de te rendre dans le salon vocal 'Attente Oral' dès que tu es disponible pour passer ton entretien.", inline=False) + embed_dm.add_field(name="🔗 Lien vers ton ticket", value=f"[Clique ici pour voir ton ticket]({message.channel.jump_url})", inline=False) + embed_dm.set_footer(text=f"L'équipe {message.guild.name}") + if message.guild.icon: embed_dm.set_thumbnail(url=message.guild.icon.url) + await user.send(embed=embed_dm) except: pass