mirror of
https://github.com/Sea-Haven-Industries/meal-order-manager.git
synced 2026-09-30 12:23:13 +00:00
60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
|
|
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,
|
||
|
|
}
|