File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -194,8 +194,13 @@ async def sync_users(self) -> None:
194194
195195 notified_users .append (message .mentions [0 ])
196196
197+ handled = set ()
198+
197199 for user in diff :
198200 await self ._process_user (user , notified_users )
201+ handled .add (user .discord_user .id )
202+
203+ self ._handle_left_users (handled )
199204
200205 logger .info ("LDAP: Sync complete." )
201206 except Exception as e : # noqa: BLE001
@@ -204,6 +209,21 @@ async def sync_users(self) -> None:
204209 f":x: LDAP Sync Error: ```python\n { e } ```"
205210 )
206211
212+ def _handle_left_users (self , handled : list [int ]) -> None :
213+ """Handle users that have left the guild and so were not processed."""
214+ ldap_users = ldap .find_users ()
215+
216+ for user in ldap_users :
217+ if user .employee_number is None or user .employee_number in handled :
218+ continue
219+
220+ if user .locked :
221+ logger .info (f"LDAP: User { user .uid } is locked, skipping." )
222+ continue
223+
224+ logger .info (f"LDAP: Deactivating user { user .uid } as they are no longer in the guild." )
225+ freeipa .deactivate_user (user .uid )
226+
207227 async def _process_user (self , user : DiffedUser , notified_users : list [discord .User ]) -> None :
208228 if user .action == LDAPSyncAction .ADD :
209229 if user .discord_user in notified_users :
You can’t perform that action at this time.
0 commit comments