From b2d9ff1c2e88bd4be20435147f9d6b2ce477384e Mon Sep 17 00:00:00 2001 From: SimolZimol <70102430+SimolZimol@users.noreply.github.com> Date: Thu, 24 Oct 2024 13:43:50 +0200 Subject: [PATCH] modified: app.py new file: templates/user_landing_page.html new file: templates/user_server_data.html --- app.py | 93 +++++++++++++++++--------------- templates/user_landing_page.html | 34 ++++++++++++ templates/user_server_data.html | 24 +++++++++ 3 files changed, 107 insertions(+), 44 deletions(-) create mode 100644 templates/user_landing_page.html create mode 100644 templates/user_server_data.html diff --git a/app.py b/app.py index d96667e..bd07645 100644 --- a/app.py +++ b/app.py @@ -67,7 +67,6 @@ def get_db_connection(): password=DB_PASS, database=DB_NAME ) - def token_updater(token): session['oauth_token'] = token @@ -139,6 +138,7 @@ def login(): @app.route("/callback") def callback(): + """Verarbeitet den OAuth2-Rückruf von Discord.""" try: discord = make_discord_session(state=session.get("oauth_state")) token = discord.fetch_token( @@ -146,62 +146,67 @@ def callback(): 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 (Server) + + # Hole die Gilden (Server), auf denen der Benutzer ist guilds_response = discord.get('https://discord.com/api/users/@me/guilds') + + if guilds_response.status_code != 200: + flash("Fehler beim Abrufen der Gilden.", "danger") + return redirect(url_for("landing_page")) + guilds = guilds_response.json() + session['discord_guilds'] = guilds # Speichere die Gilden in der Session - # Debug: Ausgabe der Gildeninformationen - print(f"Guilds: {guilds}") - - # Verbindung zur Datenbank herstellen - connection = get_db_connection() - cursor = connection.cursor() - - 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 - - # 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)) - - connection.commit() - cursor.close() - connection.close() - - # Speichere die Gilden in der Session - session['discord_guilds'] = guilds - - # Weiterleitung zur Server-Auswahl - return redirect(url_for("server_selection")) - + # Leite den Benutzer zur neuen User-Landing-Page weiter + return redirect(url_for("user_landing_page")) + 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("/user_server_data/") +def user_server_data(guild_id): + """Zeigt die serverbezogenen Nutzerdaten für den ausgewählten Server an.""" + if "discord_user" in session: + user_info = session["discord_user"] + user_id = user_info["id"] + connection = get_db_connection() + cursor = connection.cursor(dictionary=True) + + # Hole die serverbezogenen Nutzerdaten + cursor.execute("SELECT * FROM user_data WHERE user_id = %s AND guild_id = %s", (user_id, guild_id)) + user_data = cursor.fetchone() + + cursor.close() + connection.close() + + if user_data: + return render_template("user_server_data.html", user_info=user_info, user_data=user_data, guild_id=guild_id) + else: + flash("Keine Daten für diesen Server gefunden.", "warning") + return redirect(url_for("user_landing_page")) + + return redirect(url_for("landing_page")) + + +@app.route("/user_landing_page") +def user_landing_page(): + """Zeigt die globale Benutzerdaten und die Liste der Server an.""" + if "discord_user" in session and "discord_guilds" in session: + user_info = session["discord_user"] + guilds = session["discord_guilds"] + + return render_template("user_landing_page.html", user_info=user_info, guilds=guilds) + + return redirect(url_for("landing_page")) @app.route("/server_selection") diff --git a/templates/user_landing_page.html b/templates/user_landing_page.html new file mode 100644 index 0000000..a75bac0 --- /dev/null +++ b/templates/user_landing_page.html @@ -0,0 +1,34 @@ + + + + + + User Landing Page + + + +
+
+ Profile Picture +

Welcome, {{ user_info['username'] }}#{{ user_info['discriminator'] }}

+

User ID: {{ user_info['id'] }}

+
+ +

Your Servers

+
+ {% for guild in guilds %} +
+
+ Server Icon +
+
{{ guild['name'] }}
+

Select this server to view your server-specific data.

+ View Server +
+
+
+ {% endfor %} +
+
+ + diff --git a/templates/user_server_data.html b/templates/user_server_data.html new file mode 100644 index 0000000..95b59ce --- /dev/null +++ b/templates/user_server_data.html @@ -0,0 +1,24 @@ + + + + + + Server User Data + + + +
+
+

{{ user_info['username'] }}'s Data for Server ID {{ guild_id }}

+
+ +

Server-specific Data

+ +
+ +