modified: bot.py

This commit is contained in:
SimolZimol
2024-09-17 16:38:44 +02:00
parent 9f7738e505
commit 6975194970

66
bot.py
View File

@@ -166,44 +166,27 @@ CREATE TABLE IF NOT EXISTS user_data (
db_cursor.execute(create_table_query) db_cursor.execute(create_table_query)
db_connection.commit() db_connection.commit()
def insert_user_data(user_id, guild_id, permission, points, ban, askmultus, filter_value, chat_history, xp=0, level=1): def insert_user_data(user_id, guild_id, permission, points, ban, askmultus, filter_value, chat_history):
"""Fügt neue Benutzerdaten in die Datenbank ein."""
# Zuerst prüfen, ob die Daten bereits existieren
if user_data_exists(user_id, guild_id):
print(f"Data for user_id {user_id} and guild_id {guild_id} already exists. Skipping insertion.")
return
insert_query = """ insert_query = """
INSERT INTO user_data (user_id, guild_id, permission, points, ban, askmultus, filter_value, rank, chat_history, xp, level) INSERT INTO user_data (user_id, guild_id, permission, points, ban, askmultus, filter_value, rank, chat_history, xp, level)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
""" """
serialized_chat_history = json.dumps(chat_history) serialized_chat_history = json.dumps(chat_history)
data = (user_id, guild_id, permission, points, ban, askmultus, filter_value, 0, serialized_chat_history, xp, level) data = (user_id, guild_id, permission, points, ban, askmultus, filter_value, 0, serialized_chat_history, 0, 1) # Initialisiere XP auf 0 und Level auf 1
try: try:
db_cursor.execute(insert_query, data) db_cursor.execute(insert_query, data)
db_connection.commit() db_connection.commit()
print(f"User data for user_id {user_id} and guild_id {guild_id} inserted successfully.") print("User data inserted successfully.")
except Exception as e: except Exception as e:
print(f"Error inserting user data: {e}") print(f"Error inserting user data: {e}")
db_connection.rollback() db_connection.rollback()
def user_data_exists(user_id, guild_id):
"""Überprüft, ob bereits Daten für die Kombination aus user_id und guild_id existieren."""
connection = connect_to_database()
cursor = connection.cursor()
select_query = "SELECT 1 FROM user_data WHERE user_id = %s AND guild_id = %s"
cursor.execute(select_query, (user_id, guild_id))
result = cursor.fetchone()
cursor.close()
close_database_connection(connection)
return result is not None
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 # Verbindung global nutzen global db_connection, db_cursor # global-Deklaration muss vor dem Zugriff erfolgen
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))
@@ -214,16 +197,17 @@ 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}")
# Überprüfen, ob die Verbindung verloren gegangen ist und neu aufbauen if db_connection.is_connected():
if not db_connection.is_connected():
db_cursor.close() db_cursor.close()
db_connection.close() db_connection.close()
# Verbindung neu aufbauen
db_connection = connect_to_database() db_connection = connect_to_database()
db_cursor = db_connection.cursor() db_cursor = db_connection.cursor()
# Erneut versuchen, die Daten zu aktualisieren # Wiederhole die Abfrage nach dem erneuten Verbinden
db_cursor.execute(update_query, (value, user_id, guild_id)) update_user_data(user_id, guild_id, field, value)
db_connection.commit()
def connect_to_database(): def connect_to_database():
return mysql.connector.connect( return mysql.connector.connect(
@@ -248,6 +232,7 @@ 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],
@@ -258,24 +243,27 @@ 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:
# Falls keine Benutzerdaten vorhanden sind, neue Daten anlegen # Falls keine Benutzerdaten gefunden werden, initialisiere sie neu
user_data = { user_data = {
"user_id": user_id, "user_id": user_id,
"guild_id": guild_id, "guild_id": guild_id,
"permission": 0, "permission": 0, # Standardberechtigung
"points": 0, "points": 0, # Standardpunkte
"ban": 0, "ban": 0, # Standardbannstatus
"askmultus": 0, "askmultus": 0, # Standardwert für askmultus
"filter_value": 0, "filter_value": 0, # Standardwert für Filter
"rank": 0, "rank": 0, # Standardrang
"chat_history": [], "chat_history": [], # Leerer Chatverlauf
"xp": 0, "asknotes_history": [], # Leerer Chatverlauf
"level": 1 "xp": 0, # Standard-XP
"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"],
@@ -285,6 +273,7 @@ def load_user_data_from_mysql(user_id, guild_id):
user_data["askmultus"], user_data["askmultus"],
user_data["filter_value"], user_data["filter_value"],
user_data["chat_history"], user_data["chat_history"],
user_data["asknotes_history"],
user_data["xp"], user_data["xp"],
user_data["level"] user_data["level"]
) )
@@ -313,7 +302,7 @@ def load_user_data(user_id, guild_id):
if (user_id, guild_id) in cached_user_data: if (user_id, guild_id) in cached_user_data:
return cached_user_data[(user_id, guild_id)] return cached_user_data[(user_id, guild_id)]
# Daten aus der Datenbank laden oder neu anlegen # Daten aus der Datenbank laden oder einfügen
user_data = load_user_data_from_mysql(user_id, guild_id) user_data = load_user_data_from_mysql(user_id, guild_id)
asyncio.ensure_future(cache_user_data(user_id, guild_id, user_data)) asyncio.ensure_future(cache_user_data(user_id, guild_id, user_data))
@@ -462,7 +451,6 @@ async def on_interaction(interaction):
# Logge Interaktionen, die nicht den erwarteten Typ haben # Logge Interaktionen, die nicht den erwarteten Typ haben
logger.error(f"Unbekannte Interaktion: {interaction.type}, Daten: {interaction.data}") logger.error(f"Unbekannte Interaktion: {interaction.type}, Daten: {interaction.data}")
def read_introduction(): def read_introduction():
try: try:
with open("introduction.txt", "r", encoding="utf-8") as file: with open("introduction.txt", "r", encoding="utf-8") as file: