From 628e02aea94003a73dd991d450d5e2d522a64623 Mon Sep 17 00:00:00 2001 From: Mathis Date: Sat, 26 Sep 2026 13:39:03 +0200 Subject: [PATCH] =?UTF-8?q?fix(ticket):=20boutons=20en=20fran=C3=A7ais,=20?= =?UTF-8?q?accents,=20retrait=20priorit=C3=A9/infos,=E7=BB=84=E7=BB=87=20l?= =?UTF-8?q?ayout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Boutons: Réclamer, Transférer, Verrouiller/Déverrouiller, Ajouter, Fermer - Accents français partout (catégorie, équipe, configuré, etc.) - Retiré PriorityButton et StatsButton (trop chargé) - Layout: Gestion (Réclamer/Transférer/Verrouiller) → Ajouter/Fermer --- tickets/cog.py | 31 ++++++------- tickets/ui.py | 120 +++++++++++++++++++++++++------------------------ 2 files changed, 74 insertions(+), 77 deletions(-) diff --git a/tickets/cog.py b/tickets/cog.py index bc286d4..2c930d9 100644 --- a/tickets/cog.py +++ b/tickets/cog.py @@ -14,8 +14,6 @@ from tickets.ui import ( CloseButton, LockButton, PanelCreateButton, - PriorityButton, - StatsButton, TransferButton, _is_staff, ) @@ -29,8 +27,8 @@ class PanelView(discord.ui.LayoutView): container = discord.ui.Container() container.add_item( discord.ui.TextDisplay( - "## Systeme de tickets\n" - "Besoin d'aide ? Creez un ticket et notre equipe vous repondra.\n" + "## Système de tickets\n" + "Besoin d'aide ? Créez un ticket et notre équipe vous répondra.\n" "Cliquez sur le bouton ci-dessous pour commencer." ) ) @@ -43,11 +41,11 @@ class ConfigView(discord.ui.LayoutView): def __init__(self): super().__init__(timeout=None) container = discord.ui.Container() - container.add_item(discord.ui.TextDisplay("## Configuration Tickets\nModifications enregistrees.")) + container.add_item(discord.ui.TextDisplay("## Configuration Tickets\nModifications enregistrées.")) self.add_item(container) -class AddCategoryModal(discord.ui.Modal, title="Ajouter une categorie"): +class AddCategoryModal(discord.ui.Modal, title="Ajouter une catégorie"): name = discord.ui.TextInput(label="Nom", max_length=50, required=True) emoji = discord.ui.TextInput(label="Emoji", max_length=10, required=False) description = discord.ui.TextInput( @@ -68,13 +66,13 @@ class AddCategoryModal(discord.ui.Modal, title="Ajouter une categorie"): ) config.categories.append(cat) storage.save_config(config) - await interaction.response.send_message(f"Categorie **{cat.name}** ajoutee.", ephemeral=True) + await interaction.response.send_message(f"Catégorie **{cat.name}** ajoutée.", ephemeral=True) class ConfigToggleButton(discord.ui.Button): def __init__(self, enabled: bool): super().__init__( - label="Desactiver" if enabled else "Activer", + label="Désactiver" if enabled else "Activer", style=discord.ButtonStyle.danger if enabled else discord.ButtonStyle.success, custom_id="ticket_cfg_toggle", ) @@ -88,7 +86,7 @@ class ConfigToggleButton(discord.ui.Button): class ConfigAddCatButton(discord.ui.Button): def __init__(self): - super().__init__(label="Ajouter categorie", style=discord.ButtonStyle.primary, custom_id="ticket_cfg_addcat") + super().__init__(label="Ajouter catégorie", style=discord.ButtonStyle.primary, custom_id="ticket_cfg_addcat") async def callback(self, interaction: discord.Interaction): await interaction.response.send_modal(AddCategoryModal()) @@ -112,7 +110,7 @@ class ConfigSetStaffButton(discord.ui.Button): sel.callback = _cb view.add_item(sel) - await interaction.response.send_message("Selectionnez le role staff :", view=view, ephemeral=True) + await interaction.response.send_message("Sélectionnez le rôle staff :", view=view, ephemeral=True) class ConfigSetLogButton(discord.ui.Button): @@ -137,7 +135,7 @@ class ConfigSetLogButton(discord.ui.Button): sel.callback = _cb view.add_item(sel) - await interaction.response.send_message("Selectionnez le canal de logs :", view=view, ephemeral=True) + await interaction.response.send_message("Sélectionnez le canal de logs :", view=view, ephemeral=True) class TicketManagementView(discord.ui.LayoutView): @@ -147,10 +145,7 @@ class TicketManagementView(discord.ui.LayoutView): container.add_item(discord.ui.TextDisplay("### Gestion")) container.add_item(discord.ui.ActionRow(ClaimButton(), TransferButton(), LockButton())) container.add_item(discord.ui.Separator()) - container.add_item(discord.ui.TextDisplay("### Informations")) - container.add_item(discord.ui.ActionRow(PriorityButton(), AddMemberButton(), StatsButton())) - container.add_item(discord.ui.Separator()) - container.add_item(discord.ui.ActionRow(CloseButton())) + container.add_item(discord.ui.ActionRow(AddMemberButton(), CloseButton())) self.add_item(container) @@ -210,17 +205,17 @@ class TicketSystem(commands.Cog): config.panel_message_id = msg.id storage.save_config(config) container = discord.ui.Container() - container.add_item(discord.ui.TextDisplay(f"## Panneau envoye\nCanal : {channel.mention}\nStatut : Actif")) + container.add_item(discord.ui.TextDisplay(f"## Panneau envoyé\nCanal : {channel.mention}\nStatut : Actif")) resp_view = discord.ui.LayoutView() resp_view.add_item(container) await interaction.response.send_message(view=resp_view, ephemeral=True) - @ticket.command(name="config", description="Configuration du systeme de tickets") + @ticket.command(name="config", description="Configuration du système de tickets") @app_commands.checks.has_permissions(manage_guild=True) async def ticket_config(self, interaction: discord.Interaction): config = storage.get_config(interaction.guild_id) cats = "\n".join(f"- {c.emoji} **{c.name}**" for c in config.categories) or "*Aucune*" - staff_line = f"**Role staff :** <@&{config.staff_role_id}>\n" if config.staff_role_id else "" + staff_line = f"**Rôle staff :** <@&{config.staff_role_id}>\n" if config.staff_role_id else "" log_line = f"**Canal de logs :** <#{config.log_channel_id}>\n" if config.log_channel_id else "" container = discord.ui.Container() container.add_item( diff --git a/tickets/ui.py b/tickets/ui.py index acec129..641a926 100644 --- a/tickets/ui.py +++ b/tickets/ui.py @@ -38,7 +38,7 @@ async def _send_log(guild: discord.Guild, config, embed: discord.Embed): class PanelCreateButton(discord.ui.Button): def __init__(self): super().__init__( - label="Creer un ticket", + label="Créer un ticket", style=discord.ButtonStyle.primary, custom_id="ticket_panel_create", ) @@ -46,12 +46,12 @@ class PanelCreateButton(discord.ui.Button): async def callback(self, interaction: discord.Interaction): config = storage.get_config(interaction.guild_id) if not config.enabled: - await interaction.response.send_message("Le systeme de tickets est desactive.", ephemeral=True) + await interaction.response.send_message("Le système de tickets est désactivé.", ephemeral=True) return categories = config.categories if not categories: - await interaction.response.send_message("Aucune categorie configuree.", ephemeral=True) + await interaction.response.send_message("Aucune catégorie configurée.", ephemeral=True) return if len(categories) == 1: @@ -60,7 +60,7 @@ class PanelCreateButton(discord.ui.Button): return await interaction.response.send_message( - "Choisissez une categorie :", + "Choisissez une catégorie :", view=CategorySelectView(categories), ephemeral=True, ) @@ -78,7 +78,7 @@ class CategorySelect(discord.ui.Select): for c in categories[:25] ] super().__init__( - placeholder="Selectionnez une categorie...", + placeholder="Sélectionnez une catégorie...", options=options, custom_id="ticket_category_select", ) @@ -88,7 +88,7 @@ class CategorySelect(discord.ui.Select): config = storage.get_config(interaction.guild_id) cat = next((c for c in config.categories if c.id == cat_id), None) if not cat: - await interaction.response.send_message("Categorie introuvable.", ephemeral=True) + await interaction.response.send_message("Catégorie introuvable.", ephemeral=True) return await interaction.response.send_modal(TicketModal(cat.id, cat.name)) @@ -101,9 +101,9 @@ class CategorySelectView(discord.ui.View): class TicketModal(discord.ui.Modal, title="Nouveau Ticket"): reason = discord.ui.TextInput( - label="Decris ton probleme", + label="Décris ton problème", style=discord.TextStyle.paragraph, - placeholder="Explique brievement ta demande...", + placeholder="Explique brièvement ta demande...", required=True, max_length=2000, ) @@ -120,7 +120,7 @@ class TicketModal(discord.ui.Modal, title="Nouveau Ticket"): cat = next((c for c in config.categories if c.id == self.category_id), None) if not cat: - await interaction.followup.send("Categorie introuvable.", ephemeral=True) + await interaction.followup.send("Catégorie introuvable.", ephemeral=True) return overwrites = { @@ -189,34 +189,36 @@ class TicketModal(discord.ui.Modal, title="Nouveau Ticket"): discord.ui.TextDisplay( f"## Ticket — {cat.name}\n" f"**Utilisateur :** {interaction.user.mention}\n" - f"**Categorie :** {cat.emoji} {cat.name}\n" + f"**Catégorie :** {cat.emoji} {cat.name}\n" f"**Raison :**\n{self.reason.value}" ) ) container.add_item(discord.ui.Separator()) container.add_item(discord.ui.TextDisplay("### Gestion")) - container.add_item(discord.ui.ActionRow( - ClaimButton(), TransferButton(), LockButton(), - )) + container.add_item( + discord.ui.ActionRow( + ClaimButton(), + TransferButton(), + LockButton(), + ) + ) container.add_item(discord.ui.Separator()) - container.add_item(discord.ui.TextDisplay("### Informations")) - container.add_item(discord.ui.ActionRow( - PriorityButton(), AddMemberButton(), StatsButton(), - )) - container.add_item(discord.ui.Separator()) - container.add_item(discord.ui.ActionRow( - CloseButton(), - )) + container.add_item( + discord.ui.ActionRow( + AddMemberButton(), + CloseButton(), + ) + ) view = discord.ui.LayoutView() view.add_item(container) await channel.send(view=view) - await interaction.followup.send(f"Ticket cree : {channel.mention}", ephemeral=True) + await interaction.followup.send(f"Ticket créé : {channel.mention}", ephemeral=True) embed = discord.Embed( - title="Ticket cree", - description=f"**Categorie :** {cat.name}\n**Utilisateur :** {interaction.user.mention}\n**Canal :** {channel.mention}", + title="Ticket créé", + description=f"**Catégorie :** {cat.name}\n**Utilisateur :** {interaction.user.mention}\n**Canal :** {channel.mention}", color=discord.Color.green(), timestamp=datetime.now(timezone.utc), ) @@ -226,7 +228,7 @@ class TicketModal(discord.ui.Modal, title="Nouveau Ticket"): class ClaimButton(discord.ui.Button): def __init__(self): super().__init__( - label="Claim", + label="Réclamer", style=discord.ButtonStyle.success, custom_id="ticket_claim", ) @@ -240,7 +242,7 @@ class ClaimButton(discord.ui.Button): member = interaction.guild.get_member(interaction.user.id) if not member or not _is_staff(member, config): - await interaction.response.send_message("Seul le staff peut claim un ticket.", ephemeral=True) + await interaction.response.send_message("Seul le staff peut réclamer un ticket.", ephemeral=True) return if ticket.claimed_by: @@ -248,11 +250,11 @@ class ClaimButton(discord.ui.Button): ticket.claimed_by = None storage.save_ticket(ticket) await interaction.response.send_message( - f"{interaction.user.mention} a retire son claim.", ephemeral=True + f"{interaction.user.mention} a retiré son réclamation.", ephemeral=True ) else: await interaction.response.send_message( - f"Ce ticket est deja claim par <@{ticket.claimed_by}>.", ephemeral=True + f"Ce ticket est déjà réclamé par <@{ticket.claimed_by}>.", ephemeral=True ) return @@ -261,14 +263,14 @@ class ClaimButton(discord.ui.Button): embed = discord.Embed( title="Ticket claim", - description=f"Claim par {interaction.user.mention}", + description=f"Réclamé par {interaction.user.mention}", color=discord.Color.green(), timestamp=datetime.now(timezone.utc), ) await _send_log(interaction.guild, config, embed) container = discord.ui.Container() - container.add_item(discord.ui.TextDisplay(f"## Ticket claim\nClaim par {interaction.user.mention}")) + container.add_item(discord.ui.TextDisplay(f"## Ticket réclamé\nRéclamé par {interaction.user.mention}")) view = discord.ui.LayoutView() view.add_item(container) await interaction.response.send_message(view=view) @@ -295,7 +297,7 @@ class AddMemberButton(discord.ui.Button): return await interaction.response.send_message( - "Selectionnez le membre a ajouter :", + "Sélectionnez le membre à ajouter :", view=AddMemberSelectView(), ephemeral=True, ) @@ -304,7 +306,7 @@ class AddMemberButton(discord.ui.Button): class AddMemberSelect(discord.ui.UserSelect): def __init__(self): super().__init__( - placeholder="Selectionnez un membre...", + placeholder="Sélectionnez un membre...", custom_id="ticket_add_member_select", min_values=1, max_values=1, @@ -319,12 +321,12 @@ class AddMemberSelect(discord.ui.UserSelect): read_message_history=True, ) await interaction.response.edit_message( - content=f"{user.mention} a ete ajoute au ticket.", + content=f"{user.mention} a été ajouté au ticket.", view=None, ) embed = discord.Embed( - title="Membre ajoute", - description=f"{user.mention} a ete ajoute par {interaction.user.mention}", + title="Membre ajouté", + description=f"{user.mention} a été ajouté par {interaction.user.mention}", color=discord.Color.blue(), timestamp=datetime.now(timezone.utc), ) @@ -340,7 +342,7 @@ class AddMemberSelectView(discord.ui.View): class TransferButton(discord.ui.Button): def __init__(self): super().__init__( - label="Transfer", + label="Transférer", style=discord.ButtonStyle.secondary, custom_id="ticket_transfer", ) @@ -353,10 +355,10 @@ class TransferButton(discord.ui.Button): return member = interaction.guild.get_member(interaction.user.id) if not member or not _is_staff(member, config): - await interaction.response.send_message("Seul le staff peut transferer.", ephemeral=True) + await interaction.response.send_message("Seul le staff peut transférer.", ephemeral=True) return await interaction.response.send_message( - "Selectionnez le staff :", + "Sélectionnez le staff :", view=TransferSelectView(), ephemeral=True, ) @@ -365,7 +367,7 @@ class TransferButton(discord.ui.Button): class TransferSelect(discord.ui.UserSelect): def __init__(self): super().__init__( - placeholder="Selectionnez un staff...", + placeholder="Sélectionnez un staff...", custom_id="ticket_transfer_select", min_values=1, max_values=1, @@ -378,12 +380,12 @@ class TransferSelect(discord.ui.UserSelect): ticket.claimed_by = user.id storage.save_ticket(ticket) await interaction.response.edit_message( - content=f"Ticket transfere a {user.mention}.", + content=f"Ticket transféré à {user.mention}.", view=None, ) embed = discord.Embed( - title="Ticket transfere", - description=f"Transfere a {user.mention} par {interaction.user.mention}", + title="Ticket transféré", + description=f"Transféré à {user.mention} par {interaction.user.mention}", color=discord.Color.blue(), timestamp=datetime.now(timezone.utc), ) @@ -412,10 +414,10 @@ class PriorityButton(discord.ui.Button): return member = interaction.guild.get_member(interaction.user.id) if not member or not _is_staff(member, config): - await interaction.response.send_message("Seul le staff peut changer la priorite.", ephemeral=True) + await interaction.response.send_message("Seul le staff peut changer la priorité.", ephemeral=True) return await interaction.response.send_message( - "Selectionnez la priorite :", + "Sélectionnez la priorité :", view=PrioritySelectView(), ephemeral=True, ) @@ -424,7 +426,7 @@ class PriorityButton(discord.ui.Button): class PrioritySelect(discord.ui.Select): def __init__(self): super().__init__( - placeholder="Selectionnez la priorite...", + placeholder="Sélectionnez la priorité...", custom_id="ticket_priority_select", options=[ discord.SelectOption(label="Basse", value="low", emoji="🟢"), @@ -463,7 +465,7 @@ class PrioritySelectView(discord.ui.View): class LockButton(discord.ui.Button): def __init__(self): super().__init__( - label="Lock", + label="Verrouiller", style=discord.ButtonStyle.secondary, custom_id="ticket_lock", ) @@ -476,7 +478,7 @@ class LockButton(discord.ui.Button): return member = interaction.guild.get_member(interaction.user.id) if not member or not _is_staff(member, config): - await interaction.response.send_message("Seul le staff peut lock/unlock.", ephemeral=True) + await interaction.response.send_message("Seul le staff peut verrouiller/déverrouiller.", ephemeral=True) return ticket.locked = not ticket.locked @@ -486,14 +488,14 @@ class LockButton(discord.ui.Button): overwrites.send_messages = not ticket.locked await interaction.channel.set_permissions(interaction.guild.default_role, overwrite=overwrites) - self.label = "Unlock" if ticket.locked else "Lock" + self.label = "Déverrouiller" if ticket.locked else "Verrouiller" await interaction.response.send_message( - f"Ticket {'locked' if ticket.locked else 'unlocked'} par {interaction.user.mention}." + f"Ticket {'verrouillé' if ticket.locked else 'déverrouillé'} par {interaction.user.mention}." ) embed = discord.Embed( - title=f"Ticket {'locked' if ticket.locked else 'unlocked'}", + title=f"Ticket {'verrouillé' if ticket.locked else 'déverrouillé'}", description=f"Par {interaction.user.mention}", color=discord.Color.orange() if ticket.locked else discord.Color.green(), timestamp=datetime.now(timezone.utc), @@ -568,9 +570,9 @@ class CloseButton(discord.ui.Button): ticket.closed_by = interaction.user.id if config.transcript_enabled: - html = generate_transcript(ticket, interaction.guild.name) + html_content = generate_transcript(ticket, interaction.guild.name) transcript_file = discord.File( - fp=__import__("io").BytesIO(html.encode()), + fp=__import__("io").BytesIO(html_content.encode()), filename=f"ticket_{ticket.channel_id}.html", ) if config.log_channel_id: @@ -578,7 +580,7 @@ class CloseButton(discord.ui.Button): if ch: with contextlib.suppress(discord.HTTPException): await ch.send( - f"Ticket ferme par {interaction.user.mention}", + f"Ticket fermé par {interaction.user.mention}", file=transcript_file, ) @@ -588,9 +590,9 @@ class CloseButton(discord.ui.Button): if user: with contextlib.suppress(discord.HTTPException): await user.send( - "Ton ticket a ete ferme.", + "Ton ticket a été fermé.", file=discord.File( - fp=__import__("io").BytesIO(html.encode()), + fp=__import__("io").BytesIO(html_content.encode()), filename=f"ticket_{ticket.channel_id}.html", ), ) @@ -599,19 +601,19 @@ class CloseButton(discord.ui.Button): storage.save_ticket(ticket) embed = discord.Embed( - title="Ticket ferme", - description=f"**Ferme par :** {interaction.user.mention}\n**Categorie :** {ticket.category_id}", + title="Ticket fermé", + description=f"**Fermé par :** {interaction.user.mention}\n**Catégorie :** {ticket.category_id}", color=discord.Color.red(), timestamp=datetime.now(timezone.utc), ) await _send_log(interaction.guild, config, embed) container = discord.ui.Container() - container.add_item(discord.ui.TextDisplay("## Ticket ferme\nCe ticket sera supprime dans 5 secondes.")) + container.add_item(discord.ui.TextDisplay("## Ticket fermé\nCe ticket sera supprimé dans 5 secondes.")) view = discord.ui.LayoutView() view.add_item(container) await interaction.followup.send(view=view) await asyncio.sleep(5) with contextlib.suppress(discord.HTTPException): - await interaction.channel.delete(reason=f"Ticket ferme par {interaction.user}") + await interaction.channel.delete(reason=f"Ticket fermé par {interaction.user}")