- 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
71 lines
2.6 KiB
Python
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))
|