From 684dfdd482aadae0e003eeaaec1f9c619c2a7237 Mon Sep 17 00:00:00 2001 From: SimolZimol <70102430+SimolZimol@users.noreply.github.com> Date: Sun, 15 Sep 2024 10:42:25 +0200 Subject: [PATCH] modified: bot.py --- bot.py | 57 ++++++++++++++++++++++++--------------------------------- 1 file changed, 24 insertions(+), 33 deletions(-) diff --git a/bot.py b/bot.py index 1c9d4e9..0939305 100644 --- a/bot.py +++ b/bot.py @@ -242,8 +242,8 @@ def load_user_data_from_mysql(user_id): "filter_value": result[5], "rank": result[6], "chat_history": json.loads(result[7]) if result[7] else [], - "level": result[8] if result[8] is not None else 1, # Initialisiere Level mit 1 - "xp": result[9] if result[9] is not None else 0 # Initialisiere XP mit 0 + "level": result[8], # Initialisiere Level mit 1 + "xp": result[9] # Initialisiere XP mit 0 } else: # Falls keine Benutzerdaten gefunden werden, initialisiere sie neu @@ -478,36 +478,25 @@ def get_current_datetime(): def calculate_xp_for_level(level): return 5 * (level ** 2) + 50 * level + 100 -async def add_xp_to_user(user_id, xp_gained, message): - # Lade Benutzerdaten aus der Datenbank - user_data = load_user_data_from_mysql(user_id) +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) - 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 neu verdiente XP hinzu + new_xp = current_xp + xp_gained + next_level_xp = calculate_xp_for_level(current_level) - # XP hinzufügen - user_data["xp"] += xp_gained + # 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 - # 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 = message.channel # Verwendet den gleichen Kanal, in dem die Nachricht gesendet wurde - await channel.send(f"{message.author.mention} 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) + # 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) @@ -557,12 +546,14 @@ 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 - # Zufällige XP zwischen 5 und 15 hinzufügen - xp_gained = random.randint(2, 15) - await add_xp_to_user(user_id, xp_gained, message) + xp_gained = random.randint(5, 15) + await add_xp_to_user(user_id, xp_gained) + xp_cooldowns[user_id] = time.time() await client.process_commands(message)