Kuby/commandes/whitelist.py

98 lines
4 KiB
Python
Raw Normal View History

2026-01-01 18:48:25 +01:00
import discord
from discord import app_commands
from discord.ext import commands
import json
import os
from typing import List
WHITELIST_FILE = "data/whitelist.json"
class Whitelist(commands.GroupCog, name="whitelist"):
def __init__(self, bot):
self.bot = bot
self.whitelist = self.load_whitelist()
def load_whitelist(self):
if not os.path.exists(WHITELIST_FILE):
return {}
try:
with open(WHITELIST_FILE, "r", encoding="utf-8") as f:
return json.load(f)
except json.JSONDecodeError:
return {}
def save_whitelist(self):
with open(WHITELIST_FILE, "w", encoding="utf-8") as f:
json.dump(self.whitelist, f, ensure_ascii=False, indent=4)
def _get_guild_whitelist(self, guild_id: int) -> List[str]:
return self.whitelist.get(str(guild_id), [])
def _set_guild_whitelist(self, guild_id: int, users: List[str]):
self.whitelist[str(guild_id)] = users
self.save_whitelist()
# ✅ Ajouter un utilisateur
@app_commands.command(name="ajouter", description="Ajoute un utilisateur à la whitelist")
@app_commands.describe(utilisateur="L'utilisateur à ajouter")
async def ajouter(self, interaction: discord.Interaction, utilisateur: discord.User):
guild_id = interaction.guild.id
users = self._get_guild_whitelist(guild_id)
user_id = str(utilisateur.id)
if user_id in users:
await interaction.response.send_message(f"🔒 {utilisateur.mention} est déjà dans la whitelist.", ephemeral=True)
return
users.append(user_id)
self._set_guild_whitelist(guild_id, users)
await interaction.response.send_message(f"{utilisateur.mention} a été ajouté à la whitelist.", ephemeral=True)
# ❌ Retirer un utilisateur
@app_commands.command(name="retirer", description="Retire un utilisateur de la whitelist")
@app_commands.describe(utilisateur="L'utilisateur à retirer")
async def retirer(self, interaction: discord.Interaction, utilisateur: discord.User):
guild_id = interaction.guild.id
users = self._get_guild_whitelist(guild_id)
user_id = str(utilisateur.id)
if user_id not in users:
await interaction.response.send_message(f"⚠️ {utilisateur.mention} n'est pas dans la whitelist.", ephemeral=True)
return
users.remove(user_id)
self._set_guild_whitelist(guild_id, users)
await interaction.response.send_message(f"{utilisateur.mention} a été retiré de la whitelist.", ephemeral=True)
# 📋 Voir la whitelist
@app_commands.command(name="liste", description="Affiche les utilisateurs de la whitelist")
async def liste(self, interaction: discord.Interaction):
guild_id = interaction.guild.id
users = self._get_guild_whitelist(guild_id)
if not users:
await interaction.response.send_message("📭 La whitelist est vide pour ce serveur.", ephemeral=True)
return
membres = []
for user_id in users:
try:
utilisateur = await self.bot.fetch_user(int(user_id))
membres.append(f"- {utilisateur.mention} ({utilisateur.name}#{utilisateur.discriminator})")
except discord.NotFound:
membres.append(f"- <@{user_id}> (Utilisateur introuvable)")
texte = "\n".join(membres)
await interaction.response.send_message(f"📃 **Utilisateurs whitelistés pour ce serveur :**\n{texte}", ephemeral=True)
def is_whitelisted(self, guild_id: int, user_id: int) -> bool:
"""Check if a user is whitelisted for a specific guild."""
return str(user_id) in self._get_guild_whitelist(guild_id)
def get_whitelist_users(self, guild_id: int) -> List[str]:
"""Get all whitelisted user IDs for a specific guild."""
return self._get_guild_whitelist(guild_id).copy()
async def setup(bot):
await bot.add_cog(Whitelist(bot))