import discord from discord import app_commands from discord.ext import commands from utils.bank_manager import BankManager from utils.rib import decoder_rib bank_manager = BankManager() class Virement(commands.Cog): def __init__(self, bot): self.bot = bot @app_commands.command(name="virement", description="Faire un virement à un autre compte via RIB") @app_commands.describe( rib_source="Votre RIB (compte source)", rib_dest="RIB du destinataire", montant="Montant à envoyer", ) async def virement( self, interaction: discord.Interaction, rib_source: str, rib_dest: str, montant: float, ): if montant <= 0: await interaction.response.send_message("❌ Le montant doit être supérieur à 0.", ephemeral=True) return compte_source = await bank_manager.get_compte_by_rib(interaction.guild.id, rib_source) if not compte_source: await interaction.response.send_message("❌ RIB source introuvable.", ephemeral=True) return if compte_source["user_id"] != interaction.user.id: await interaction.response.send_message("❌ Ce RIB ne vous appartient pas.", ephemeral=True) return try: result = await bank_manager.virement( guild_id=interaction.guild.id, rib_source=rib_source, rib_dest=rib_dest, montant=montant, emetteur_id=interaction.user.id, ) msg = f"✅ Virement de **{result['montant_envoye']:.2f}€** effectué." if result["tva_prelevee"] > 0: msg += f"\n💰 TVA prélevée : **{result['tva_prelevee']:.2f}€** → Fisc." msg += f"\n**Reçu par le destinataire :** {result['montant_recu']:.2f}€" await interaction.response.send_message(msg, ephemeral=True) try: dest_compte = await bank_manager.get_compte_by_rib(interaction.guild.id, rib_dest) if dest_compte and dest_compte["account_type"] == "particulier": dest_user = await self.bot.fetch_user(dest_compte["user_id"]) await dest_user.send( f"📥 Vous avez reçu **{result['montant_recu']:.2f}€** de la part de **{interaction.user.display_name}**." ) except (discord.Forbidden, Exception): pass except ValueError as e: await interaction.response.send_message(f"❌ {e}", ephemeral=True) async def setup(bot): await bot.add_cog(Virement(bot))