import discord from discord import app_commands from discord.ext import commands import json from datetime import datetime GOUVERNEMENT_ROLE_ID = 1278305482926194701 # Remplace avec l’ID de ton rôle Gouvernement # Remplace par l'ID du rôle Gouvernement GOUV_BANQUE = "Gouvernement" GOUV_COMPTE = "GOUV" GOUV_RIB = "00000 00000 00000000000 00" class GouvVirement(commands.Cog): def __init__(self, bot): self.bot = bot # Liste des banques à jour (ajoute ici toutes les banques possibles de ton système) 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="gouv_virer", description="Le Gouvernement vire de l'argent de son compte vers un autre RIB (entreprise ou particulier)." ) @app_commands.choices(banque=banque_choices) @app_commands.describe( rib="Le RIB destinataire", montant="Montant à virer", banque="Banque cible (facultatif)" ) async def gouv_virer( self, interaction: discord.Interaction, rib: str, montant: float, banque: app_commands.Choice[str] = None ): # Vérification du rôle Gouvernement if not any(role.id == GOUVERNEMENT_ROLE_ID for role in interaction.user.roles): await interaction.response.send_message("❌ Seul le Gouvernement peut 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 # Charger les fichiers try: with open("comptes_bancaires.json", "r", encoding="utf-8") as f: comptes_bancaires = json.load(f) except Exception: comptes_bancaires = {} try: 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 # Récupérer le compte du Gouvernement try: gouv_compte = comptes_entreprises[GOUV_BANQUE][GOUV_COMPTE] except KeyError: await interaction.response.send_message("❌ Compte Gouvernement introuvable.", ephemeral=True) return if gouv_compte["solde"] < montant: await interaction.response.send_message("❌ Le Gouvernement n'a pas assez de fonds.", ephemeral=True) return # Chercher le destinataire destinataire_compte = None destinataire_banque = None destinataire_nom = None destinataire_type = None # Si banque précisée, chercher d'abord dans cette banque (entreprises puis particuliers) if banque_nom: # Entreprises if banque_nom in comptes_entreprises: for nom, data in comptes_entreprises[banque_nom].items(): if data.get("rib") == rib: destinataire_compte = data destinataire_banque = banque_nom destinataire_nom = nom destinataire_type = "entreprise" break # Particuliers if not destinataire_compte and banque_nom in comptes_bancaires: for uid, data in comptes_bancaires[banque_nom].items(): if data.get("rib") == rib: destinataire_compte = data destinataire_banque = banque_nom destinataire_nom = uid destinataire_type = "particulier" break # Si banque non précisée, chercher dans toutes les banques else: # Entreprises for banque_courante, entreprises in comptes_entreprises.items(): for nom, data in entreprises.items(): if data.get("rib") == rib: destinataire_compte = data destinataire_banque = banque_courante destinataire_nom = nom destinataire_type = "entreprise" break if destinataire_compte: break # Particuliers if not destinataire_compte: for banque_courante, comptes in comptes_bancaires.items(): for uid, data in comptes.items(): if data.get("rib") == rib: destinataire_compte = data destinataire_banque = banque_courante destinataire_nom = uid destinataire_type = "particulier" break if destinataire_compte: break if not destinataire_compte: await interaction.response.send_message("❌ Aucun compte trouvé avec ce RIB dans la banque spécifiée." if banque_nom else "❌ Aucun compte trouvé avec ce RIB.", ephemeral=True) return # Effectuer le virement gouv_compte["solde"] -= montant destinataire_compte["solde"] += montant now = datetime.now().strftime("%d/%m/%Y %H:%M:%S") # Transaction côté Gouvernement (sortant) gouv_compte.setdefault("transactions", []).append({ "date": now, "type": "Virement", "source": "Gouvernement", "montant": -montant, "emetteur": "Gouvernement", "destinataire": destinataire_nom }) # Transaction côté destinataire (entrant) destinataire_compte.setdefault("transactions", []).append({ "date": now, "type": "Virement", "source": "Gouvernement", "montant": montant, "emetteur": "Gouvernement", "destinataire": destinataire_nom }) # Sauvegarde comptes_entreprises[GOUV_BANQUE][GOUV_COMPTE] = gouv_compte if destinataire_type == "entreprise": comptes_entreprises[destinataire_banque][destinataire_nom] = destinataire_compte with open("comptes_entreprises.json", "w", encoding="utf-8") as f: json.dump(comptes_entreprises, f, indent=4, ensure_ascii=False) else: comptes_bancaires[destinataire_banque][destinataire_nom] = destinataire_compte with open("comptes_entreprises.json", "w", encoding="utf-8") as f: json.dump(comptes_entreprises, f, indent=4, ensure_ascii=False) with open("comptes_bancaires.json", "w", encoding="utf-8") as f: json.dump(comptes_bancaires, f, indent=4, ensure_ascii=False) # Message de confirmation embed = discord.Embed( title="🏛️ Virement Gouvernemental effectué", description=f"💼 Banque destinataire : **{destinataire_banque}**\n📌 Type : **{destinataire_type.capitalize()}**", color=discord.Color.gold() ) embed.add_field(name="RIB destinataire", value=rib, inline=False) embed.add_field(name="Montant viré", 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(GouvVirement(bot))