Kuby/commandes/convocation.py

104 lines
4.5 KiB
Python
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import discord
from discord.ext import commands
from discord import app_commands
class Convocation(commands.Cog):
def __init__(self, bot):
self.bot = bot
@app_commands.command(
name="convocation",
description="Convocation dun membre"
)
@app_commands.describe(
membre="Le membre à convoquer",
raison="La raison de la convocation",
heure="Lheure de la convocation"
)
@app_commands.checks.has_permissions(manage_roles=True)
async def convocation(
self,
interaction: discord.Interaction,
membre: discord.Member,
raison: str,
heure: str
):
role_convocation_id = 1388607106558726204
log_user_ids = [
1195440742307467377,
689550504963080328,
1359253046055534775
]
log_channel_id = 1389747212837322852
await interaction.response.defer(ephemeral=True)
try:
roles_to_remove = [
r for r in membre.roles if r.id != interaction.guild.id
]
await membre.remove_roles(*roles_to_remove)
role_convocation = interaction.guild.get_role(role_convocation_id)
if role_convocation:
await membre.add_roles(role_convocation)
embed_convocation = discord.Embed(
title="CONVOCATION | 🔖",
description=f"> Bonjour <@{membre.id}>, vous êtes **convoqué** par <@{interaction.user.id}>. Voici les **détails** :",
color=0x0099ff
)
embed_convocation.add_field(name="**Raison de la convocation :**", value=f"{raison}", inline=False)
embed_convocation.add_field(name="**Heure de la convocation :**", value=f"{heure}", inline=False)
embed_convocation.add_field(name="\u200B", value=(
"> Merci de vous présenter dans le vocal attente moov **5 minutes** avant lheure. "
"Soyez **professionnel**, et en cas dabsence, merci de contacter la personne vous ayant convoqué.\n\n"
"> La **levée** de suspension se fera uniquement à la **fin** de la convocation."
), inline=False)
embed_convocation.add_field(name="**__Bien cordialement__**", value="_La Gestion de Alésia | 📑_", inline=False)
embed_log = discord.Embed(
title="📋 CONVOCATION ENVOYÉE",
color=0xff9900
)
embed_log.add_field(name="👤 Membre convoqué", value=f"<@{membre.id}> ({membre.name}#{membre.discriminator})", inline=True)
embed_log.add_field(name="👮 Convoqué par", value=f"<@{interaction.user.id}> ({interaction.user.name}#{interaction.user.discriminator})", inline=True)
embed_log.add_field(name="📄 Raison", value=raison, inline=False)
embed_log.add_field(name="🕒 Heure", value=heure, inline=False)
embed_log.add_field(name="📆 Date", value=f"<t:{int(discord.utils.utcnow().timestamp())}:F>", inline=False)
embed_log.set_footer(text="Gestion des convocations", icon_url=self.bot.user.display_avatar.url)
# MP au membre
dm_sent = False
try:
await membre.send(embed=embed_convocation)
dm_sent = True
except:
dm_sent = False
await interaction.edit_original_response(content=(
f"✅ Convocation envoyée à {membre.mention}." if dm_sent else
f"⚠️ Convocation enregistrée, mais impossible d'envoyer un MP à {membre.mention}."
))
# Log aux utilisateurs
for user_id in log_user_ids:
try:
user = await self.bot.fetch_user(user_id)
await user.send(embed=embed_log)
except Exception as e:
print(f"Erreur lors de l'envoi du log à {user_id} : {e}")
# Log dans le salon
try:
log_channel = await self.bot.fetch_channel(log_channel_id)
if isinstance(log_channel, discord.TextChannel):
await log_channel.send(embed=embed_log)
except Exception as e:
print(f"Erreur lors de l'envoi du log dans le salon : {e}")
except Exception as e:
print(f"Erreur dans la commande /convocation : {e}")
await interaction.edit_original_response(content="❌ Une erreur est survenue.")
async def setup(bot):
await bot.add_cog(Convocation(bot))