diff options
-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: |