import discord from discord import app_commands from discord.ext import commands import json from datetime import datetime from utils.guild_config import has_role class AjouterArgent(commands.Cog): def __init__(self, bot): self.bot = bot # Choix de banques automatiques banque_choices = [ app_commands.Choice(name="Victoria's Credit Bank", value="Victoria's Credit Bank"), app_commands.Choice(name="NGC Bank", value="NGC Bank"), ] @app_commands.command( name="ajouter_argent", description="Ajoute de l'argent à un compte (réservé aux banquiers)." ) @app_commands.choices(banque=banque_choices) @app_commands.describe( rib="Le RIB du compte", montant="Montant à ajouter", banque="Banque cible (facultatif)" ) async def ajouter_argent( self, interaction: discord.Interaction, rib: str, montant: float, banque: app_commands.Choice[str] = None ): # Vérification du rôle if not has_role(interaction.user, "banquier"): await interaction.response.send_message( "❌ Vous n'avez pas la permission d'utiliser cette commande.", ephemeral=True ) return if montant <= 0: await interaction.response.send_message( "❌ Le montant doit être supérieur à zéro.", ephemeral=True ) return banque_nom = banque.value if banque else None # Chargement des fichiers with open("comptes_bancaires.json", "r", encoding="utf-8") as f: comptes = json.load(f) with open("comptes_entreprises.json", "r", encoding="utf-8") as f: entreprises = json.load(f) cible_data = None user_id = None is_entreprise = False # Recherche dans la banque spécifiée (si précisée) if banque_nom and banque_nom in comptes: for uid, info in comptes[banque_nom].items(): if info.get("rib") == rib: cible_data = comptes user_id = uid break if not user_id and banque_nom and banque_nom in entreprises: for nom_entreprise, info in entreprises[banque_nom].items(): if info.get("rib") == rib: cible_data = entreprises user_id = nom_entreprise is_entreprise = True break # Si banque non précisée ou compte non trouvé, recherche dans toutes les banques if not user_id and not banque_nom: # Recherche dans toutes les banques utilisateurs for banque_courante, comptes_banque in comptes.items(): for uid, info in comptes_banque.items(): if info.get("rib") == rib: cible_data = comptes user_id = uid banque_nom = banque_courante break if user_id: break if not user_id and not is_entreprise: # Recherche dans toutes les banques entreprises for banque_courante, entreprises_banque in entreprises.items(): for nom_entreprise, info in entreprises_banque.items(): if info.get("rib") == rib: cible_data = entreprises user_id = nom_entreprise banque_nom = banque_courante is_entreprise = True break if user_id: break if not user_id: await interaction.response.send_message( "❌ Aucun compte trouvé avec ce RIB.", ephemeral=True ) return # Ajout du montant cible_data[banque_nom][user_id]["solde"] += montant transaction = { "date": datetime.now().strftime("%d/%m/%Y %H:%M:%S"), "type": "Dépôt", "source": "Banque", "montant": montant, "emetteur": interaction.user.id, "destinataire": user_id } cible_data[banque_nom][user_id]["transactions"].append(transaction) # Sauvegarde if is_entreprise: with open("comptes_entreprises.json", "w", encoding="utf-8") as f: json.dump(entreprises, f, ensure_ascii=False, indent=4) else: with open("comptes_bancaires.json", "w", encoding="utf-8") as f: json.dump(comptes, f, ensure_ascii=False, indent=4) # Envoyer un MP à l'utilisateur (sauf entreprise) try: user = await self.bot.fetch_user(int(user_id)) await user.send( f"💰 Un dépôt de **{montant:.2f}€** a été effectué sur votre compte dans **{banque_nom}**." ) except Exception: pass # Si l'utilisateur a désactivé les MP await interaction.response.send_message( f"✅ **{montant:.2f}€** ajoutés avec succès au compte `{rib}` dans la banque **{banque_nom}**.", ephemeral=True ) async def setup(bot): await bot.add_cog(AjouterArgent(bot))