import discord from discord.ext import commands from discord import app_commands from datetime import datetime, timedelta class AbsenceStaff(commands.Cog): def __init__(self, bot): self.bot = bot self.absences = {} @app_commands.command(name="absence_staff", description="Indiquez votre absence en tant que staff.") async def absence_staff(self, interaction: discord.Interaction, duree: str, debut: str, fin: str, raison: str, superieur: discord.Member): """Indiquez votre absence en tant que staff.""" try: # Convertir les dates debut_date = datetime.strptime(debut, "%d/%m/%Y") fin_date = datetime.strptime(fin, "%d/%m/%Y") # Calculer la durée en jours if duree.endswith('s'): # Si la durée est en semaines duree_jours = int(duree[:-1]) * 7 else: duree_jours = int(duree) # Vérifier la cohérence des dates if (fin_date - debut_date).days != duree_jours: await interaction.response.send_message("❌ Erreur : La durée spécifiée ne correspond pas aux dates fournies.") return # Enregistrer l'absence self.absences[interaction.user.id] = { "debut": debut_date, "fin": fin_date, "raison": raison, "superieur": superieur.id } await interaction.response.send_message(f"✅ Votre absence a été enregistrée, {interaction.user.mention}.") except Exception as e: await interaction.response.send_message(f"❌ Erreur : {str(e)}") @commands.Cog.listener() async def on_message(self, message): # Ignorer les messages envoyés par le bot if message.author.bot: return # Vérifier si un utilisateur absent est mentionné for user_id, absence in self.absences.items(): user = self.bot.get_user(user_id) if user and user in message.mentions: # Répondre avec un message indiquant l'absence await message.channel.send( f"{user.display_name} est actuellement absent(e).\n" f"Raison : {absence['raison']}\n" f"Retour prévu le : {absence['fin'].strftime('%d/%m/%Y')}" ) # Supprimer le message avec la mention await message.delete() break async def setup(bot): await bot.add_cog(AbsenceStaff(bot)) print("Commande /absence_staff chargée !")