diff --git a/bot.py b/bot.py index 6641071..86690bc 100644 --- a/bot.py +++ b/bot.py @@ -182,11 +182,10 @@ def insert_user_data(user_id, guild_id, permission, points, ban, askmultus, filt db_connection.rollback() def update_user_data(user_id, guild_id, field, value): - global db_connection, db_cursor # global-Deklaration muss vor dem Zugriff erfolgen + global db_connection, db_cursor # Verbindung global nutzen try: update_query = f"UPDATE user_data SET {field} = %s WHERE user_id = %s AND guild_id = %s" - # Überprüfen, ob das Feld 'chat_history' aktualisiert wird if field == 'chat_history': serialized_chat_history = json.dumps(value) db_cursor.execute(update_query, (serialized_chat_history, user_id, guild_id)) @@ -197,17 +196,16 @@ def update_user_data(user_id, guild_id, field, value): except mysql.connector.Error as err: logger.error(f"Database error: {err}") - if db_connection.is_connected(): + # Überprüfen, ob die Verbindung verloren gegangen ist und neu aufbauen + if not db_connection.is_connected(): db_cursor.close() db_connection.close() + db_connection = connect_to_database() + db_cursor = db_connection.cursor() - # Verbindung neu aufbauen - db_connection = connect_to_database() - db_cursor = db_connection.cursor() - - # Wiederhole die Abfrage nach dem erneuten Verbinden - update_user_data(user_id, guild_id, field, value) - + # Erneut versuchen, die Daten zu aktualisieren + db_cursor.execute(update_query, (value, user_id, guild_id)) + db_connection.commit() def connect_to_database(): return mysql.connector.connect( @@ -232,7 +230,6 @@ def load_user_data_from_mysql(user_id, guild_id): close_database_connection(connection) if result: - # Wenn das Level und die XP nicht vorhanden sind, initialisieren user_data = { "user_id": result[0], "guild_id": result[1], @@ -243,28 +240,24 @@ def load_user_data_from_mysql(user_id, guild_id): "filter_value": result[6], "rank": result[7], "chat_history": json.loads(result[8]) if result[8] else [], - "asknotes_history": json.loads(result[9]) if result[9] else [], "xp": result[10], "level": result[11] } else: - # Wenn keine Benutzerdaten gefunden werden, neue Daten anlegen - print(f"No data found for user {user_id} in guild {guild_id}. Inserting new data.") + # Falls keine Benutzerdaten vorhanden sind, neue Daten anlegen user_data = { "user_id": user_id, "guild_id": guild_id, - "permission": 0, # Standardberechtigung - "points": 0, # Standardpunkte - "ban": 0, # Standardbannstatus - "askmultus": 0, # Standardwert für askmultus - "filter_value": 0, # Standardwert für Filter - "rank": 0, # Standardrang - "chat_history": [], # Leerer Chatverlauf - "asknotes_history": [], # Leerer Chatverlauf - "xp": 0, # Standard-XP - "level": 1 # Standardlevel + "permission": 0, + "points": 0, + "ban": 0, + "askmultus": 0, + "filter_value": 0, + "rank": 0, + "chat_history": [], + "xp": 0, + "level": 1 } - insert_user_data( user_data["user_id"], user_data["guild_id"], @@ -486,26 +479,22 @@ def calculate_xp_needed_for_level(level): async def add_xp_to_user(user_id, guild_id, xp_gained): """Fügt einem Benutzer XP hinzu und überprüft, ob er ein Level aufsteigt.""" - # Lade Benutzerdaten (XP, Level, etc.) user_data = load_user_data(user_id, guild_id) - # Füge die gewonnenen XP hinzu + # Füge die XP hinzu user_data["xp"] += xp_gained # Berechne die benötigten XP für das aktuelle Level level = user_data["level"] xp_needed = calculate_xp_needed_for_level(level) - # Überprüfe, ob der Benutzer aufgestiegen ist + # Überprüfe, ob der Benutzer ein Level aufsteigt while user_data["xp"] >= xp_needed: - # Reduziere die überschüssigen XP und erhöhe das Level user_data["xp"] -= xp_needed user_data["level"] += 1 - - # Berechne die neuen XP-Anforderungen für das nächste Level xp_needed = calculate_xp_needed_for_level(user_data["level"]) - # Speichere die aktualisierten Benutzerdaten in der Datenbank + # Aktualisiere die Datenbank update_user_data(user_id, guild_id, "xp", user_data["xp"]) update_user_data(user_id, guild_id, "level", user_data["level"])