Major update, v1.0 i guess ?
This commit is contained in:
132
bot.py
132
bot.py
@ -69,7 +69,6 @@ async def enregistrer(interaction: discord.Interaction):
|
||||
"✅ Profil mis à jour avec succès !",
|
||||
ephemeral=True
|
||||
)
|
||||
|
||||
@bot.tree.command(name="adopter", description="Adopter un membre")
|
||||
async def adopter(interaction: discord.Interaction, enfant: discord.Member):
|
||||
parent = interaction.user
|
||||
@ -84,7 +83,6 @@ async def adopter(interaction: discord.Interaction, enfant: discord.Member):
|
||||
await interaction.response.send_message("❌ Auto-adoption impossible !", ephemeral=True)
|
||||
return
|
||||
|
||||
# Nouvelle condition plus permissive
|
||||
if enfant_gen > parent_gen:
|
||||
await interaction.response.send_message(
|
||||
"❌ Impossible d'adopter quelqu'un de plus ancien que vous !",
|
||||
@ -92,6 +90,15 @@ async def adopter(interaction: discord.Interaction, enfant: discord.Member):
|
||||
)
|
||||
return
|
||||
|
||||
# Vérification relation existante
|
||||
existing_parents = family.get_parents(str(enfant.id))
|
||||
if any(p["id"] == str(parent.id) for p in existing_parents):
|
||||
await interaction.response.send_message(
|
||||
"❌ Vous avez déjà adopté cette personne !",
|
||||
ephemeral=True
|
||||
)
|
||||
return
|
||||
|
||||
# Met à jour les infos des membres
|
||||
await update_member(parent)
|
||||
await update_member(enfant)
|
||||
@ -99,43 +106,22 @@ async def adopter(interaction: discord.Interaction, enfant: discord.Member):
|
||||
# Crée le lien familial
|
||||
if not family.add_child(str(parent.id), str(enfant.id)):
|
||||
await interaction.response.send_message(
|
||||
"❌ Erreur lors de l'adoption",
|
||||
"❌ Erreur lors de l'adoption (peut-être une relation existante ?)",
|
||||
ephemeral=True
|
||||
)
|
||||
return
|
||||
|
||||
# Attribue le rôle approprié
|
||||
generation = family.get_generation(str(enfant.id))
|
||||
role_id = config["ROLE_IDS"].get(
|
||||
"ENFANT" if generation == 1 else
|
||||
"PETIT_ENFANT" if generation == 2 else
|
||||
"ARRIERE_PETIT_ENFANT"
|
||||
)
|
||||
# Message de succès
|
||||
message = f"✅ {parent.mention} a adopté {enfant.mention} !"
|
||||
|
||||
role = interaction.guild.get_role(role_id)
|
||||
if role:
|
||||
try:
|
||||
await enfant.add_roles(role)
|
||||
message = f"✅ {parent.mention} a adopté {enfant.mention} !"
|
||||
# Mentionne le partenaire si existe
|
||||
partner_id = family.get_partner(str(parent.id))
|
||||
if partner_id:
|
||||
partner = interaction.guild.get_member(int(partner_id))
|
||||
if partner:
|
||||
message += f"\n👫 Partenaire : {partner.mention}"
|
||||
|
||||
# Mentionne le partenaire si existe
|
||||
partner_id = family.get_partner(str(parent.id))
|
||||
if partner_id:
|
||||
partner = interaction.guild.get_member(int(partner_id))
|
||||
if partner:
|
||||
message += f"\n👫 Partenaire : {partner.mention}"
|
||||
|
||||
await interaction.response.send_message(message)
|
||||
except discord.Forbidden:
|
||||
await interaction.response.send_message(
|
||||
"❌ Permission refusée pour attribuer le rôle !",
|
||||
ephemeral=True
|
||||
)
|
||||
else:
|
||||
await interaction.response.send_message(
|
||||
"❌ Rôle introuvable ! Contactez un administrateur.",
|
||||
ephemeral=True
|
||||
)
|
||||
await interaction.response.send_message(message)
|
||||
|
||||
@bot.tree.command(name="racine", description="Définir un membre comme racine")
|
||||
@commands.has_permissions(administrator=True)
|
||||
@ -173,7 +159,8 @@ async def couple(interaction: discord.Interaction, partenaire: discord.Member):
|
||||
ephemeral=True
|
||||
)
|
||||
|
||||
@bot.tree.command(name="renier", description="Renier et supprimer un enfant")
|
||||
|
||||
@bot.tree.command(name="renier", description="Renier un enfant")
|
||||
async def renier(interaction: discord.Interaction, enfant: discord.Member):
|
||||
parent = interaction.user
|
||||
|
||||
@ -191,13 +178,13 @@ async def renier(interaction: discord.Interaction, enfant: discord.Member):
|
||||
)
|
||||
else:
|
||||
await interaction.response.send_message(
|
||||
"❌ Erreur lors de la suppression",
|
||||
"❌ Erreur lors de la suppression du membre",
|
||||
ephemeral=True
|
||||
)
|
||||
else:
|
||||
# Cas où l'enfant a d'autres parents
|
||||
remaining_parents = ", ".join([f"<@{p['id']}>" for p in parents_restants])
|
||||
await interaction.response.send_message(
|
||||
f"⚠️ {enfant.mention} a encore des parents ({len(parents_restants)}). "
|
||||
f"⚠️ {enfant.mention} a encore des parents ({remaining_parents}). "
|
||||
f"Seul le lien avec {parent.mention} a été rompu."
|
||||
)
|
||||
|
||||
@ -205,26 +192,51 @@ async def renier(interaction: discord.Interaction, enfant: discord.Member):
|
||||
async def arbre(interaction: discord.Interaction):
|
||||
await interaction.response.defer()
|
||||
|
||||
# Télécharge les avatars des membres
|
||||
members = family.get_all_members()
|
||||
for member_id in members:
|
||||
try:
|
||||
member = await interaction.guild.fetch_member(int(member_id))
|
||||
await download_avatar(member)
|
||||
except:
|
||||
continue
|
||||
from tree import get_file_hash # Import direct de la fonction
|
||||
|
||||
# Génère l'arbre
|
||||
generate_tree("family.json", "arbre.png", config["ROOT_MEMBER_ID"])
|
||||
json_file = "family.json"
|
||||
png_file = "arbre.png"
|
||||
hash_file = "family.hash"
|
||||
|
||||
# Envoie le résultat
|
||||
try:
|
||||
await interaction.followup.send(file=discord.File("arbre.png"))
|
||||
except:
|
||||
# Vérifier si la régénération est nécessaire
|
||||
current_hash = get_file_hash(json_file)
|
||||
regenerate = True
|
||||
|
||||
if os.path.exists(png_file):
|
||||
try:
|
||||
with open(hash_file, "r") as f:
|
||||
if current_hash == f.read():
|
||||
regenerate = False
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
if regenerate:
|
||||
# Télécharger les avatars
|
||||
members = family.get_all_members()
|
||||
for member_id in members:
|
||||
try:
|
||||
member = await interaction.guild.fetch_member(int(member_id))
|
||||
await download_avatar(member)
|
||||
except:
|
||||
continue
|
||||
|
||||
# Générer le nouvel arbre
|
||||
generate_tree(json_file, png_file, config["ROOT_MEMBER_ID"])
|
||||
|
||||
# Sauvegarder le hash
|
||||
with open(hash_file, "w") as f:
|
||||
f.write(current_hash)
|
||||
|
||||
# Envoyer l'image
|
||||
await interaction.followup.send(file=discord.File(png_file))
|
||||
|
||||
except Exception as e:
|
||||
await interaction.followup.send(
|
||||
"❌ Erreur lors de la génération de l'arbre",
|
||||
ephemeral=True
|
||||
)
|
||||
print(f"Erreur génération arbre: {e}")
|
||||
|
||||
@bot.tree.command(name="parent", description="Voir les parents d'un membre")
|
||||
async def parent(interaction: discord.Interaction, membre: Optional[discord.Member] = None):
|
||||
@ -243,6 +255,26 @@ async def parent(interaction: discord.Interaction, membre: Optional[discord.Memb
|
||||
f"👪 Parents de {target.mention} : {' '.join(parent_mentions)}"
|
||||
)
|
||||
|
||||
@bot.tree.command(name="enfants", description="Lister ses enfants")
|
||||
async def enfants(interaction: discord.Interaction):
|
||||
"""Commande pour lister ses enfants et son partenaire"""
|
||||
membre_id = str(interaction.user.id)
|
||||
|
||||
# Récupération du partenaire
|
||||
partner_id = family.get_partner(membre_id)
|
||||
partner_mention = f"<@{partner_id}>" if partner_id else "Aucun"
|
||||
|
||||
# Récupération des enfants
|
||||
enfants = family.get_children(membre_id)
|
||||
enfants_mentions = [f"<@{enfant_id}>" for enfant_id in enfants] if enfants else ["Aucun"]
|
||||
|
||||
await interaction.response.send_message(
|
||||
f"👨👩👧👦 **Famille de {interaction.user.mention}**\n"
|
||||
f"• Partenaire : {partner_mention}\n"
|
||||
f"• Enfant(s) : {' '.join(enfants_mentions)}",
|
||||
ephemeral=True
|
||||
)
|
||||
|
||||
@bot.command()
|
||||
@commands.has_permissions(administrator=True)
|
||||
async def init(ctx):
|
||||
|
Reference in New Issue
Block a user