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

93
app.py
View File

@@ -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/<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")