Vicy_Publique/commandes/virement.py

72 lines
2.6 KiB
Python
Raw Permalink Normal View History

2026-08-16 19:37:15 +02:00
import discord
from discord import app_commands
from discord.ext import commands
from utils.bank_manager import BankManager
from utils.rib import decoder_rib
2026-08-16 19:37:15 +02:00
bank_manager = BankManager()
2026-08-16 19:37:15 +02:00
class Virement(commands.Cog):
def __init__(self, bot):
self.bot = bot
2026-08-16 19:37:15 +02:00
@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)
2026-08-16 19:37:15 +02:00
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)
2026-08-16 19:37:15 +02:00
return
if compte_source["user_id"] != interaction.user.id:
await interaction.response.send_message("❌ Ce RIB ne vous appartient pas.", ephemeral=True)
2026-08-16 19:37:15 +02:00
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,
)
2026-08-16 19:37:15 +02:00
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}€"
2026-08-16 19:37:15 +02:00
await interaction.response.send_message(msg, ephemeral=True)
2026-08-16 19:37:15 +02:00
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)
2026-08-16 19:37:15 +02:00
async def setup(bot):
await bot.add_cog(Virement(bot))