Vicy_Publique/commandes/retrait_gouv.py
2026-08-16 19:37:15 +02:00

184 lines
7.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import discord
from discord import app_commands
from discord.ext import commands
import json
from datetime import datetime
GOUVERNEMENT_ROLE_ID = 1278305482926194701 # Remplace avec l’ID de ton rôle Gouvernement # Remplace par l'ID du rôle Gouvernement
GOUV_BANQUE = "Gouvernement"
GOUV_COMPTE = "GOUV"
GOUV_RIB = "00000 00000 00000000000 00"
class GouvVirement(commands.Cog):
def __init__(self, bot):
self.bot = bot
# Liste des banques à jour (ajoute ici toutes les banques possibles de ton système)
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="gouv_virer",
description="Le Gouvernement vire de l'argent de son compte vers un autre RIB (entreprise ou particulier)."
)
@app_commands.choices(banque=banque_choices)
@app_commands.describe(
rib="Le RIB destinataire",
montant="Montant à virer",
banque="Banque cible (facultatif)"
)
async def gouv_virer(
self,
interaction: discord.Interaction,
rib: str,
montant: float,
banque: app_commands.Choice[str] = None
):
# Vérification du rôle Gouvernement
if not any(role.id == GOUVERNEMENT_ROLE_ID for role in interaction.user.roles):
await interaction.response.send_message("❌ Seul le Gouvernement peut utiliser cette commande.", 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)
except Exception:
comptes_bancaires = {}
try:
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
# Récupérer le compte du Gouvernement
try:
gouv_compte = comptes_entreprises[GOUV_BANQUE][GOUV_COMPTE]
except KeyError:
await interaction.response.send_message("❌ Compte Gouvernement introuvable.", ephemeral=True)
return
if gouv_compte["solde"] < montant:
await interaction.response.send_message("❌ Le Gouvernement n'a pas assez de fonds.", ephemeral=True)
return
# Chercher le destinataire
destinataire_compte = None
destinataire_banque = None
destinataire_nom = None
destinataire_type = None
# Si banque précisée, chercher d'abord dans cette banque (entreprises puis particuliers)
if banque_nom:
# Entreprises
if banque_nom in comptes_entreprises:
for nom, data in comptes_entreprises[banque_nom].items():
if data.get("rib") == rib:
destinataire_compte = data
destinataire_banque = banque_nom
destinataire_nom = nom
destinataire_type = "entreprise"
break
# Particuliers
if not destinataire_compte and banque_nom in comptes_bancaires:
for uid, data in comptes_bancaires[banque_nom].items():
if data.get("rib") == rib:
destinataire_compte = data
destinataire_banque = banque_nom
destinataire_nom = uid
destinataire_type = "particulier"
break
# Si banque non précisée, chercher dans toutes les banques
else:
# Entreprises
for banque_courante, entreprises in comptes_entreprises.items():
for nom, data in entreprises.items():
if data.get("rib") == rib:
destinataire_compte = data
destinataire_banque = banque_courante
destinataire_nom = nom
destinataire_type = "entreprise"
break
if destinataire_compte:
break
# Particuliers
if not destinataire_compte:
for banque_courante, comptes in comptes_bancaires.items():
for uid, data in comptes.items():
if data.get("rib") == rib:
destinataire_compte = data
destinataire_banque = banque_courante
destinataire_nom = uid
destinataire_type = "particulier"
break
if destinataire_compte:
break
if not destinataire_compte:
await interaction.response.send_message("❌ Aucun compte trouvé avec ce RIB dans la banque spécifiée." if banque_nom else "❌ Aucun compte trouvé avec ce RIB.", ephemeral=True)
return
# Effectuer le virement
gouv_compte["solde"] -= montant
destinataire_compte["solde"] += montant
now = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
# Transaction côté Gouvernement (sortant)
gouv_compte.setdefault("transactions", []).append({
"date": now,
"type": "Virement",
"source": "Gouvernement",
"montant": -montant,
"emetteur": "Gouvernement",
"destinataire": destinataire_nom
})
# Transaction côté destinataire (entrant)
destinataire_compte.setdefault("transactions", []).append({
"date": now,
"type": "Virement",
"source": "Gouvernement",
"montant": montant,
"emetteur": "Gouvernement",
"destinataire": destinataire_nom
})
# Sauvegarde
comptes_entreprises[GOUV_BANQUE][GOUV_COMPTE] = gouv_compte
if destinataire_type == "entreprise":
comptes_entreprises[destinataire_banque][destinataire_nom] = destinataire_compte
with open("comptes_entreprises.json", "w", encoding="utf-8") as f:
json.dump(comptes_entreprises, f, indent=4, ensure_ascii=False)
else:
comptes_bancaires[destinataire_banque][destinataire_nom] = destinataire_compte
with open("comptes_entreprises.json", "w", encoding="utf-8") as f:
json.dump(comptes_entreprises, f, indent=4, ensure_ascii=False)
with open("comptes_bancaires.json", "w", encoding="utf-8") as f:
json.dump(comptes_bancaires, f, indent=4, ensure_ascii=False)
# Message de confirmation
embed = discord.Embed(
title="🏛️ Virement Gouvernemental effectué",
description=f"💼 Banque destinataire : **{destinataire_banque}**\n📌 Type : **{destinataire_type.capitalize()}**",
color=discord.Color.gold()
)
embed.add_field(name="RIB destinataire", value=rib, inline=False)
embed.add_field(name="Montant viré", 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(GouvVirement(bot))