fix: restauration du design des MPs de validation et ajout du choix de statut à la réouverture des tickets

This commit is contained in:
Mathis 2026-03-28 22:23:23 +01:00
parent 9045b374fa
commit d82f704c75

View file

@ -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)
# 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)
# 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")
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
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"
@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")
await interaction.channel.edit(name=f"{prefix}-{owner.display_name}".replace(" ", "-").lower()[:100])
@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