diff --git a/commandes/ticket_whitelist.py b/commandes/ticket_whitelist.py index c730e3d..62b4647 100644 --- a/commandes/ticket_whitelist.py +++ b/commandes/ticket_whitelist.py @@ -508,18 +508,65 @@ class Ticket(commands.Cog): citoyen_role = discord.utils.get(message.guild.roles, id=int(citoyen_role_id)) if attente_oral_role in user.roles: - # Deuxième "validé" détecté - if attente_oral_role: await user.remove_roles(attente_oral_role) - if citoyen_role: await user.add_roles(citoyen_role) - await message.channel.edit(name=f"{user.name}-citoyen") + # Deuxième "validé" détecté -> Citoyen / Accepté + if attente_oral_role: + await user.remove_roles(attente_oral_role) + if citoyen_role: + await user.add_roles(citoyen_role) + + new_name = f"accepté-{user.display_name}" + new_name = new_name.replace(" ", "-").lower()[:100] + await message.channel.edit(name=new_name) + + # DM Professionnel + try: + embed_dm = discord.Embed( + title="🎉 Félicitations - Citoyenneté Validée !", + description=f"Nous avons le plaisir de t'annoncer que ton passage sur **{message.guild.name}** a été validé avec succès !", + color=discord.Color.green() + ) + 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}") + embed_dm.set_thumbnail(url=message.guild.icon.url if message.guild.icon else None) + + await user.send(embed=embed_dm) + except (discord.Forbidden, discord.HTTPException): + kuby_logger.warning(f"Impossible d'envoyer le DM de validation finale à {user} (DMs fermés)") + else: - # Premier "validé" détecté - if candidature_a_faire_role: await user.remove_roles(candidature_a_faire_role) - if attente_oral_role: await user.add_roles(attente_oral_role) - await message.channel.edit(name=f"{user.name}-oral") + # Premier "validé" détecté -> Oral à faire + if candidature_a_faire_role: + await user.remove_roles(candidature_a_faire_role) + if attente_oral_role: + await user.add_roles(attente_oral_role) + + new_name = f"oral-à-faire-{user.display_name}" + new_name = new_name.replace(" ", "-").lower()[:100] + await message.channel.edit(name=new_name) + + # DM Professionnel + try: + embed_dm = discord.Embed( + title="📝 Validation Étape Écrite", + 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}") + embed_dm.set_thumbnail(url=message.guild.icon.url if message.guild.icon else None) + + await user.send(embed=embed_dm) + except (discord.Forbidden, discord.HTTPException): + kuby_logger.warning(f"Impossible d'envoyer le DM de validation écrite à {user} (DMs fermés)") except Exception as e: - print(f"Erreur lors du traitement du ticket : {e}") + kuby_logger.error(f"Erreur lors du traitement du ticket whitelist : {e}", exc_info=True) + await message.channel.send(f"❌ Une erreur est survenue lors de l'attribution des rôles : {e}") async def setup(bot): await bot.add_cog(Ticket(bot)) diff --git a/data/json-export-history.json b/data/json-export-history.json index 29199ae..0e73f1e 100644 --- a/data/json-export-history.json +++ b/data/json-export-history.json @@ -1,6 +1,6 @@ [ { - "date": "2026-03-15T14:47:52.347860+00:00", + "date": "2026-03-15T15:50:47.091919+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -9,7 +9,7 @@ "success": true }, { - "date": "2026-03-15T14:47:22.217226+00:00", + "date": "2026-03-15T15:50:18.212410+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -18,7 +18,7 @@ "success": true }, { - "date": "2026-03-15T14:46:52.590478+00:00", + "date": "2026-03-15T15:49:46.889927+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -27,7 +27,7 @@ "success": true }, { - "date": "2026-03-15T14:46:22.537297+00:00", + "date": "2026-03-15T15:49:16.769299+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -36,7 +36,7 @@ "success": true }, { - "date": "2026-03-15T14:45:52.476361+00:00", + "date": "2026-03-15T15:48:47.085427+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -45,7 +45,7 @@ "success": true }, { - "date": "2026-03-15T14:45:22.366258+00:00", + "date": "2026-03-15T15:48:17.095709+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -54,7 +54,7 @@ "success": true }, { - "date": "2026-03-15T14:44:52.324714+00:00", + "date": "2026-03-15T15:47:47.329800+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -63,7 +63,7 @@ "success": true }, { - "date": "2026-03-15T14:44:22.457667+00:00", + "date": "2026-03-15T15:47:18.534958+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -72,7 +72,7 @@ "success": true }, { - "date": "2026-03-15T14:43:52.152864+00:00", + "date": "2026-03-15T15:46:47.376868+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -81,7 +81,7 @@ "success": true }, { - "date": "2026-03-15T14:43:22.245658+00:00", + "date": "2026-03-15T15:46:17.332159+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -90,7 +90,7 @@ "success": true }, { - "date": "2026-03-15T14:42:52.214026+00:00", + "date": "2026-03-15T15:45:47.106135+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -99,7 +99,7 @@ "success": true }, { - "date": "2026-03-15T14:42:22.476838+00:00", + "date": "2026-03-15T15:45:17.090020+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -108,7 +108,7 @@ "success": true }, { - "date": "2026-03-15T14:41:52.432825+00:00", + "date": "2026-03-15T15:44:47.086375+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -117,7 +117,7 @@ "success": true }, { - "date": "2026-03-15T14:41:22.797177+00:00", + "date": "2026-03-15T15:44:17.115416+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -126,7 +126,7 @@ "success": true }, { - "date": "2026-03-15T14:40:52.653953+00:00", + "date": "2026-03-15T15:43:47.082528+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -135,7 +135,7 @@ "success": true }, { - "date": "2026-03-15T14:40:24.102863+00:00", + "date": "2026-03-15T15:43:17.095728+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -144,7 +144,7 @@ "success": true }, { - "date": "2026-03-15T14:39:52.271096+00:00", + "date": "2026-03-15T15:42:47.113085+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -153,7 +153,7 @@ "success": true }, { - "date": "2026-03-15T14:39:22.664232+00:00", + "date": "2026-03-15T15:42:16.847998+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -162,7 +162,7 @@ "success": true }, { - "date": "2026-03-15T14:38:52.346842+00:00", + "date": "2026-03-15T15:41:46.885404+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13, @@ -171,7 +171,7 @@ "success": true }, { - "date": "2026-03-15T14:38:22.457672+00:00", + "date": "2026-03-15T15:41:16.883356+00:00", "trigger": "auto", "serversCount": 1, "membersCount": 13,