modified: bot.py

This commit is contained in:
SimolZimol
2024-09-17 16:29:25 +02:00
parent 515c341d36
commit 86f4303690

53
bot.py
View File

@@ -182,11 +182,10 @@ def insert_user_data(user_id, guild_id, permission, points, ban, askmultus, filt
db_connection.rollback() db_connection.rollback()
def update_user_data(user_id, guild_id, field, value): 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: try:
update_query = f"UPDATE user_data SET {field} = %s WHERE user_id = %s AND guild_id = %s" 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': if field == 'chat_history':
serialized_chat_history = json.dumps(value) serialized_chat_history = json.dumps(value)
db_cursor.execute(update_query, (serialized_chat_history, user_id, guild_id)) 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: except mysql.connector.Error as err:
logger.error(f"Database error: {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_cursor.close()
db_connection.close() db_connection.close()
db_connection = connect_to_database()
db_cursor = db_connection.cursor()
# Verbindung neu aufbauen # Erneut versuchen, die Daten zu aktualisieren
db_connection = connect_to_database() db_cursor.execute(update_query, (value, user_id, guild_id))
db_cursor = db_connection.cursor() db_connection.commit()
# Wiederhole die Abfrage nach dem erneuten Verbinden
update_user_data(user_id, guild_id, field, value)
def connect_to_database(): def connect_to_database():
return mysql.connector.connect( return mysql.connector.connect(
@@ -232,7 +230,6 @@ def load_user_data_from_mysql(user_id, guild_id):
close_database_connection(connection) close_database_connection(connection)
if result: if result:
# Wenn das Level und die XP nicht vorhanden sind, initialisieren
user_data = { user_data = {
"user_id": result[0], "user_id": result[0],
"guild_id": result[1], "guild_id": result[1],
@@ -243,28 +240,24 @@ def load_user_data_from_mysql(user_id, guild_id):
"filter_value": result[6], "filter_value": result[6],
"rank": result[7], "rank": result[7],
"chat_history": json.loads(result[8]) if result[8] else [], "chat_history": json.loads(result[8]) if result[8] else [],
"asknotes_history": json.loads(result[9]) if result[9] else [],
"xp": result[10], "xp": result[10],
"level": result[11] "level": result[11]
} }
else: else:
# Wenn keine Benutzerdaten gefunden werden, neue Daten anlegen # Falls keine Benutzerdaten vorhanden sind, neue Daten anlegen
print(f"No data found for user {user_id} in guild {guild_id}. Inserting new data.")
user_data = { user_data = {
"user_id": user_id, "user_id": user_id,
"guild_id": guild_id, "guild_id": guild_id,
"permission": 0, # Standardberechtigung "permission": 0,
"points": 0, # Standardpunkte "points": 0,
"ban": 0, # Standardbannstatus "ban": 0,
"askmultus": 0, # Standardwert für askmultus "askmultus": 0,
"filter_value": 0, # Standardwert für Filter "filter_value": 0,
"rank": 0, # Standardrang "rank": 0,
"chat_history": [], # Leerer Chatverlauf "chat_history": [],
"asknotes_history": [], # Leerer Chatverlauf "xp": 0,
"xp": 0, # Standard-XP "level": 1
"level": 1 # Standardlevel
} }
insert_user_data( insert_user_data(
user_data["user_id"], user_data["user_id"],
user_data["guild_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): 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.""" """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) 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 user_data["xp"] += xp_gained
# Berechne die benötigten XP für das aktuelle Level # Berechne die benötigten XP für das aktuelle Level
level = user_data["level"] level = user_data["level"]
xp_needed = calculate_xp_needed_for_level(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: while user_data["xp"] >= xp_needed:
# Reduziere die überschüssigen XP und erhöhe das Level
user_data["xp"] -= xp_needed user_data["xp"] -= xp_needed
user_data["level"] += 1 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"]) 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, "xp", user_data["xp"])
update_user_data(user_id, guild_id, "level", user_data["level"]) update_user_data(user_id, guild_id, "level", user_data["level"])