import discord import asyncio import logging from utils.logger import log_info, log_error from discord.ext import commands from discord import app_commands, Intents, Permissions from dotenv import load_dotenv import os from utils.stats_manager import enregistrer_utilisation # Configuration du logger Discord (niveau DEBUG pour afficher tous les événements importants) logging.basicConfig(level=logging.DEBUG) discord.utils.setup_logging(level=logging.DEBUG, root=False) # Configuration des intents intents = Intents.default() intents.message_content = True intents.guilds = True intents.members = True intents.reactions = True # Permissions du bot permissions = Permissions() permissions.update( manage_nicknames=True, send_messages=True, read_messages=True, manage_channels=True, manage_messages=True, add_reactions=True, use_application_commands=True, view_channel=True ) # Initialisation du bot bot = commands.Bot(command_prefix="!", application_id="1310235313461002241", intents=intents) async def load_cogs(): """Charge toutes les commandes.""" extensions = [ "commandes.message", "commandes.identite", "commandes.voir_carte_identite", "commandes.virement", "commandes.transactions", "commandes.ajouter_argent", "commandes.ticket", "commandes.restranscription_staff", "utils.welcome_message", "commandes.permis", "commandes.ouvrir_compte", "commandes.compte", "commandes.change_nickname", "commandes.rename_all_on_join", "commandes.message_tous", "commandes.retirer_argent", "commandes.ouvrir_comptes_entreprises", "commandes.compte_gouvernement", "commandes.comptes_entreprises", "commandes.compte_urssaf", "commandes.compte_banque_nationale", "commandes.virement_entreprise", "commandes.virement_gouvernement", "commandes.valider_visite_médicale", "commandes.abonnement", "commandes.virement_banquier", "commandes.virement_banquier_entreprise", "commandes.compte_fbm", "commandes.virement_fbm", "commandes.virement_ursaff", "commandes.stats_commandes", "commandes.roll", "commandes.annonces_sessions", "commandes.retrait_gouv", "commandes.counting" ] for ext in extensions: try: await bot.load_extension(ext) log_info(f"Extension chargée : {ext}") except Exception as e: log_error(f"Erreur lors du chargement de {ext} : {e}") @bot.event async def on_ready(): # Affiche que le bot est prêt et synchronise les commandes slash log_info(f"Connecté en tant que {bot.user}") await load_cogs() await bot.tree.sync() await bot.change_presence(activity=discord.Game(name="la V1.8")) # Ajout du status log_info("Commandes synchronisées.") # Gère les erreurs de commandes classiques @bot.event async def on_command_error(ctx, error): log_error(f"Erreur dans la commande {ctx.command}: {error}") # Gère toutes les autres erreurs inattendues @bot.event async def on_error(event_method, *args, **kwargs): log_error(f"Erreur non gérée dans l'événement {event_method}", exc_info=True) # 👉 Enregistre chaque commande slash utilisée @bot.event async def on_app_command_completion(interaction: discord.Interaction, command: app_commands.Command): try: user_id = interaction.user.id guild_id = interaction.guild.id if interaction.guild else 0 enregistrer_utilisation(command.name, user_id, guild_id) except Exception as e: log_error(f"Erreur en enregistrant les stats : {e}") async def main(): # Charge les variables d'environnement et démarre le bot load_dotenv() token = os.getenv("TOKEN") try: log_info("Démarrage du bot...") await bot.start(token) except Exception as e: log_error(f"Erreur critique: {e}", exc_info=True) if __name__ == "__main__": asyncio.run(main())