fix(ticket): boutons en français, accents, retrait priorité/infos,组织 layout
All checks were successful
ci / ci (push) Successful in 45s
All checks were successful
ci / ci (push) Successful in 45s
- 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
This commit is contained in:
parent
a92dcef08e
commit
628e02aea9
2 changed files with 74 additions and 77 deletions
|
|
@ -14,8 +14,6 @@ from tickets.ui import (
|
||||||
CloseButton,
|
CloseButton,
|
||||||
LockButton,
|
LockButton,
|
||||||
PanelCreateButton,
|
PanelCreateButton,
|
||||||
PriorityButton,
|
|
||||||
StatsButton,
|
|
||||||
TransferButton,
|
TransferButton,
|
||||||
_is_staff,
|
_is_staff,
|
||||||
)
|
)
|
||||||
|
|
@ -29,8 +27,8 @@ class PanelView(discord.ui.LayoutView):
|
||||||
container = discord.ui.Container()
|
container = discord.ui.Container()
|
||||||
container.add_item(
|
container.add_item(
|
||||||
discord.ui.TextDisplay(
|
discord.ui.TextDisplay(
|
||||||
"## Systeme de tickets\n"
|
"## Système de tickets\n"
|
||||||
"Besoin d'aide ? Creez un ticket et notre equipe vous repondra.\n"
|
"Besoin d'aide ? Créez un ticket et notre équipe vous répondra.\n"
|
||||||
"Cliquez sur le bouton ci-dessous pour commencer."
|
"Cliquez sur le bouton ci-dessous pour commencer."
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
@ -43,11 +41,11 @@ class ConfigView(discord.ui.LayoutView):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(timeout=None)
|
super().__init__(timeout=None)
|
||||||
container = discord.ui.Container()
|
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)
|
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)
|
name = discord.ui.TextInput(label="Nom", max_length=50, required=True)
|
||||||
emoji = discord.ui.TextInput(label="Emoji", max_length=10, required=False)
|
emoji = discord.ui.TextInput(label="Emoji", max_length=10, required=False)
|
||||||
description = discord.ui.TextInput(
|
description = discord.ui.TextInput(
|
||||||
|
|
@ -68,13 +66,13 @@ class AddCategoryModal(discord.ui.Modal, title="Ajouter une categorie"):
|
||||||
)
|
)
|
||||||
config.categories.append(cat)
|
config.categories.append(cat)
|
||||||
storage.save_config(config)
|
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):
|
class ConfigToggleButton(discord.ui.Button):
|
||||||
def __init__(self, enabled: bool):
|
def __init__(self, enabled: bool):
|
||||||
super().__init__(
|
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,
|
style=discord.ButtonStyle.danger if enabled else discord.ButtonStyle.success,
|
||||||
custom_id="ticket_cfg_toggle",
|
custom_id="ticket_cfg_toggle",
|
||||||
)
|
)
|
||||||
|
|
@ -88,7 +86,7 @@ class ConfigToggleButton(discord.ui.Button):
|
||||||
|
|
||||||
class ConfigAddCatButton(discord.ui.Button):
|
class ConfigAddCatButton(discord.ui.Button):
|
||||||
def __init__(self):
|
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):
|
async def callback(self, interaction: discord.Interaction):
|
||||||
await interaction.response.send_modal(AddCategoryModal())
|
await interaction.response.send_modal(AddCategoryModal())
|
||||||
|
|
@ -112,7 +110,7 @@ class ConfigSetStaffButton(discord.ui.Button):
|
||||||
|
|
||||||
sel.callback = _cb
|
sel.callback = _cb
|
||||||
view.add_item(sel)
|
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):
|
class ConfigSetLogButton(discord.ui.Button):
|
||||||
|
|
@ -137,7 +135,7 @@ class ConfigSetLogButton(discord.ui.Button):
|
||||||
|
|
||||||
sel.callback = _cb
|
sel.callback = _cb
|
||||||
view.add_item(sel)
|
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):
|
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.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.Separator())
|
||||||
container.add_item(discord.ui.TextDisplay("### Informations"))
|
container.add_item(discord.ui.ActionRow(AddMemberButton(), CloseButton()))
|
||||||
container.add_item(discord.ui.ActionRow(PriorityButton(), AddMemberButton(), StatsButton()))
|
|
||||||
container.add_item(discord.ui.Separator())
|
|
||||||
container.add_item(discord.ui.ActionRow(CloseButton()))
|
|
||||||
self.add_item(container)
|
self.add_item(container)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -210,17 +205,17 @@ class TicketSystem(commands.Cog):
|
||||||
config.panel_message_id = msg.id
|
config.panel_message_id = msg.id
|
||||||
storage.save_config(config)
|
storage.save_config(config)
|
||||||
container = discord.ui.Container()
|
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 = discord.ui.LayoutView()
|
||||||
resp_view.add_item(container)
|
resp_view.add_item(container)
|
||||||
await interaction.response.send_message(view=resp_view, ephemeral=True)
|
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)
|
@app_commands.checks.has_permissions(manage_guild=True)
|
||||||
async def ticket_config(self, interaction: discord.Interaction):
|
async def ticket_config(self, interaction: discord.Interaction):
|
||||||
config = storage.get_config(interaction.guild_id)
|
config = storage.get_config(interaction.guild_id)
|
||||||
cats = "\n".join(f"- {c.emoji} **{c.name}**" for c in config.categories) or "*Aucune*"
|
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 ""
|
log_line = f"**Canal de logs :** <#{config.log_channel_id}>\n" if config.log_channel_id else ""
|
||||||
container = discord.ui.Container()
|
container = discord.ui.Container()
|
||||||
container.add_item(
|
container.add_item(
|
||||||
|
|
|
||||||
120
tickets/ui.py
120
tickets/ui.py
|
|
@ -38,7 +38,7 @@ async def _send_log(guild: discord.Guild, config, embed: discord.Embed):
|
||||||
class PanelCreateButton(discord.ui.Button):
|
class PanelCreateButton(discord.ui.Button):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
label="Creer un ticket",
|
label="Créer un ticket",
|
||||||
style=discord.ButtonStyle.primary,
|
style=discord.ButtonStyle.primary,
|
||||||
custom_id="ticket_panel_create",
|
custom_id="ticket_panel_create",
|
||||||
)
|
)
|
||||||
|
|
@ -46,12 +46,12 @@ class PanelCreateButton(discord.ui.Button):
|
||||||
async def callback(self, interaction: discord.Interaction):
|
async def callback(self, interaction: discord.Interaction):
|
||||||
config = storage.get_config(interaction.guild_id)
|
config = storage.get_config(interaction.guild_id)
|
||||||
if not config.enabled:
|
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
|
return
|
||||||
|
|
||||||
categories = config.categories
|
categories = config.categories
|
||||||
if not 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
|
return
|
||||||
|
|
||||||
if len(categories) == 1:
|
if len(categories) == 1:
|
||||||
|
|
@ -60,7 +60,7 @@ class PanelCreateButton(discord.ui.Button):
|
||||||
return
|
return
|
||||||
|
|
||||||
await interaction.response.send_message(
|
await interaction.response.send_message(
|
||||||
"Choisissez une categorie :",
|
"Choisissez une catégorie :",
|
||||||
view=CategorySelectView(categories),
|
view=CategorySelectView(categories),
|
||||||
ephemeral=True,
|
ephemeral=True,
|
||||||
)
|
)
|
||||||
|
|
@ -78,7 +78,7 @@ class CategorySelect(discord.ui.Select):
|
||||||
for c in categories[:25]
|
for c in categories[:25]
|
||||||
]
|
]
|
||||||
super().__init__(
|
super().__init__(
|
||||||
placeholder="Selectionnez une categorie...",
|
placeholder="Sélectionnez une catégorie...",
|
||||||
options=options,
|
options=options,
|
||||||
custom_id="ticket_category_select",
|
custom_id="ticket_category_select",
|
||||||
)
|
)
|
||||||
|
|
@ -88,7 +88,7 @@ class CategorySelect(discord.ui.Select):
|
||||||
config = storage.get_config(interaction.guild_id)
|
config = storage.get_config(interaction.guild_id)
|
||||||
cat = next((c for c in config.categories if c.id == cat_id), None)
|
cat = next((c for c in config.categories if c.id == cat_id), None)
|
||||||
if not cat:
|
if not cat:
|
||||||
await interaction.response.send_message("Categorie introuvable.", ephemeral=True)
|
await interaction.response.send_message("Catégorie introuvable.", ephemeral=True)
|
||||||
return
|
return
|
||||||
await interaction.response.send_modal(TicketModal(cat.id, cat.name))
|
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"):
|
class TicketModal(discord.ui.Modal, title="Nouveau Ticket"):
|
||||||
reason = discord.ui.TextInput(
|
reason = discord.ui.TextInput(
|
||||||
label="Decris ton probleme",
|
label="Décris ton problème",
|
||||||
style=discord.TextStyle.paragraph,
|
style=discord.TextStyle.paragraph,
|
||||||
placeholder="Explique brievement ta demande...",
|
placeholder="Explique brièvement ta demande...",
|
||||||
required=True,
|
required=True,
|
||||||
max_length=2000,
|
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)
|
cat = next((c for c in config.categories if c.id == self.category_id), None)
|
||||||
if not cat:
|
if not cat:
|
||||||
await interaction.followup.send("Categorie introuvable.", ephemeral=True)
|
await interaction.followup.send("Catégorie introuvable.", ephemeral=True)
|
||||||
return
|
return
|
||||||
|
|
||||||
overwrites = {
|
overwrites = {
|
||||||
|
|
@ -189,34 +189,36 @@ class TicketModal(discord.ui.Modal, title="Nouveau Ticket"):
|
||||||
discord.ui.TextDisplay(
|
discord.ui.TextDisplay(
|
||||||
f"## Ticket — {cat.name}\n"
|
f"## Ticket — {cat.name}\n"
|
||||||
f"**Utilisateur :** {interaction.user.mention}\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}"
|
f"**Raison :**\n{self.reason.value}"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
container.add_item(discord.ui.Separator())
|
container.add_item(discord.ui.Separator())
|
||||||
container.add_item(discord.ui.TextDisplay("### Gestion"))
|
container.add_item(discord.ui.TextDisplay("### Gestion"))
|
||||||
container.add_item(discord.ui.ActionRow(
|
container.add_item(
|
||||||
ClaimButton(), TransferButton(), LockButton(),
|
discord.ui.ActionRow(
|
||||||
))
|
ClaimButton(),
|
||||||
|
TransferButton(),
|
||||||
|
LockButton(),
|
||||||
|
)
|
||||||
|
)
|
||||||
container.add_item(discord.ui.Separator())
|
container.add_item(discord.ui.Separator())
|
||||||
container.add_item(discord.ui.TextDisplay("### Informations"))
|
container.add_item(
|
||||||
container.add_item(discord.ui.ActionRow(
|
discord.ui.ActionRow(
|
||||||
PriorityButton(), AddMemberButton(), StatsButton(),
|
AddMemberButton(),
|
||||||
))
|
CloseButton(),
|
||||||
container.add_item(discord.ui.Separator())
|
)
|
||||||
container.add_item(discord.ui.ActionRow(
|
)
|
||||||
CloseButton(),
|
|
||||||
))
|
|
||||||
view = discord.ui.LayoutView()
|
view = discord.ui.LayoutView()
|
||||||
view.add_item(container)
|
view.add_item(container)
|
||||||
|
|
||||||
await channel.send(view=view)
|
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(
|
embed = discord.Embed(
|
||||||
title="Ticket cree",
|
title="Ticket créé",
|
||||||
description=f"**Categorie :** {cat.name}\n**Utilisateur :** {interaction.user.mention}\n**Canal :** {channel.mention}",
|
description=f"**Catégorie :** {cat.name}\n**Utilisateur :** {interaction.user.mention}\n**Canal :** {channel.mention}",
|
||||||
color=discord.Color.green(),
|
color=discord.Color.green(),
|
||||||
timestamp=datetime.now(timezone.utc),
|
timestamp=datetime.now(timezone.utc),
|
||||||
)
|
)
|
||||||
|
|
@ -226,7 +228,7 @@ class TicketModal(discord.ui.Modal, title="Nouveau Ticket"):
|
||||||
class ClaimButton(discord.ui.Button):
|
class ClaimButton(discord.ui.Button):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
label="Claim",
|
label="Réclamer",
|
||||||
style=discord.ButtonStyle.success,
|
style=discord.ButtonStyle.success,
|
||||||
custom_id="ticket_claim",
|
custom_id="ticket_claim",
|
||||||
)
|
)
|
||||||
|
|
@ -240,7 +242,7 @@ class ClaimButton(discord.ui.Button):
|
||||||
|
|
||||||
member = interaction.guild.get_member(interaction.user.id)
|
member = interaction.guild.get_member(interaction.user.id)
|
||||||
if not member or not _is_staff(member, config):
|
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
|
return
|
||||||
|
|
||||||
if ticket.claimed_by:
|
if ticket.claimed_by:
|
||||||
|
|
@ -248,11 +250,11 @@ class ClaimButton(discord.ui.Button):
|
||||||
ticket.claimed_by = None
|
ticket.claimed_by = None
|
||||||
storage.save_ticket(ticket)
|
storage.save_ticket(ticket)
|
||||||
await interaction.response.send_message(
|
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:
|
else:
|
||||||
await interaction.response.send_message(
|
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
|
return
|
||||||
|
|
||||||
|
|
@ -261,14 +263,14 @@ class ClaimButton(discord.ui.Button):
|
||||||
|
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="Ticket claim",
|
title="Ticket claim",
|
||||||
description=f"Claim par {interaction.user.mention}",
|
description=f"Réclamé par {interaction.user.mention}",
|
||||||
color=discord.Color.green(),
|
color=discord.Color.green(),
|
||||||
timestamp=datetime.now(timezone.utc),
|
timestamp=datetime.now(timezone.utc),
|
||||||
)
|
)
|
||||||
await _send_log(interaction.guild, config, embed)
|
await _send_log(interaction.guild, config, embed)
|
||||||
|
|
||||||
container = discord.ui.Container()
|
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 = discord.ui.LayoutView()
|
||||||
view.add_item(container)
|
view.add_item(container)
|
||||||
await interaction.response.send_message(view=view)
|
await interaction.response.send_message(view=view)
|
||||||
|
|
@ -295,7 +297,7 @@ class AddMemberButton(discord.ui.Button):
|
||||||
return
|
return
|
||||||
|
|
||||||
await interaction.response.send_message(
|
await interaction.response.send_message(
|
||||||
"Selectionnez le membre a ajouter :",
|
"Sélectionnez le membre à ajouter :",
|
||||||
view=AddMemberSelectView(),
|
view=AddMemberSelectView(),
|
||||||
ephemeral=True,
|
ephemeral=True,
|
||||||
)
|
)
|
||||||
|
|
@ -304,7 +306,7 @@ class AddMemberButton(discord.ui.Button):
|
||||||
class AddMemberSelect(discord.ui.UserSelect):
|
class AddMemberSelect(discord.ui.UserSelect):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
placeholder="Selectionnez un membre...",
|
placeholder="Sélectionnez un membre...",
|
||||||
custom_id="ticket_add_member_select",
|
custom_id="ticket_add_member_select",
|
||||||
min_values=1,
|
min_values=1,
|
||||||
max_values=1,
|
max_values=1,
|
||||||
|
|
@ -319,12 +321,12 @@ class AddMemberSelect(discord.ui.UserSelect):
|
||||||
read_message_history=True,
|
read_message_history=True,
|
||||||
)
|
)
|
||||||
await interaction.response.edit_message(
|
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,
|
view=None,
|
||||||
)
|
)
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="Membre ajoute",
|
title="Membre ajouté",
|
||||||
description=f"{user.mention} a ete ajoute par {interaction.user.mention}",
|
description=f"{user.mention} a été ajouté par {interaction.user.mention}",
|
||||||
color=discord.Color.blue(),
|
color=discord.Color.blue(),
|
||||||
timestamp=datetime.now(timezone.utc),
|
timestamp=datetime.now(timezone.utc),
|
||||||
)
|
)
|
||||||
|
|
@ -340,7 +342,7 @@ class AddMemberSelectView(discord.ui.View):
|
||||||
class TransferButton(discord.ui.Button):
|
class TransferButton(discord.ui.Button):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
label="Transfer",
|
label="Transférer",
|
||||||
style=discord.ButtonStyle.secondary,
|
style=discord.ButtonStyle.secondary,
|
||||||
custom_id="ticket_transfer",
|
custom_id="ticket_transfer",
|
||||||
)
|
)
|
||||||
|
|
@ -353,10 +355,10 @@ class TransferButton(discord.ui.Button):
|
||||||
return
|
return
|
||||||
member = interaction.guild.get_member(interaction.user.id)
|
member = interaction.guild.get_member(interaction.user.id)
|
||||||
if not member or not _is_staff(member, config):
|
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
|
return
|
||||||
await interaction.response.send_message(
|
await interaction.response.send_message(
|
||||||
"Selectionnez le staff :",
|
"Sélectionnez le staff :",
|
||||||
view=TransferSelectView(),
|
view=TransferSelectView(),
|
||||||
ephemeral=True,
|
ephemeral=True,
|
||||||
)
|
)
|
||||||
|
|
@ -365,7 +367,7 @@ class TransferButton(discord.ui.Button):
|
||||||
class TransferSelect(discord.ui.UserSelect):
|
class TransferSelect(discord.ui.UserSelect):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
placeholder="Selectionnez un staff...",
|
placeholder="Sélectionnez un staff...",
|
||||||
custom_id="ticket_transfer_select",
|
custom_id="ticket_transfer_select",
|
||||||
min_values=1,
|
min_values=1,
|
||||||
max_values=1,
|
max_values=1,
|
||||||
|
|
@ -378,12 +380,12 @@ class TransferSelect(discord.ui.UserSelect):
|
||||||
ticket.claimed_by = user.id
|
ticket.claimed_by = user.id
|
||||||
storage.save_ticket(ticket)
|
storage.save_ticket(ticket)
|
||||||
await interaction.response.edit_message(
|
await interaction.response.edit_message(
|
||||||
content=f"Ticket transfere a {user.mention}.",
|
content=f"Ticket transféré à {user.mention}.",
|
||||||
view=None,
|
view=None,
|
||||||
)
|
)
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="Ticket transfere",
|
title="Ticket transféré",
|
||||||
description=f"Transfere a {user.mention} par {interaction.user.mention}",
|
description=f"Transféré à {user.mention} par {interaction.user.mention}",
|
||||||
color=discord.Color.blue(),
|
color=discord.Color.blue(),
|
||||||
timestamp=datetime.now(timezone.utc),
|
timestamp=datetime.now(timezone.utc),
|
||||||
)
|
)
|
||||||
|
|
@ -412,10 +414,10 @@ class PriorityButton(discord.ui.Button):
|
||||||
return
|
return
|
||||||
member = interaction.guild.get_member(interaction.user.id)
|
member = interaction.guild.get_member(interaction.user.id)
|
||||||
if not member or not _is_staff(member, config):
|
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
|
return
|
||||||
await interaction.response.send_message(
|
await interaction.response.send_message(
|
||||||
"Selectionnez la priorite :",
|
"Sélectionnez la priorité :",
|
||||||
view=PrioritySelectView(),
|
view=PrioritySelectView(),
|
||||||
ephemeral=True,
|
ephemeral=True,
|
||||||
)
|
)
|
||||||
|
|
@ -424,7 +426,7 @@ class PriorityButton(discord.ui.Button):
|
||||||
class PrioritySelect(discord.ui.Select):
|
class PrioritySelect(discord.ui.Select):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
placeholder="Selectionnez la priorite...",
|
placeholder="Sélectionnez la priorité...",
|
||||||
custom_id="ticket_priority_select",
|
custom_id="ticket_priority_select",
|
||||||
options=[
|
options=[
|
||||||
discord.SelectOption(label="Basse", value="low", emoji="🟢"),
|
discord.SelectOption(label="Basse", value="low", emoji="🟢"),
|
||||||
|
|
@ -463,7 +465,7 @@ class PrioritySelectView(discord.ui.View):
|
||||||
class LockButton(discord.ui.Button):
|
class LockButton(discord.ui.Button):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
label="Lock",
|
label="Verrouiller",
|
||||||
style=discord.ButtonStyle.secondary,
|
style=discord.ButtonStyle.secondary,
|
||||||
custom_id="ticket_lock",
|
custom_id="ticket_lock",
|
||||||
)
|
)
|
||||||
|
|
@ -476,7 +478,7 @@ class LockButton(discord.ui.Button):
|
||||||
return
|
return
|
||||||
member = interaction.guild.get_member(interaction.user.id)
|
member = interaction.guild.get_member(interaction.user.id)
|
||||||
if not member or not _is_staff(member, config):
|
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
|
return
|
||||||
|
|
||||||
ticket.locked = not ticket.locked
|
ticket.locked = not ticket.locked
|
||||||
|
|
@ -486,14 +488,14 @@ class LockButton(discord.ui.Button):
|
||||||
overwrites.send_messages = not ticket.locked
|
overwrites.send_messages = not ticket.locked
|
||||||
await interaction.channel.set_permissions(interaction.guild.default_role, overwrite=overwrites)
|
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(
|
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(
|
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}",
|
description=f"Par {interaction.user.mention}",
|
||||||
color=discord.Color.orange() if ticket.locked else discord.Color.green(),
|
color=discord.Color.orange() if ticket.locked else discord.Color.green(),
|
||||||
timestamp=datetime.now(timezone.utc),
|
timestamp=datetime.now(timezone.utc),
|
||||||
|
|
@ -568,9 +570,9 @@ class CloseButton(discord.ui.Button):
|
||||||
ticket.closed_by = interaction.user.id
|
ticket.closed_by = interaction.user.id
|
||||||
|
|
||||||
if config.transcript_enabled:
|
if config.transcript_enabled:
|
||||||
html = generate_transcript(ticket, interaction.guild.name)
|
html_content = generate_transcript(ticket, interaction.guild.name)
|
||||||
transcript_file = discord.File(
|
transcript_file = discord.File(
|
||||||
fp=__import__("io").BytesIO(html.encode()),
|
fp=__import__("io").BytesIO(html_content.encode()),
|
||||||
filename=f"ticket_{ticket.channel_id}.html",
|
filename=f"ticket_{ticket.channel_id}.html",
|
||||||
)
|
)
|
||||||
if config.log_channel_id:
|
if config.log_channel_id:
|
||||||
|
|
@ -578,7 +580,7 @@ class CloseButton(discord.ui.Button):
|
||||||
if ch:
|
if ch:
|
||||||
with contextlib.suppress(discord.HTTPException):
|
with contextlib.suppress(discord.HTTPException):
|
||||||
await ch.send(
|
await ch.send(
|
||||||
f"Ticket ferme par {interaction.user.mention}",
|
f"Ticket fermé par {interaction.user.mention}",
|
||||||
file=transcript_file,
|
file=transcript_file,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -588,9 +590,9 @@ class CloseButton(discord.ui.Button):
|
||||||
if user:
|
if user:
|
||||||
with contextlib.suppress(discord.HTTPException):
|
with contextlib.suppress(discord.HTTPException):
|
||||||
await user.send(
|
await user.send(
|
||||||
"Ton ticket a ete ferme.",
|
"Ton ticket a été fermé.",
|
||||||
file=discord.File(
|
file=discord.File(
|
||||||
fp=__import__("io").BytesIO(html.encode()),
|
fp=__import__("io").BytesIO(html_content.encode()),
|
||||||
filename=f"ticket_{ticket.channel_id}.html",
|
filename=f"ticket_{ticket.channel_id}.html",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
@ -599,19 +601,19 @@ class CloseButton(discord.ui.Button):
|
||||||
storage.save_ticket(ticket)
|
storage.save_ticket(ticket)
|
||||||
|
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="Ticket ferme",
|
title="Ticket fermé",
|
||||||
description=f"**Ferme par :** {interaction.user.mention}\n**Categorie :** {ticket.category_id}",
|
description=f"**Fermé par :** {interaction.user.mention}\n**Catégorie :** {ticket.category_id}",
|
||||||
color=discord.Color.red(),
|
color=discord.Color.red(),
|
||||||
timestamp=datetime.now(timezone.utc),
|
timestamp=datetime.now(timezone.utc),
|
||||||
)
|
)
|
||||||
await _send_log(interaction.guild, config, embed)
|
await _send_log(interaction.guild, config, embed)
|
||||||
|
|
||||||
container = discord.ui.Container()
|
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 = discord.ui.LayoutView()
|
||||||
view.add_item(container)
|
view.add_item(container)
|
||||||
await interaction.followup.send(view=view)
|
await interaction.followup.send(view=view)
|
||||||
|
|
||||||
await asyncio.sleep(5)
|
await asyncio.sleep(5)
|
||||||
with contextlib.suppress(discord.HTTPException):
|
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}")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue