fix: restauration du design des MPs de validation et ajout du choix de statut à la réouverture des tickets
This commit is contained in:
parent
9045b374fa
commit
d82f704c75
1 changed files with 54 additions and 20 deletions
|
|
@ -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)
|
return await interaction.followup.send("❌ Impossible de trouver le propriétaire du ticket à réouvrir.", ephemeral=True)
|
||||||
|
|
||||||
try:
|
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
|
class ReopenStatusView(discord.ui.view.View):
|
||||||
citoyen_role_id = settings.get("citoyen_role_id")
|
"""Vue pour choisir le statut lors d'une réouverture"""
|
||||||
attente_oral_role_id = settings.get("attente_oral_role_id")
|
def __init__(self, owner: discord.Member):
|
||||||
|
super().__init__(timeout=180)
|
||||||
|
self.owner = owner
|
||||||
|
|
||||||
prefix = "ouvert"
|
@discord.ui.button(label="Écrit (Ouvert)", style=discord.ButtonStyle.secondary)
|
||||||
if citoyen_role_id and any(r.id == int(citoyen_role_id) for r in owner.roles):
|
async def set_written(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||||
prefix = "accepté"
|
await self.apply_status(interaction, "ouvert")
|
||||||
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])
|
@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()
|
new_view = TicketManagementView()
|
||||||
await interaction.channel.send(f"✅ Ticket réouvert par {interaction.user.mention}.", view=new_view)
|
await interaction.channel.send(f"✅ Ticket réouvert par {interaction.user.mention} (Statut: {prefix}).", view=new_view)
|
||||||
await interaction.followup.send("✅ Ticket réouvert.", ephemeral=True)
|
await interaction.followup.send(f"✅ Statut {prefix} appliqué.", ephemeral=True)
|
||||||
|
self.stop()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
kuby_logger.error(f"Erreur lors de la réouverture du ticket: {e}")
|
await interaction.followup.send(f"❌ Erreur : {e}", ephemeral=True)
|
||||||
await interaction.followup.send(f"❌ Erreur lors de la réouverture : {e}", ephemeral=True)
|
|
||||||
|
|
||||||
@discord.ui.button(label="❌ Supprimer le Ticket", style=discord.ButtonStyle.danger, custom_id="delete_ticket")
|
@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):
|
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)
|
await message.channel.send(embed=embed_val)
|
||||||
|
|
||||||
# DM au joueur
|
# DM au joueur (RESTAURATION DESIGN CAPTURE)
|
||||||
try:
|
try:
|
||||||
embed_dm = discord.Embed(
|
embed_dm = discord.Embed(
|
||||||
title="🎉 Félicitations - Citoyenneté Validée !",
|
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="🏙️ Nouveau Statut", value="Citoyen", inline=True)
|
||||||
embed_dm.add_field(name="📍 Serveur", value=message.guild.name, 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}")
|
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)
|
await user.send(embed=embed_dm)
|
||||||
except: pass
|
except: pass
|
||||||
|
|
||||||
|
|
@ -628,13 +656,19 @@ class Ticket(commands.Cog):
|
||||||
)
|
)
|
||||||
await message.channel.send(embed=embed_val)
|
await message.channel.send(embed=embed_val)
|
||||||
|
|
||||||
# DM au joueur
|
# DM au joueur (RESTAURATION DESIGN CAPTURE)
|
||||||
try:
|
try:
|
||||||
embed_dm = discord.Embed(
|
embed_dm = discord.Embed(
|
||||||
title="📝 Validation Étape Écrite",
|
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()
|
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)
|
await user.send(embed=embed_dm)
|
||||||
except: pass
|
except: pass
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue