import os from shared.db import get_roster, put_roster from shared.slack import get_channel_members, get_user_info def lambda_handler(event, context): channel_id = os.environ.get("SLACK_CHANNEL_ID") or __import__( "shared.secrets", fromlist=["get_parameter"] ).get_parameter(os.environ["SLACK_CHANNEL_PARAM"]) member_ids = get_channel_members(channel_id) if not member_ids: return {"status": "error", "message": "No members found in channel"} employees = [] skipped = 0 for uid in member_ids: info = get_user_info(uid) if not info or info.get("is_bot") or info.get("id") == "USLACKBOT": skipped += 1 continue profile = info.get("profile", {}) name = profile.get("real_name") or info.get("real_name", "") email = profile.get("email", "") if not name or not email: skipped += 1 continue employees.append( { "name": name, "email": email, "slack_user_id": uid, } ) employees.sort(key=lambda e: e["name"]) existing = get_roster() existing_set = {(e["name"], e["email"], e["slack_user_id"]) for e in existing} new_set = {(e["name"], e["email"], e["slack_user_id"]) for e in employees} if existing_set == new_set: return { "status": "no_change", "employee_count": len(employees), } put_roster(employees) added = new_set - existing_set removed = existing_set - new_set return { "status": "synced", "employee_count": len(employees), "added": len(added), "removed": len(removed), "skipped": skipped, }