From 28a61b42a145f5483e9f3864913c1efd875e5e54 Mon Sep 17 00:00:00 2001 From: Leander Furumo Date: Fri, 23 Oct 2026 02:45:46 +0200 Subject: [PATCH] keep the membership check going when a single user fails An unhandled exception, e.g. from a user without a discord profile, stopped the task loop until the bot was restarted. Co-Authored-By: Claude Opus 5.5 --- bot/src/cogs/galtinn.py | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/bot/src/cogs/galtinn.py b/bot/src/cogs/galtinn.py index 6b7edea..0067166 100644 --- a/bot/src/cogs/galtinn.py +++ b/bot/src/cogs/galtinn.py @@ -539,23 +539,33 @@ class Galtinn(commands.Cog): all_roles = await self.fetch_all_galtinn_roles() for galtinn_user in galtinn_users.results: + if not galtinn_user.discord_profile: + self.bot.logger.warning(f"Galtinn user {galtinn_user.id} has no Discord profile. Skipping") + continue + self.bot.logger.info( f"Checking membership status for galtinn user {galtinn_user.id}." + f" Discord ID: {galtinn_user.discord_profile.discord_id}" ) - # Fetch Discord user - if not ( - discord_user := await discord_utils.get_guild_member( - self.bot, guild, galtinn_user.discord_profile.discord_id - ) - ): - self.bot.logger.error( - f"Failed to fetch member with ID {galtinn_user.discord_profile.discord_id}. Not found" - ) - continue - roles_to_add, roles_to_remove = await self.get_user_galtinn_roles(galtinn_user, all_roles) - await self.update_roles(discord_user, roles_to_add, roles_to_remove) + # An unhandled exception would stop the task loop until the bot is restarted, + # so one bad user must not be allowed to stop the check for everyone else + try: + # Fetch Discord user + if not ( + discord_user := await discord_utils.get_guild_member( + self.bot, guild, galtinn_user.discord_profile.discord_id + ) + ): + self.bot.logger.error( + f"Failed to fetch member with ID {galtinn_user.discord_profile.discord_id}. Not found" + ) + continue + + roles_to_add, roles_to_remove = await self.get_user_galtinn_roles(galtinn_user, all_roles) + await self.update_roles(discord_user, roles_to_add, roles_to_remove) + except Exception: + self.bot.logger.exception(f"Failed to check membership status for galtinn user {galtinn_user.id}") await asyncio.sleep(0.5)