From 5923bb7e94ee64cb0dc359da195853cd66a12dda Mon Sep 17 00:00:00 2001 From: SimolZimol <70102430+SimolZimol@users.noreply.github.com> Date: Thu, 24 Oct 2024 13:17:50 +0200 Subject: [PATCH] modified: app.py --- app.py | 60 +++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/app.py b/app.py index 2441155..8a5efb1 100644 --- a/app.py +++ b/app.py @@ -138,8 +138,11 @@ def login(): @app.route("/callback") def callback(): + """Verarbeitet den OAuth2-Rückruf von Discord und fügt nur die relevanten Gilden in die Datenbank ein.""" try: discord = make_discord_session(state=session.get("oauth_state")) + + # Abrufe des OAuth2-Tokens token = discord.fetch_token( DISCORD_TOKEN_URL, client_secret=DISCORD_CLIENT_SECRET, @@ -152,10 +155,7 @@ def callback(): user_info = discord.get(DISCORD_API_URL).json() session['discord_user'] = user_info - # Debug: Benutzerinformationen ausgeben - print(f"User info: {user_info}") - - # Abrufen der Gilden + # Abrufen der Gilden des Benutzers guilds_response = discord.get('https://discord.com/api/users/@me/guilds') print(f"Guilds response status: {guilds_response.status_code}") @@ -167,49 +167,61 @@ def callback(): guilds = guilds_response.json() print(f"Guilds: {guilds}") - # Falls keine Gilden zurückgegeben werden if not guilds: flash("Du bist in keinem Server, der den Bot verwendet.", "danger") return redirect(url_for("landing_page")) - # Verbindung zur Datenbank herstellen und die Gildeninformationen speichern + # Verbindung zur Datenbank herstellen connection = get_db_connection() cursor = connection.cursor() + # Hole die Gilden aus der `user_data` Tabelle, wo der Bot auf dem Server ist + cursor.execute("SELECT DISTINCT guild_id FROM user_data") + bot_guilds = cursor.fetchall() + + bot_guild_ids = {str(row['guild_id']) for row in bot_guilds} # Set mit Gilden-IDs, wo der Bot ist + + # Speichern oder Aktualisieren der Gildeninformationen in der Datenbank, wenn der Bot auch auf dem Server ist for guild in guilds: guild_id = guild['id'] - guild_name = guild['name'] - guild_icon = guild.get('icon', None) # Manche Gilden haben kein Icon - owner_id = guild['owner_id'] + + if guild_id in bot_guild_ids: + guild_name = guild['name'] + guild_icon = guild.get('icon', None) # Manche Gilden haben kein Icon + owner_id = guild['owner_id'] - cursor.execute("SELECT COUNT(*) FROM guilds WHERE guild_id = %s", (guild_id,)) - exists = cursor.fetchone()[0] + # Prüfen, ob die Gilde bereits existiert + cursor.execute("SELECT COUNT(*) FROM guilds WHERE guild_id = %s", (guild_id,)) + exists = cursor.fetchone()[0] - if exists: - cursor.execute(""" - UPDATE guilds - SET name = %s, icon = %s, owner_id = %s - WHERE guild_id = %s - """, (guild_name, guild_icon, owner_id, guild_id)) - else: - cursor.execute(""" - INSERT INTO guilds (guild_id, name, icon, owner_id) - VALUES (%s, %s, %s, %s) - """, (guild_id, guild_name, guild_icon, owner_id)) + if exists: + # Gilde aktualisieren + cursor.execute(""" + UPDATE guilds + SET name = %s, icon = %s, owner_id = %s + WHERE guild_id = %s + """, (guild_name, guild_icon, owner_id, guild_id)) + else: + # Neue Gilde einfügen + cursor.execute(""" + INSERT INTO guilds (guild_id, name, icon, owner_id) + VALUES (%s, %s, %s, %s) + """, (guild_id, guild_name, guild_icon, owner_id)) connection.commit() cursor.close() connection.close() - session['discord_guilds'] = guilds # Speichere die Gilden in der Session + session['discord_guilds'] = [guild for guild in guilds if guild['id'] in bot_guild_ids] # Speichere nur die Gilden, wo der Bot ist, in der Session return redirect(url_for("server_selection")) - + except Exception as e: print(f"Error in OAuth2 callback: {e}") flash("Ein Fehler ist beim Authentifizierungsprozess aufgetreten.", "danger") return redirect(url_for("landing_page")) + @app.route("/server_selection") def server_selection(): """Zeigt dem Benutzer eine Liste aller Server an, auf denen er sich befindet und die in der Datenbank vorhanden sind."""