modified: app.py

This commit is contained in:
SimolZimol
2024-10-24 13:17:50 +02:00
parent 8c2835aad6
commit 5923bb7e94

60
app.py
View File

@@ -138,8 +138,11 @@ 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,
@@ -152,10 +155,7 @@ 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
# Debug: Benutzerinformationen ausgeben # Abrufen der Gilden des Benutzers
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}") print(f"Guilds response status: {guilds_response.status_code}")
@@ -167,49 +167,61 @@ def callback():
guilds = guilds_response.json() guilds = guilds_response.json()
print(f"Guilds: {guilds}") print(f"Guilds: {guilds}")
# Falls keine Gilden zurückgegeben werden
if not guilds: if not guilds:
flash("Du bist in keinem Server, der den Bot verwendet.", "danger") flash("Du bist in keinem Server, der den Bot verwendet.", "danger")
return redirect(url_for("landing_page")) return redirect(url_for("landing_page"))
# Verbindung zur Datenbank herstellen und die Gildeninformationen speichern # 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 if guild_id in bot_guild_ids:
owner_id = guild['owner_id'] guild_name = guild['name']
guild_icon = guild.get('icon', None) # Manche Gilden haben kein Icon
owner_id = guild['owner_id']
cursor.execute("SELECT COUNT(*) FROM guilds WHERE guild_id = %s", (guild_id,)) # Prüfen, ob die Gilde bereits existiert
exists = cursor.fetchone()[0] cursor.execute("SELECT COUNT(*) FROM guilds WHERE guild_id = %s", (guild_id,))
exists = cursor.fetchone()[0]
if exists: if exists:
cursor.execute(""" # Gilde aktualisieren
UPDATE guilds cursor.execute("""
SET name = %s, icon = %s, owner_id = %s UPDATE guilds
WHERE guild_id = %s SET name = %s, icon = %s, owner_id = %s
""", (guild_name, guild_icon, owner_id, guild_id)) WHERE guild_id = %s
else: """, (guild_name, guild_icon, owner_id, guild_id))
cursor.execute(""" else:
INSERT INTO guilds (guild_id, name, icon, owner_id) # Neue Gilde einfügen
VALUES (%s, %s, %s, %s) cursor.execute("""
""", (guild_id, guild_name, guild_icon, owner_id)) 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'] = guilds # Speichere die Gilden in der Session 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
return redirect(url_for("server_selection")) return redirect(url_for("server_selection"))
except Exception as e: except Exception as e:
print(f"Error in OAuth2 callback: {e}") print(f"Error in OAuth2 callback: {e}")
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"))
@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."""