Vicy_Publique/commandes/virement.py
utilisateurqu c9ad155bf6 V2.0: Refonte système bancaire - DB SQLite, RIB FR, TVA auto, multi-banques
- Remplace JSON par SQLite (aiosqlite) pour atomicité et intégrité
- Nouveau format RIB français avec checksum modulo 97
- Chaque banque a son propre rôle Discord (isolation par serveur)
- TVA automatique Particulier -> Entreprise, redirection au Fisc
- Institutions gouvernementales avec droit d'audit optionnel
- Commandes: /gouv, /banque, /audit, /mes-ribs
- Supprime: 16 anciens fichiers (entreprises, FBM, URSAFF, etc.)
- Reset complet des données, repart de zéro
2026-08-18 17:42:03 +02:00

71 lines
2.6 KiB
Python

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))