modified: bot.py

This commit is contained in:
SimolZimol
2024-10-29 19:41:34 +01:00
parent bfb70e135c
commit 3887864f18

70
bot.py
View File

@@ -280,51 +280,45 @@ def save_global_permission(user_id, permission_level):
#----------------------------------------------------------------------------------------------------------- #-----------------------------------------------------------------------------------------------------------
async def update_all_users(): async def update_all_users():
connection = connect_to_database() try:
cursor = connection.cursor() connection = connect_to_database()
cursor = connection.cursor()
guild_ids = [guild_id for (guild_id,) in cursor.execute("SELECT guild_id FROM guilds").fetchall()]
# Hole alle Guild-IDs aus der guilds-Datenbank count = 0
cursor.execute("SELECT guild_id FROM guilds") for guild_id in guild_ids:
guilds = cursor.fetchall() guild = client.get_guild(int(guild_id))
if guild is None:
continue
for (guild_id,) in guilds: for member in guild.members:
guild = client.get_guild(int(guild_id)) user_data = load_user_data(member.id, 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}") 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
# Aktualisiere Benutzerdaten für alle Mitglieder im Server # Update nickname, profile_picture, and join_date in database
for member in guild.members: update_user_data(member.id, guild.id, "nickname", nickname)
user_id = member.id update_user_data(member.id, guild.id, "profile_picture", profile_picture)
user_data = load_user_data(user_id, guild_id) update_user_data(member.id, guild.id, "join_date", join_date)
print(f"Processing member: {member.display_name} (ID: {user_id})") # 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)
# Aktualisiere Nickname, Profilbild und Join-Datum für vorhandene Mitglieder count += 1
update_user_data(user_id, guild_id, "nickname", member.display_name) if count >= 100: # After every 100 users, take a short pause
update_user_data(user_id, guild_id, "profile_picture", str(member.display_avatar.url)) await asyncio.sleep(1) # Short pause
update_user_data(user_id, guild_id, "join_date", member.joined_at.date()) count = 0
# Entferne leave_date, falls der Benutzer noch auf dem Server ist und leave_date gesetzt war cursor.close()
if user_data.get("leave_date") is not None: connection.close()
print(f"Clearing leave_date for user: {member.display_name}") except Exception as e:
update_user_data(user_id, guild_id, "leave_date", None) 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): def save_giveaway_to_db(guild_id, platform, name, prize_uuid, game_key):
connection = connect_to_database() connection = connect_to_database()