modified: app.py

This commit is contained in:
SimolZimol
2024-10-24 13:32:15 +02:00
parent 5923bb7e94
commit b978507591

36
app.py
View File

@@ -68,6 +68,7 @@ def get_db_connection():
database=DB_NAME database=DB_NAME
) )
def token_updater(token): def token_updater(token):
session['oauth_token'] = token session['oauth_token'] = token
@@ -138,57 +139,35 @@ def login():
@app.route("/callback") @app.route("/callback")
def callback(): def callback():
"""Verarbeitet den OAuth2-Rückruf von Discord und fügt nur die relevanten Gilden in die Datenbank ein."""
try: try:
discord = make_discord_session(state=session.get("oauth_state")) discord = make_discord_session(state=session.get("oauth_state"))
# Abrufe des OAuth2-Tokens
token = discord.fetch_token( token = discord.fetch_token(
DISCORD_TOKEN_URL, DISCORD_TOKEN_URL,
client_secret=DISCORD_CLIENT_SECRET, client_secret=DISCORD_CLIENT_SECRET,
authorization_response=request.url, authorization_response=request.url,
) )
session['oauth_token'] = token session['oauth_token'] = token
# Abrufen der Benutzerinformationen von Discord # Abrufen der Benutzerinformationen von Discord
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
# Abrufen der Gilden des Benutzers # Abrufen der Gilden (Server)
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:
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() guilds = guilds_response.json()
print(f"Guilds: {guilds}")
if not guilds: # Debug: Ausgabe der Gildeninformationen
flash("Du bist in keinem Server, der den Bot verwendet.", "danger") print(f"Guilds: {guilds}")
return redirect(url_for("landing_page"))
# Verbindung zur Datenbank herstellen # Verbindung zur Datenbank herstellen
connection = get_db_connection() connection = get_db_connection()
cursor = connection.cursor() 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: for guild in guilds:
guild_id = guild['id'] guild_id = guild['id']
if guild_id in bot_guild_ids:
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 = user_info['id'] # Setze den Benutzer als Besitzer, falls nötig
# Prüfen, ob die Gilde bereits existiert # 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,))
@@ -212,8 +191,10 @@ def callback():
cursor.close() cursor.close()
connection.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")) return redirect(url_for("server_selection"))
except Exception as e: except Exception as e:
@@ -222,6 +203,7 @@ def callback():
return redirect(url_for("landing_page")) return redirect(url_for("landing_page"))
@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."""