modified: app.py

new file:   templates/user_landing_page.html
	new file:   templates/user_server_data.html
This commit is contained in:
SimolZimol
2024-10-24 13:43:50 +02:00
parent b978507591
commit b2d9ff1c2e
3 changed files with 107 additions and 44 deletions

89
app.py
View File

@@ -68,7 +68,6 @@ def get_db_connection():
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/<int:guild_id>")
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")

View File

@@ -0,0 +1,34 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>User Landing Page</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<div class="container mt-5">
<div class="text-center">
<img src="https://cdn.discordapp.com/avatars/{{ user_info['id'] }}/{{ user_info['avatar'] }}.png" class="rounded-circle" alt="Profile Picture" width="100">
<h2>Welcome, {{ user_info['username'] }}#{{ user_info['discriminator'] }}</h2>
<p>User ID: {{ user_info['id'] }}</p>
</div>
<h3 class="mt-5">Your Servers</h3>
<div class="row">
{% for guild in guilds %}
<div class="col-md-4 mt-3">
<div class="card">
<img src="https://cdn.discordapp.com/icons/{{ guild['id'] }}/{{ guild['icon'] }}.png" class="card-img-top" alt="Server Icon">
<div class="card-body">
<h5 class="card-title">{{ guild['name'] }}</h5>
<p class="card-text">Select this server to view your server-specific data.</p>
<a href="{{ url_for('user_server_data', guild_id=guild['id']) }}" class="btn btn-primary">View Server</a>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Server User Data</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<div class="container mt-5">
<div class="text-center">
<h2>{{ user_info['username'] }}'s Data for Server ID {{ guild_id }}</h2>
</div>
<h3>Server-specific Data</h3>
<ul class="list-group">
<li class="list-group-item">Points: {{ user_data['points'] }}</li>
<li class="list-group-item">XP: {{ user_data['xp'] }}</li>
<li class="list-group-item">Level: {{ user_data['level'] }}</li>
<li class="list-group-item">Permission: {{ user_data['permission'] }}</li>
</ul>
</div>
</body>
</html>