import discord from discord import app_commands from discord.ext import commands import json from datetime import datetime BANQUIER_ROLE_ID = 1360314740567576616 # ID du rôle des banquiers # ID du rôle banquier # ID du rôle banquier class RetirerArgent(commands.Cog): def __init__(self, bot): self.bot = bot 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="retirer_argent", description="Retire de l'argent d'un compte via son RIB (utilisateur ou entreprise)." ) @app_commands.choices(banque=banque_choices) @app_commands.describe( rib="Le RIB du compte", montant="Montant à retirer", banque="Banque cible (facultatif)" ) async def retirer_argent( self, interaction: discord.Interaction, rib: str, montant: float, banque: app_commands.Choice[str] = None ): if not any(role.id == BANQUIER_ROLE_ID for role in interaction.user.roles): await interaction.response.send_message("❌ Vous n'avez pas la permission de faire cela.", 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 # Charger les fichiers try: with open("comptes_bancaires.json", "r", encoding="utf-8") as f: comptes_bancaires = json.load(f) with open("comptes_entreprises.json", "r", encoding="utf-8") as f: comptes_entreprises = json.load(f) except Exception: await interaction.response.send_message("❌ Erreur lors de la lecture des fichiers JSON.", ephemeral=True) return compte = None source = None # "utilisateur" ou "entreprise" user_id = None # Recherche dans la banque spécifiée (si précisée) if banque_nom and banque_nom in comptes_bancaires: for uid, data in comptes_bancaires[banque_nom].items(): if data.get("rib") == rib: compte = data source = "utilisateur" user_id = uid break if not compte and banque_nom and banque_nom in comptes_entreprises: for entreprise, data in comptes_entreprises[banque_nom].items(): if data.get("rib") == rib: compte = data source = "entreprise" user_id = entreprise break # Si banque non précisée ou compte non trouvé, recherche dans toutes les banques if not compte and not banque_nom: # Recherche dans toutes les banques utilisateurs for banque_courante, comptes_banque in comptes_bancaires.items(): for uid, data in comptes_banque.items(): if data.get("rib") == rib: compte = data source = "utilisateur" user_id = uid banque_nom = banque_courante break if compte: break if not compte: # Recherche dans toutes les banques entreprises for banque_courante, entreprises_banque in comptes_entreprises.items(): for entreprise, data in entreprises_banque.items(): if data.get("rib") == rib: compte = data source = "entreprise" user_id = entreprise banque_nom = banque_courante break if compte: break if not compte: await interaction.response.send_message("❌ Aucun compte trouvé avec ce RIB.", ephemeral=True) return if compte["solde"] < montant: await interaction.response.send_message("❌ Solde insuffisant pour retirer cette somme.", ephemeral=True) return # Appliquer le retrait compte["solde"] -= montant transaction = { "date": datetime.now().strftime("%d/%m/%Y %H:%M:%S"), "type": "Retrait", "source": "Banque", "montant": -montant, "emetteur": interaction.user.id, "destinataire": user_id } compte.setdefault("transactions", []).append(transaction) # Sauvegarde dans le bon fichier if source == "utilisateur": comptes_bancaires[banque_nom][user_id] = compte with open("comptes_bancaires.json", "w", encoding="utf-8") as f: json.dump(comptes_bancaires, f, indent=4, ensure_ascii=False) else: comptes_entreprises[banque_nom][user_id] = compte with open("comptes_entreprises.json", "w", encoding="utf-8") as f: json.dump(comptes_entreprises, f, indent=4, ensure_ascii=False) # Message de confirmation embed = discord.Embed( title="💸 Retrait effectué", description=f"💼 Banque : **{banque_nom}**\n📌 Type : **{source.capitalize()}**", color=discord.Color.red() ) embed.add_field(name="RIB", value=rib, inline=False) embed.add_field(name="Montant retiré", value=f"{montant:.2f}€", inline=True) embed.add_field(name="Effectué par", value=interaction.user.mention, inline=True) embed.set_footer(text="Transaction enregistrée ✅") await interaction.response.send_message(embed=embed, ephemeral=False) async def setup(bot): await bot.add_cog(RetirerArgent(bot))