modified: app.py

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

26
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,31 +167,42 @@ 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']
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 = 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)
@@ -201,7 +212,7 @@ def callback():
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"))
@@ -210,6 +221,7 @@ 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"))
@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."""