147 lines
5.8 KiB
Python
147 lines
5.8 KiB
Python
|
|
import discord
|
||
|
|
from discord import app_commands
|
||
|
|
from discord.ext import commands
|
||
|
|
import json
|
||
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
BANQUIER_ROLE_ID = 1360314740567576616 # ID du rôle des banquiers # ID du rôle banquier # ID du rôle banquier
|
||
|
|
|
||
|
|
class RetirerArgent(commands.Cog):
|
||
|
|
def __init__(self, bot):
|
||
|
|
self.bot = bot
|
||
|
|
|
||
|
|
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="retirer_argent",
|
||
|
|
description="Retire de l'argent d'un compte via son RIB (utilisateur ou entreprise)."
|
||
|
|
)
|
||
|
|
@app_commands.choices(banque=banque_choices)
|
||
|
|
@app_commands.describe(
|
||
|
|
rib="Le RIB du compte",
|
||
|
|
montant="Montant à retirer",
|
||
|
|
banque="Banque cible (facultatif)"
|
||
|
|
)
|
||
|
|
async def retirer_argent(
|
||
|
|
self,
|
||
|
|
interaction: discord.Interaction,
|
||
|
|
rib: str,
|
||
|
|
montant: float,
|
||
|
|
banque: app_commands.Choice[str] = None
|
||
|
|
):
|
||
|
|
if not any(role.id == BANQUIER_ROLE_ID for role in interaction.user.roles):
|
||
|
|
await interaction.response.send_message("❌ Vous n'avez pas la permission de faire cela.", 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)
|
||
|
|
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
|
||
|
|
|
||
|
|
compte = None
|
||
|
|
source = None # "utilisateur" ou "entreprise"
|
||
|
|
user_id = None
|
||
|
|
|
||
|
|
# Recherche dans la banque spécifiée (si précisée)
|
||
|
|
if banque_nom and banque_nom in comptes_bancaires:
|
||
|
|
for uid, data in comptes_bancaires[banque_nom].items():
|
||
|
|
if data.get("rib") == rib:
|
||
|
|
compte = data
|
||
|
|
source = "utilisateur"
|
||
|
|
user_id = uid
|
||
|
|
break
|
||
|
|
|
||
|
|
if not compte and banque_nom and banque_nom in comptes_entreprises:
|
||
|
|
for entreprise, data in comptes_entreprises[banque_nom].items():
|
||
|
|
if data.get("rib") == rib:
|
||
|
|
compte = data
|
||
|
|
source = "entreprise"
|
||
|
|
user_id = entreprise
|
||
|
|
break
|
||
|
|
|
||
|
|
# Si banque non précisée ou compte non trouvé, recherche dans toutes les banques
|
||
|
|
if not compte and not banque_nom:
|
||
|
|
# Recherche dans toutes les banques utilisateurs
|
||
|
|
for banque_courante, comptes_banque in comptes_bancaires.items():
|
||
|
|
for uid, data in comptes_banque.items():
|
||
|
|
if data.get("rib") == rib:
|
||
|
|
compte = data
|
||
|
|
source = "utilisateur"
|
||
|
|
user_id = uid
|
||
|
|
banque_nom = banque_courante
|
||
|
|
break
|
||
|
|
if compte:
|
||
|
|
break
|
||
|
|
|
||
|
|
if not compte:
|
||
|
|
# Recherche dans toutes les banques entreprises
|
||
|
|
for banque_courante, entreprises_banque in comptes_entreprises.items():
|
||
|
|
for entreprise, data in entreprises_banque.items():
|
||
|
|
if data.get("rib") == rib:
|
||
|
|
compte = data
|
||
|
|
source = "entreprise"
|
||
|
|
user_id = entreprise
|
||
|
|
banque_nom = banque_courante
|
||
|
|
break
|
||
|
|
if compte:
|
||
|
|
break
|
||
|
|
|
||
|
|
if not compte:
|
||
|
|
await interaction.response.send_message("❌ Aucun compte trouvé avec ce RIB.", ephemeral=True)
|
||
|
|
return
|
||
|
|
|
||
|
|
if compte["solde"] < montant:
|
||
|
|
await interaction.response.send_message("❌ Solde insuffisant pour retirer cette somme.", ephemeral=True)
|
||
|
|
return
|
||
|
|
|
||
|
|
# Appliquer le retrait
|
||
|
|
compte["solde"] -= montant
|
||
|
|
transaction = {
|
||
|
|
"date": datetime.now().strftime("%d/%m/%Y %H:%M:%S"),
|
||
|
|
"type": "Retrait",
|
||
|
|
"source": "Banque",
|
||
|
|
"montant": -montant,
|
||
|
|
"emetteur": interaction.user.id,
|
||
|
|
"destinataire": user_id
|
||
|
|
}
|
||
|
|
compte.setdefault("transactions", []).append(transaction)
|
||
|
|
|
||
|
|
# Sauvegarde dans le bon fichier
|
||
|
|
if source == "utilisateur":
|
||
|
|
comptes_bancaires[banque_nom][user_id] = compte
|
||
|
|
with open("comptes_bancaires.json", "w", encoding="utf-8") as f:
|
||
|
|
json.dump(comptes_bancaires, f, indent=4, ensure_ascii=False)
|
||
|
|
else:
|
||
|
|
comptes_entreprises[banque_nom][user_id] = compte
|
||
|
|
with open("comptes_entreprises.json", "w", encoding="utf-8") as f:
|
||
|
|
json.dump(comptes_entreprises, f, indent=4, ensure_ascii=False)
|
||
|
|
|
||
|
|
# Message de confirmation
|
||
|
|
embed = discord.Embed(
|
||
|
|
title="💸 Retrait effectué",
|
||
|
|
description=f"💼 Banque : **{banque_nom}**\n📌 Type : **{source.capitalize()}**",
|
||
|
|
color=discord.Color.red()
|
||
|
|
)
|
||
|
|
embed.add_field(name="RIB", value=rib, inline=False)
|
||
|
|
embed.add_field(name="Montant retiré", 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(RetirerArgent(bot))
|