Vicy_Publique/__main__.py
utilisateurqu c9ad155bf6 V2.0: Refonte système bancaire - DB SQLite, RIB FR, TVA auto, multi-banques
- Remplace JSON par SQLite (aiosqlite) pour atomicité et intégrité
- Nouveau format RIB français avec checksum modulo 97
- Chaque banque a son propre rôle Discord (isolation par serveur)
- TVA automatique Particulier -> Entreprise, redirection au Fisc
- Institutions gouvernementales avec droit d'audit optionnel
- Commandes: /gouv, /banque, /audit, /mes-ribs
- Supprime: 16 anciens fichiers (entreprises, FBM, URSAFF, etc.)
- Reset complet des données, repart de zéro
2026-08-18 17:42:03 +02:00

113 lines
3.5 KiB
Python

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="1337733859814543410", intents=intents)
async def load_cogs():
"""Charge toutes les commandes."""
extensions = [
"commandes.message",
"commandes.identite",
"commandes.voir_carte_identite",
"commandes.virement",
"commandes.compte",
"commandes.mes_ribs",
"commandes.gouv",
"commandes.banque",
"commandes.audit",
"commandes.ticket",
"commandes.restranscription_staff",
"utils.welcome_message",
"commandes.permis",
"commandes.change_nickname",
"commandes.rename_all_on_join",
"commandes.message_tous",
"commandes.valider_visite_médicale",
"commandes.stats_commandes",
"commandes.roll",
"commandes.annonces_sessions",
"commandes.counting",
"commandes.config",
"commandes.panel"
]
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 V2.0"))
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())