diff --git a/app.py b/app.py index 8a5efb1..d96667e 100644 --- a/app.py +++ b/app.py @@ -67,6 +67,7 @@ def get_db_connection(): password=DB_PASS, database=DB_NAME ) + def token_updater(token): session['oauth_token'] = token @@ -138,90 +139,71 @@ 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, authorization_response=request.url, ) - session['oauth_token'] = token - + # Abrufen der Benutzerinformationen von Discord user_info = discord.get(DISCORD_API_URL).json() session['discord_user'] = user_info - - # Abrufen der Gilden des Benutzers + + # Abrufen der Gilden (Server) guilds_response = discord.get('https://discord.com/api/users/@me/guilds') - print(f"Guilds response status: {guilds_response.status_code}") - - if guilds_response.status_code != 200: - print(f"Fehler beim Abrufen der Gilden: {guilds_response.content}") - flash("Fehler beim Abrufen der Gilden.", "danger") - return redirect(url_for("landing_page")) - guilds = guilds_response.json() - print(f"Guilds: {guilds}") - if not guilds: - flash("Du bist in keinem Server, der den Bot verwendet.", "danger") - return redirect(url_for("landing_page")) + # Debug: Ausgabe der Gildeninformationen + print(f"Guilds: {guilds}") # 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 = user_info['id'] # Setze den Benutzer als Besitzer, falls nötig - 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'] + # Prüfen, ob die Gilde bereits existiert + 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: - # 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)) + 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'] = [guild for guild in guilds if guild['id'] in bot_guild_ids] # Speichere nur die Gilden, wo der Bot ist, in der Session + # Speichere die Gilden in der Session + session['discord_guilds'] = guilds + # Weiterleitung zur Server-Auswahl 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."""