diff options
author | 2025-07-16 10:13:34 +0100 | |
---|---|---|
committer | 2025-07-16 10:13:34 +0100 | |
commit | 613e6a90ef9e8266b431dfee5feab3ec1ff857f9 (patch) | |
tree | 686781c0faee5ead94ce2bf54439339d9af677ed | |
parent | Move common variables for GitHub API into common file (diff) |
Handle users who have left in the LDAP sync utility
-rw-r--r-- | arthur/exts/directory/ldap.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/arthur/exts/directory/ldap.py b/arthur/exts/directory/ldap.py index 72cb460..f2feb9e 100644 --- a/arthur/exts/directory/ldap.py +++ b/arthur/exts/directory/ldap.py @@ -194,8 +194,13 @@ class LDAP(commands.Cog): notified_users.append(message.mentions[0]) + handled = set() + for user in diff: await self._process_user(user, notified_users) + handled.add(user.discord_user.id) + + self._handle_left_users(handled) logger.info("LDAP: Sync complete.") except Exception as e: # noqa: BLE001 @@ -204,6 +209,21 @@ class LDAP(commands.Cog): f":x: LDAP Sync Error: ```python\n{e}```" ) + def _handle_left_users(self, handled: list[int]) -> None: + """Handle users that have left the guild and so were not processed.""" + ldap_users = ldap.find_users() + + for user in ldap_users: + if user.employee_number is None or user.employee_number in handled: + continue + + if user.locked: + logger.info(f"LDAP: User {user.uid} is locked, skipping.") + continue + + logger.info(f"LDAP: Deactivating user {user.uid} as they are no longer in the guild.") + freeipa.deactivate_user(user.uid) + async def _process_user(self, user: DiffedUser, notified_users: list[discord.User]) -> None: if user.action == LDAPSyncAction.ADD: if user.discord_user in notified_users: |