diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 825c361..9b56ded 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,7 +1,12 @@ version: 2 updates: - package-ecosystem: "pip" - directory: "/" + directories: + - "/src/slack-bot" + - "/src/weekly-post" + - "/src/roster-sync" + - "/src/ring-scheduler" + - "/src/shared" schedule: interval: "weekly" assignees: diff --git a/src/slack-bot/app.py b/src/slack-bot/app.py index ce24457..0124070 100644 --- a/src/slack-bot/app.py +++ b/src/slack-bot/app.py @@ -594,9 +594,9 @@ def create_app( respond( text=( "*Admin Commands:*\n" - "`admin override ` — Assign shift\n" - "`admin open ` — Mark open\n" - "`admin clear ` — Remove override\n" + "`admin override [day|night]` — Assign shift\n" + "`admin open [day|night]` — Mark open\n" + "`admin clear [day|night]` — Remove override\n" "`admin roster add ` — Add employee\n" "`admin roster remove ` — Remove employee\n" "`admin roster rename ` — Rename" @@ -608,59 +608,75 @@ def create_app( if subcmd == "override": if len(parts) < 4: - respond(text="Usage: `/oncall admin override `") + respond( + text="Usage: `/oncall admin override [day|night]`" + ) return date = parse_date(parts[2]) if not date: respond(text=f"Couldn't parse date: `{parts[2]}`") return ext = parts[3] + shift_type = ( + parts[4] if len(parts) > 4 and parts[4] in ("day", "night") else "night" + ) employee = schedule.get_employee_by_extension(ext) if not employee: respond(text=f"Extension `{ext}` not found in the roster.") return date_str = date.strftime("%Y-%m-%d") - schedule.set_override(date_str, employee["extension"], employee["name"]) - if is_today(date_str) and _is_active_shift_type("night"): + schedule.set_override( + date_str, employee["extension"], employee["name"], shift_type + ) + if is_today(date_str) and _is_active_shift_type(shift_type): _update_3cx_routing(employee["extension"]) + label = "Day" if shift_type == "day" else "Night" respond( - text=f"Override set: *{date.strftime('%A, %b %-d')}* → {employee['name']} (Ext {ext})" + text=f"Override set: *{date.strftime('%A, %b %-d')}* ({label}) → {employee['name']} (Ext {ext})" ) _refresh_schedule_post(client) elif subcmd == "open": if len(parts) < 3: - respond(text="Usage: `/oncall admin open `") + respond(text="Usage: `/oncall admin open [day|night]`") return date = parse_date(parts[2]) if not date: respond(text=f"Couldn't parse date: `{parts[2]}`") return + shift_type = ( + parts[3] if len(parts) > 3 and parts[3] in ("day", "night") else "night" + ) date_str = date.strftime("%Y-%m-%d") - schedule.mark_open(date_str) - if is_today(date_str) and _is_active_shift_type("night"): + schedule.mark_open(date_str, shift_type) + if is_today(date_str) and _is_active_shift_type(shift_type): _update_3cx_routing(FALLBACK_EXTENSION) - respond(text=f"*{date.strftime('%A, %b %-d')}* marked as open.") + label = "Day" if shift_type == "day" else "Night" + respond(text=f"*{date.strftime('%A, %b %-d')}* ({label}) marked as open.") _refresh_schedule_post(client) elif subcmd == "clear": if len(parts) < 3: - respond(text="Usage: `/oncall admin clear `") + respond(text="Usage: `/oncall admin clear [day|night]`") return date = parse_date(parts[2]) if not date: respond(text=f"Couldn't parse date: `{parts[2]}`") return + shift_type = ( + parts[3] if len(parts) > 3 and parts[3] in ("day", "night") else "night" + ) date_str = date.strftime("%Y-%m-%d") - schedule.remove_override(date_str) - if is_today(date_str) and _is_active_shift_type("night"): + schedule.remove_override(date_str, shift_type) + if is_today(date_str) and _is_active_shift_type(shift_type): day_name = date.strftime("%A") ext, _name, _source = schedule.resolve_shift( - date_str, day_name, "night" + date_str, day_name, shift_type ) _update_3cx_routing(ext) + label = "Day" if shift_type == "day" else "Night" respond( - text=f"Override cleared for *{date.strftime('%A, %b %-d')}* — reverted to weekly schedule." + text=f"Override cleared for *{date.strftime('%A, %b %-d')}* ({label}) — reverted to weekly schedule." ) _refresh_schedule_post(client)