modified: app.py

This commit is contained in:
SimolZimol
2024-10-24 13:13:46 +02:00
parent 7601a448f8
commit 8c2835aad6

66
app.py
View File

@@ -138,7 +138,6 @@ def login():
@app.route("/callback") @app.route("/callback")
def callback(): def callback():
"""Verarbeitet den OAuth2-Rückruf von Discord."""
try: try:
discord = make_discord_session(state=session.get("oauth_state")) discord = make_discord_session(state=session.get("oauth_state"))
token = discord.fetch_token( token = discord.fetch_token(
@@ -153,39 +152,46 @@ def callback():
user_info = discord.get(DISCORD_API_URL).json() user_info = discord.get(DISCORD_API_URL).json()
session['discord_user'] = user_info session['discord_user'] = user_info
# Hole die Gilden (Server), auf denen der Benutzer ist # Debug: Benutzerinformationen ausgeben
print(f"User info: {user_info}")
# Abrufen der Gilden
guilds_response = discord.get('https://discord.com/api/users/@me/guilds') 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: if guilds_response.status_code != 200:
print(f"Fehler beim Abrufen der Gilden: {guilds_response.content}")
flash("Fehler beim Abrufen der Gilden.", "danger") flash("Fehler beim Abrufen der Gilden.", "danger")
return redirect(url_for("landing_page")) return redirect(url_for("landing_page"))
guilds = guilds_response.json() guilds = guilds_response.json()
print(f"Guilds: {guilds}")
# Verbindung zur Datenbank herstellen # 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
connection = get_db_connection() connection = get_db_connection()
cursor = connection.cursor() cursor = connection.cursor()
# Speichern oder Aktualisieren der Gildeninformationen in der Datenbank
for guild in guilds: for guild in guilds:
guild_id = guild['id'] guild_id = guild['id']
guild_name = guild['name'] guild_name = guild['name']
guild_icon = guild.get('icon', None) # Manche Gilden haben kein Icon guild_icon = guild.get('icon', None) # Manche Gilden haben kein Icon
owner_id = guild['owner_id'] owner_id = guild['owner_id']
# Prüfen, ob die Gilde bereits existiert
cursor.execute("SELECT COUNT(*) FROM guilds WHERE guild_id = %s", (guild_id,)) cursor.execute("SELECT COUNT(*) FROM guilds WHERE guild_id = %s", (guild_id,))
exists = cursor.fetchone()[0] exists = cursor.fetchone()[0]
if exists: if exists:
# Gilde aktualisieren
cursor.execute(""" cursor.execute("""
UPDATE guilds UPDATE guilds
SET name = %s, icon = %s, owner_id = %s SET name = %s, icon = %s, owner_id = %s
WHERE guild_id = %s WHERE guild_id = %s
""", (guild_name, guild_icon, owner_id, guild_id)) """, (guild_name, guild_icon, owner_id, guild_id))
else: else:
# Neue Gilde einfügen
cursor.execute(""" cursor.execute("""
INSERT INTO guilds (guild_id, name, icon, owner_id) INSERT INTO guilds (guild_id, name, icon, owner_id)
VALUES (%s, %s, %s, %s) VALUES (%s, %s, %s, %s)
@@ -197,7 +203,6 @@ def callback():
session['discord_guilds'] = guilds # Speichere die Gilden in der Session session['discord_guilds'] = guilds # Speichere die Gilden in der Session
# Weiterleitung zur Server-Auswahl
return redirect(url_for("server_selection")) return redirect(url_for("server_selection"))
except Exception as e: except Exception as e:
@@ -205,50 +210,6 @@ def callback():
flash("Ein Fehler ist beim Authentifizierungsprozess aufgetreten.", "danger") flash("Ein Fehler ist beim Authentifizierungsprozess aufgetreten.", "danger")
return redirect(url_for("landing_page")) return redirect(url_for("landing_page"))
def initialize_guilds():
"""Überprüft alle Gilden in user_data und stellt sicher, dass sie in der guilds-Tabelle vorhanden sind."""
try:
# Verbindung zur Datenbank herstellen
connection = get_db_connection()
cursor = connection.cursor(dictionary=True)
# Alle Gilden-IDs aus user_data abrufen
cursor.execute("SELECT DISTINCT guild_id FROM user_data")
user_guilds = cursor.fetchall()
# Liste aller Gilden-IDs, die von Discord aktualisiert werden müssen
guilds_to_update = []
# Überprüfen, ob jede Gilde aus user_data in guilds vorhanden ist
for guild in user_guilds:
guild_id = guild['guild_id']
cursor.execute("SELECT COUNT(*) AS count FROM guilds WHERE guild_id = %s", (guild_id,))
result = cursor.fetchone()
if result['count'] == 0:
# Gilde existiert nicht in der guilds-Tabelle, muss also aktualisiert werden
guilds_to_update.append(guild_id)
# Wenn Gilden aktualisiert werden müssen, verwende die Discord-API
if guilds_to_update:
discord = make_discord_session()
for guild_id in guilds_to_update:
guild_info = discord.get(f'https://discord.com/api/guilds/{guild_id}').json()
if 'id' in guild_info:
# Gildeninformationen in die guilds-Tabelle einfügen
cursor.execute("""
INSERT INTO guilds (guild_id, name, icon, owner_id)
VALUES (%s, %s, %s, %s)
""", (guild_info['id'], guild_info['name'], guild_info.get('icon', None), guild_info['owner_id']))
connection.commit()
print(f"Gilde {guild_info['name']} erfolgreich hinzugefügt.")
cursor.close()
connection.close()
except Exception as e:
print(f"Fehler beim Initialisieren der Gilden: {e}")
@app.route("/server_selection") @app.route("/server_selection")
def 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.""" """Zeigt dem Benutzer eine Liste aller Server an, auf denen er sich befindet und die in der Datenbank vorhanden sind."""
@@ -336,5 +297,4 @@ def stop():
return redirect(url_for("landing_page")) return redirect(url_for("landing_page"))
if __name__ == "__main__": if __name__ == "__main__":
initialize_guilds()
app.run(host="0.0.0.0", port=5000, debug=True) app.run(host="0.0.0.0", port=5000, debug=True)