66 lines
2.6 KiB
Python
66 lines
2.6 KiB
Python
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 !")
|