From a5f3d9719f9a500652f5a0b3ed3420259260db20 Mon Sep 17 00:00:00 2001 From: SimolZimol <70102430+SimolZimol@users.noreply.github.com> Date: Tue, 29 Oct 2024 19:49:59 +0100 Subject: [PATCH] modified: bot.py --- bot.py | 83 ++++++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/bot.py b/bot.py index 9f50323..61debd4 100644 --- a/bot.py +++ b/bot.py @@ -280,48 +280,51 @@ def save_global_permission(user_id, permission_level): #----------------------------------------------------------------------------------------------------------- async def update_all_users(): - try: - connection = connect_to_database() - cursor = connection.cursor() + connection = connect_to_database() + cursor = connection.cursor() + + # Hole alle Guild-IDs aus der guilds-Datenbank + cursor.execute("SELECT guild_id FROM guilds") + guilds = cursor.fetchall() + + for (guild_id,) in guilds: + guild = client.get_guild(int(guild_id)) + if not guild: + continue # Falls der Bot auf diesem Server nicht mehr aktiv ist, überspringen + + print(f"Updating users for guild: {guild_id}") + + # Aktualisiere Benutzerdaten für alle Mitglieder im Server + for member in guild.members: + user_id = member.id + user_data = load_user_data(user_id, guild_id) + + print(f"Processing member: {member.display_name} (ID: {user_id})") - # Holen Sie alle guild_id-Einträge von der 'guilds'-Tabelle - cursor.execute("SELECT guild_id FROM guilds") - guild_ids = [guild_id[0] for guild_id in cursor.fetchall()] # Extrahiert alle guild_id Werte als Liste + # Aktualisiere Nickname, Profilbild und Join-Datum für vorhandene Mitglieder + update_user_data(user_id, guild_id, "nickname", member.display_name) + update_user_data(user_id, guild_id, "profile_picture", str(member.display_avatar.url)) + update_user_data(user_id, guild_id, "join_date", member.joined_at.date()) + + # Entferne leave_date, falls der Benutzer noch auf dem Server ist und leave_date gesetzt war + if user_data.get("leave_date") is not None: + print(f"Clearing leave_date for user: {member.display_name}") + update_user_data(user_id, guild_id, "leave_date", None) - count = 0 - for guild_id in guild_ids: - guild = client.get_guild(int(guild_id)) - if guild is None: - continue - - for member in guild.members: - user_data = load_user_data(member.id, guild.id) - - nickname = member.nick if member.nick else member.name - profile_picture = member.display_avatar.url - join_date = member.joined_at.date() if member.joined_at else None - - # Update nickname, profile_picture, and join_date in database - update_user_data(member.id, guild.id, "nickname", nickname) - update_user_data(member.id, guild.id, "profile_picture", profile_picture) - update_user_data(member.id, guild.id, "join_date", join_date) - - # Check if the user is still on the server, update leave_date if not - if not member.bot and member.status == discord.Status.offline: - leave_date = datetime.now().date() - update_user_data(member.id, guild.id, "leave_date", leave_date) - else: - update_user_data(member.id, guild.id, "leave_date", None) - - count += 1 - if count >= 100: # After every 100 users, take a short pause - await asyncio.sleep(1) # Short pause - count = 0 - - cursor.close() - connection.close() - except Exception as e: - logger.error(f"Error updating all users: {e}") + # Überprüfe alle Benutzer in `user_data`, die nicht mehr auf dem Server sind + cursor.execute("SELECT user_id FROM user_data WHERE guild_id = %s", (guild_id,)) + all_users = cursor.fetchall() + + for (user_id,) in all_users: + member = guild.get_member(int(user_id)) + if member is None: # Benutzer hat den Server verlassen + print(f"User {user_id} has left the guild {guild_id}, setting leave_date.") + leave_date = datetime.now().date() + update_user_data(user_id, guild_id, "leave_date", leave_date) + + cursor.close() + connection.close() + print("User data update completed.") def save_giveaway_to_db(guild_id, platform, name, prize_uuid, game_key): connection = connect_to_database()