diff --git a/bot.py b/bot.py index 8f162f7..65efba8 100644 --- a/bot.py +++ b/bot.py @@ -476,29 +476,31 @@ def get_current_datetime(): return datetime.now().strftime("%Y-%m-%d %H:%M:%S") def calculate_xp_for_level(level): - """Berechnet die XP-Anforderung für das nächste Level""" - return 100 * level # Beispiel: 100 XP pro Level + return 5 * (level ** 2) + 50 * level + 100 -async def add_xp_to_user(user_id, xp_amount): - """Fügt XP zum Benutzer hinzu und überprüft, ob ein Levelaufstieg stattfindet""" +async def add_xp_to_user(user_id, xp_gained): user_data = load_user_data(user_id) + current_xp = user_data.get("xp", 0) + current_level = user_data.get("level", 1) - # Füge die XP hinzu - user_data["xp"] += xp_amount - - # Überprüfe, ob der Benutzer ein neues Level erreicht hat - required_xp = calculate_xp_for_level(user_data["level"]) - if user_data["xp"] >= required_xp: - user_data["level"] += 1 - user_data["xp"] -= required_xp # Setze die überschüssige XP zurück - # Level-Up Nachricht an den Benutzer senden - user = client.get_user(user_id) - if user: - await user.send(f"🎉 Glückwunsch, du hast Level {user_data['level']} erreicht!") - - # Speichere die aktualisierten Benutzerdaten - update_user_data(user_id, "xp", user_data["xp"]) - update_user_data(user_id, "level", user_data["level"]) + # Füge die neu verdiente XP hinzu + new_xp = current_xp + xp_gained + next_level_xp = calculate_xp_for_level(current_level) + + # Level-Up-Logik + while new_xp >= next_level_xp: + new_xp -= next_level_xp + current_level += 1 + next_level_xp = calculate_xp_for_level(current_level) + await notify_level_up(user_id, current_level) # Funktion für Level-Up-Benachrichtigung + + # Speichern der neuen XP und des Levels + update_user_data(user_id, "xp", new_xp) + update_user_data(user_id, "level", current_level) + +async def notify_level_up(user_id, new_level): + user = await client.fetch_user(user_id) + await user.send(f"Congratulations! You have leveled up to level {new_level}.") @client.hybrid_command() async def level(ctx):