2026-05-06 17:07:09 +02:00
|
|
|
import disnake
|
|
|
|
|
from disnake.ext import commands
|
2026-05-01 16:16:33 +02:00
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
from commandes.ticket.data.storage import get_storage
|
|
|
|
|
from commandes.ticket.staff_analytics import StaffAnalytics
|
2026-07-06 16:08:14 +02:00
|
|
|
from utils.premium import check_premium_tier
|
2026-05-01 16:16:33 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class StaffLeaderboard(commands.Cog):
|
|
|
|
|
def __init__(self, bot):
|
|
|
|
|
self.bot = bot
|
|
|
|
|
|
2026-05-06 17:07:09 +02:00
|
|
|
@commands.slash_command(name="staff-leaderboard", description="Affiche le classement du staff")
|
2026-07-06 16:08:14 +02:00
|
|
|
@check_premium_tier()
|
2026-05-06 17:07:09 +02:00
|
|
|
async def staff_leaderboard(self, interaction: disnake.ApplicationCommandInteraction):
|
2026-05-01 16:16:33 +02:00
|
|
|
"""Commande pour afficher le classement du staff"""
|
|
|
|
|
await interaction.response.defer(ephemeral=False)
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
storage = get_storage()
|
|
|
|
|
analytics = StaffAnalytics(self.bot)
|
|
|
|
|
|
|
|
|
|
# Get staff list
|
|
|
|
|
staff_list = await analytics.get_staff_list(interaction.guild_id)
|
|
|
|
|
|
|
|
|
|
if not staff_list:
|
|
|
|
|
await interaction.followup.send("Aucun membre du staff n'a été trouvé.", ephemeral=True)
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
# Sort by average rating (descending)
|
|
|
|
|
staff_list.sort(key=lambda x: x['average_rating'], reverse=True)
|
|
|
|
|
|
|
|
|
|
# Create embed
|
2026-05-06 17:07:09 +02:00
|
|
|
embed = disnake.Embed(
|
2026-05-01 16:16:33 +02:00
|
|
|
title="🏆 Classement du Staff",
|
|
|
|
|
description="Classement des meilleurs membres du staff",
|
2026-05-06 17:07:09 +02:00
|
|
|
color=disnake.Color.gold(),
|
2026-05-01 16:16:33 +02:00
|
|
|
timestamp=datetime.now()
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# Add top 10 staff members
|
|
|
|
|
top_staff = staff_list[:10]
|
|
|
|
|
for i, staff in enumerate(top_staff, 1):
|
|
|
|
|
rating = staff['average_rating']
|
|
|
|
|
count = staff['total_ratings']
|
|
|
|
|
name = staff['name']
|
|
|
|
|
|
|
|
|
|
# Add emoji based on rating
|
|
|
|
|
if rating >= 4.5:
|
|
|
|
|
emoji = "🥇"
|
|
|
|
|
elif rating >= 4.0:
|
|
|
|
|
emoji = "🥈"
|
|
|
|
|
elif rating >= 3.5:
|
|
|
|
|
emoji = "🥉"
|
|
|
|
|
else:
|
|
|
|
|
emoji = "⭐"
|
|
|
|
|
|
|
|
|
|
embed.add_field(
|
|
|
|
|
name=f"{emoji} #{i} {name}",
|
|
|
|
|
value=f"Note: {rating:.1f}⭐ ({count} évaluations)",
|
|
|
|
|
inline=False
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# Send embed
|
|
|
|
|
await interaction.followup.send(embed=embed)
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"Error in staff_leaderboard command: {e}")
|
|
|
|
|
await interaction.followup.send("Une erreur est survenue lors de la génération du classement.", ephemeral=True)
|
|
|
|
|
|
|
|
|
|
|
2026-05-09 18:42:42 +02:00
|
|
|
def setup(bot):
|
|
|
|
|
bot.add_cog(StaffLeaderboard(bot))
|