fix: resolve merge conflicts in ticket_whitelist, add retry logic for port 5001 in bug_report, and implement live GitLab issue deduplication in logger
This commit is contained in:
parent
c40c3f1f12
commit
16263d88bc
6 changed files with 525 additions and 54 deletions
|
|
@ -3,7 +3,9 @@ from discord.ext import commands
|
|||
from discord import app_commands, ui
|
||||
import json
|
||||
import os
|
||||
import asyncio
|
||||
from typing import Optional
|
||||
from src.logger import kuby_logger
|
||||
|
||||
TICKET_WHITELIST_SETTINGS_FILE = "data/ticket_whitelist_settings.json"
|
||||
|
||||
|
|
@ -43,12 +45,6 @@ class TicketWhitelistConfigView(ui.View):
|
|||
def check(m):
|
||||
return m.author == interaction.user and m.channel == interaction.channel
|
||||
|
||||
try:
|
||||
# We use an explicit import here to avoid clashing if __import__ syntax is weird, but using standard asyncio module is fine if we import it at top. Let's add import asyncio at the top instead!
|
||||
pass
|
||||
except __import__("asyncio").TimeoutError:
|
||||
pass
|
||||
|
||||
try:
|
||||
msg = await interaction.client.wait_for('message', check=check, timeout=30)
|
||||
target = None
|
||||
|
|
@ -322,6 +318,23 @@ class TicketManagementView(discord.ui.View):
|
|||
|
||||
def __init__(self):
|
||||
super().__init__(timeout=None)
|
||||
self.claimed_by = None # Stocke le staff qui claim le ticket
|
||||
|
||||
async def get_ticket_owner(self, interaction: discord.Interaction):
|
||||
"""Récupère le propriétaire du ticket via le topic du salon"""
|
||||
if interaction.channel.topic and interaction.channel.topic.startswith("Ticket de "):
|
||||
try:
|
||||
owner_id = int(interaction.channel.topic.split("Ticket de ")[1])
|
||||
member = interaction.guild.get_member(owner_id)
|
||||
if not member:
|
||||
try:
|
||||
member = await interaction.guild.fetch_member(owner_id)
|
||||
except discord.NotFound:
|
||||
return None
|
||||
return member
|
||||
except (ValueError, IndexError):
|
||||
return None
|
||||
return None
|
||||
|
||||
@discord.ui.button(label="🔒 Fermer le Ticket", style=discord.ButtonStyle.red, custom_id="close_ticket")
|
||||
async def close_ticket(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
|
|
@ -332,19 +345,11 @@ class TicketManagementView(discord.ui.View):
|
|||
if not discord.utils.get(interaction.user.roles, id=int(staff_role_id) if staff_role_id else 0) and not interaction.user.guild_permissions.administrator:
|
||||
return await interaction.response.send_message("❌ Seuls les staffs peuvent fermer un ticket.", ephemeral=True)
|
||||
|
||||
topic = interaction.channel.topic or ""
|
||||
if not topic.startswith("Ticket de "):
|
||||
owner = await self.get_ticket_owner(interaction)
|
||||
if not owner:
|
||||
return await interaction.response.send_message("❌ Impossible de trouver le propriétaire du ticket à fermer.", ephemeral=True)
|
||||
|
||||
try:
|
||||
owner_id = int(topic.split("Ticket de ")[1])
|
||||
ticket_owner = interaction.guild.get_member(owner_id)
|
||||
if not ticket_owner:
|
||||
ticket_owner = await interaction.guild.fetch_member(owner_id)
|
||||
except (IndexError, ValueError, discord.NotFound):
|
||||
return await interaction.response.send_message("❌ Membre introuvable.", ephemeral=True)
|
||||
|
||||
await interaction.channel.set_permissions(ticket_owner, read_messages=False, send_messages=False)
|
||||
await interaction.channel.set_permissions(owner, read_messages=False, send_messages=False)
|
||||
await interaction.channel.edit(name="ticket-fermé")
|
||||
await interaction.response.send_message("🔒 Le ticket a été fermé. Vous ne pouvez plus le voir.", ephemeral=True)
|
||||
|
||||
|
|
@ -376,6 +381,22 @@ class ClosedTicketView(discord.ui.View):
|
|||
def __init__(self):
|
||||
super().__init__(timeout=None)
|
||||
|
||||
async def get_ticket_owner(self, interaction: discord.Interaction):
|
||||
"""Récupère le propriétaire du ticket via le topic du salon"""
|
||||
if interaction.channel.topic and interaction.channel.topic.startswith("Ticket de "):
|
||||
try:
|
||||
owner_id = int(interaction.channel.topic.split("Ticket de ")[1])
|
||||
member = interaction.guild.get_member(owner_id)
|
||||
if not member:
|
||||
try:
|
||||
member = await interaction.guild.fetch_member(owner_id)
|
||||
except discord.NotFound:
|
||||
return None
|
||||
return member
|
||||
except (ValueError, IndexError):
|
||||
return None
|
||||
return None
|
||||
|
||||
@discord.ui.button(label="♻ Réouvrir le Ticket", style=discord.ButtonStyle.green, custom_id="reopen_ticket")
|
||||
async def reopen_ticket(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
"""Réouvre le ticket pour le membre"""
|
||||
|
|
@ -385,19 +406,11 @@ class ClosedTicketView(discord.ui.View):
|
|||
if not discord.utils.get(interaction.user.roles, id=int(staff_role_id) if staff_role_id else 0) and not interaction.user.guild_permissions.administrator:
|
||||
return await interaction.response.send_message("❌ Seuls les staffs peuvent réouvrir un ticket.", ephemeral=True)
|
||||
|
||||
topic = interaction.channel.topic or ""
|
||||
if not topic.startswith("Ticket de "):
|
||||
owner = await self.get_ticket_owner(interaction)
|
||||
if not owner:
|
||||
return await interaction.response.send_message("❌ Impossible de trouver le propriétaire du ticket à réouvrir.", ephemeral=True)
|
||||
|
||||
try:
|
||||
owner_id = int(topic.split("Ticket de ")[1])
|
||||
ticket_owner = interaction.guild.get_member(owner_id)
|
||||
if not ticket_owner:
|
||||
ticket_owner = await interaction.guild.fetch_member(owner_id)
|
||||
except (IndexError, ValueError, discord.NotFound):
|
||||
return await interaction.response.send_message("❌ Membre introuvable.", ephemeral=True)
|
||||
|
||||
await interaction.channel.set_permissions(ticket_owner, read_messages=True, send_messages=True)
|
||||
await interaction.channel.set_permissions(owner, read_messages=True, send_messages=True)
|
||||
await interaction.response.send_message("✅ Le ticket a été réouvert.", ephemeral=True)
|
||||
|
||||
# Mettre à jour la vue pour afficher tous les boutons
|
||||
|
|
@ -433,6 +446,12 @@ class Ticket(commands.Cog):
|
|||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
|
||||
async def cog_load(self):
|
||||
"""Enregistre les vues persistantes"""
|
||||
self.bot.add_view(TicketView())
|
||||
self.bot.add_view(TicketManagementView())
|
||||
self.bot.add_view(ClosedTicketView())
|
||||
|
||||
@app_commands.command(name="ticket_whitelist", description="Envoie l'embed pour ouvrir un ticket de whitelist.")
|
||||
@app_commands.checks.has_permissions(administrator=True)
|
||||
async def ticket_whitelist(self, interaction: discord.Interaction):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue