modified: app.py

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

72
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,82 +139,62 @@ 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']
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
if guild_id in bot_guild_ids: # Prüfen, ob die Gilde bereits existiert
guild_name = guild['name'] cursor.execute("SELECT COUNT(*) FROM guilds WHERE guild_id = %s", (guild_id,))
guild_icon = guild.get('icon', None) # Manche Gilden haben kein Icon exists = cursor.fetchone()[0]
owner_id = guild['owner_id']
# Prüfen, ob die Gilde bereits existiert if exists:
cursor.execute("SELECT COUNT(*) FROM guilds WHERE guild_id = %s", (guild_id,)) # Gilde aktualisieren
exists = cursor.fetchone()[0] cursor.execute("""
UPDATE guilds
if exists: SET name = %s, icon = %s, owner_id = %s
# Gilde aktualisieren WHERE guild_id = %s
cursor.execute(""" """, (guild_name, guild_icon, owner_id, guild_id))
UPDATE guilds else:
SET name = %s, icon = %s, owner_id = %s # Neue Gilde einfügen
WHERE guild_id = %s cursor.execute("""
""", (guild_name, guild_icon, owner_id, guild_id)) INSERT INTO guilds (guild_id, name, icon, owner_id)
else: VALUES (%s, %s, %s, %s)
# Neue Gilde einfügen """, (guild_id, guild_name, guild_icon, owner_id))
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() connection.commit()
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."""