146 lines
No EOL
5.4 KiB
Python
146 lines
No EOL
5.4 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 AjouterArgent(commands.Cog):
|
|
def __init__(self, bot):
|
|
self.bot = bot
|
|
|
|
# Choix de banques automatiques
|
|
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="ajouter_argent",
|
|
description="Ajoute de l'argent à un compte (réservé aux banquiers)."
|
|
)
|
|
@app_commands.choices(banque=banque_choices)
|
|
@app_commands.describe(
|
|
rib="Le RIB du compte",
|
|
montant="Montant à ajouter",
|
|
banque="Banque cible (facultatif)"
|
|
)
|
|
async def ajouter_argent(
|
|
self,
|
|
interaction: discord.Interaction,
|
|
rib: str,
|
|
montant: float,
|
|
banque: app_commands.Choice[str] = None
|
|
):
|
|
# Vérification du rôle
|
|
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 d'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
|
|
|
|
# Chargement des fichiers
|
|
with open("comptes_bancaires.json", "r", encoding="utf-8") as f:
|
|
comptes = json.load(f)
|
|
with open("comptes_entreprises.json", "r", encoding="utf-8") as f:
|
|
entreprises = json.load(f)
|
|
|
|
cible_data = None
|
|
user_id = None
|
|
is_entreprise = False
|
|
|
|
# Recherche dans la banque spécifiée (si précisée)
|
|
if banque_nom and banque_nom in comptes:
|
|
for uid, info in comptes[banque_nom].items():
|
|
if info.get("rib") == rib:
|
|
cible_data = comptes
|
|
user_id = uid
|
|
break
|
|
|
|
if not user_id and banque_nom and banque_nom in entreprises:
|
|
for nom_entreprise, info in entreprises[banque_nom].items():
|
|
if info.get("rib") == rib:
|
|
cible_data = entreprises
|
|
user_id = nom_entreprise
|
|
is_entreprise = True
|
|
break
|
|
|
|
# Si banque non précisée ou compte non trouvé, recherche dans toutes les banques
|
|
if not user_id and not banque_nom:
|
|
# Recherche dans toutes les banques utilisateurs
|
|
for banque_courante, comptes_banque in comptes.items():
|
|
for uid, info in comptes_banque.items():
|
|
if info.get("rib") == rib:
|
|
cible_data = comptes
|
|
user_id = uid
|
|
banque_nom = banque_courante
|
|
break
|
|
if user_id:
|
|
break
|
|
|
|
if not user_id and not is_entreprise:
|
|
# Recherche dans toutes les banques entreprises
|
|
for banque_courante, entreprises_banque in entreprises.items():
|
|
for nom_entreprise, info in entreprises_banque.items():
|
|
if info.get("rib") == rib:
|
|
cible_data = entreprises
|
|
user_id = nom_entreprise
|
|
banque_nom = banque_courante
|
|
is_entreprise = True
|
|
break
|
|
if user_id:
|
|
break
|
|
|
|
if not user_id:
|
|
await interaction.response.send_message(
|
|
"❌ Aucun compte trouvé avec ce RIB.",
|
|
ephemeral=True
|
|
)
|
|
return
|
|
|
|
# Ajout du montant
|
|
cible_data[banque_nom][user_id]["solde"] += montant
|
|
transaction = {
|
|
"date": datetime.now().strftime("%d/%m/%Y %H:%M:%S"),
|
|
"type": "Dépôt",
|
|
"source": "Banque",
|
|
"montant": montant,
|
|
"emetteur": interaction.user.id,
|
|
"destinataire": user_id
|
|
}
|
|
cible_data[banque_nom][user_id]["transactions"].append(transaction)
|
|
|
|
# Sauvegarde
|
|
if is_entreprise:
|
|
with open("comptes_entreprises.json", "w", encoding="utf-8") as f:
|
|
json.dump(entreprises, f, ensure_ascii=False, indent=4)
|
|
else:
|
|
with open("comptes_bancaires.json", "w", encoding="utf-8") as f:
|
|
json.dump(comptes, f, ensure_ascii=False, indent=4)
|
|
# Envoyer un MP à l'utilisateur (sauf entreprise)
|
|
try:
|
|
user = await self.bot.fetch_user(int(user_id))
|
|
await user.send(
|
|
f"💰 Un dépôt de **{montant:.2f}€** a été effectué sur votre compte dans **{banque_nom}**."
|
|
)
|
|
except Exception:
|
|
pass # Si l'utilisateur a désactivé les MP
|
|
|
|
await interaction.response.send_message(
|
|
f"✅ **{montant:.2f}€** ajoutés avec succès au compte `{rib}` dans la banque **{banque_nom}**.",
|
|
ephemeral=True
|
|
)
|
|
|
|
async def setup(bot):
|
|
await bot.add_cog(AjouterArgent(bot)) |