Kuby/commandes/staff_leaderboard.py

74 lines
2.7 KiB
Python
Raw Permalink Normal View History

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)
def setup(bot):
bot.add_cog(StaffLeaderboard(bot))