From 80bb5f4e1023ee4e4e853a44746d12f7d4bb1cda Mon Sep 17 00:00:00 2001 From: SimolZimol <70102430+SimolZimol@users.noreply.github.com> Date: Sun, 15 Sep 2024 10:33:55 +0200 Subject: [PATCH] modified: bot.py --- bot.py | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/bot.py b/bot.py index 934f397..68c9676 100644 --- a/bot.py +++ b/bot.py @@ -478,28 +478,37 @@ def get_current_datetime(): def calculate_xp_for_level(level): return 5 * (level ** 2) + 50 * level + 100 -def calculate_level(xp): - """Berechnet das Level basierend auf den Erfahrungspunkten (XP).""" - l = 1 - while 5 * (l ** 2) + 50 * l + 100 <= xp: - l += 1 - return l - async def add_xp_to_user(user_id, xp_gained): - """Fügt XP zu einem Benutzer hinzu und aktualisiert das Level, falls nötig.""" - user_data = load_user_data(user_id) + # Lade Benutzerdaten aus der Datenbank + user_data = load_user_data_from_mysql(user_id) + + if user_data is None: + # Benutzer ist nicht in der Datenbank, füge ihn hinzu + insert_user_data(user_id, 0, 0, 0, 0, 0, []) + user_data = load_user_data_from_mysql(user_id) - # Füge die neuen XP hinzu + # XP hinzufügen user_data["xp"] += xp_gained - # Berechne das neue Level basierend auf den aktualisierten XP - new_level = calculate_level(user_data["xp"]) - user_data["level"] = new_level + # Formel für Level-Up + new_level = int(5 * (user_data["level"] ** 2) + 50 * user_data["level"] + 100) + + # Überprüfen, ob der Benutzer ein Level aufsteigt + if user_data["xp"] >= new_level: + user_data["level"] += 1 + user_data["xp"] = 0 # XP auf 0 zurücksetzen nach einem Level-Up + # Schicke eine Nachricht, dass der Benutzer ein Level aufgestiegen ist + channel = client.get_channel() # Setze hier den richtigen Kanal ein + await channel.send(f"{user_id} has reached level {user_data['level']}!") + # Aktualisiere die Benutzerdaten in der Datenbank update_user_data(user_id, "xp", user_data["xp"]) update_user_data(user_id, "level", user_data["level"]) + # Cache mit aktuellen Daten aktualisieren + await cache_user_data(user_id, user_data) + 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}.") @@ -548,14 +557,12 @@ xp_cooldowns = {} async def on_message(message): if message.author.bot: return - - user_id = message.author.id - if user_id in xp_cooldowns and time.time() < xp_cooldowns[user_id] + 60: - return # Der Benutzer hat kürzlich XP erhalten, also überspringen wir das - xp_gained = random.randint(5, 15) + user_id = message.author.id + + # Zufällige XP zwischen 5 und 15 hinzufügen + xp_gained = random.randint(2, 15) await add_xp_to_user(user_id, xp_gained) - xp_cooldowns[user_id] = time.time() await client.process_commands(message)