diff --git a/zulip/schedulebot.py b/zulip/schedulebot.py index 129f9b6..1a2624e 100644 --- a/zulip/schedulebot.py +++ b/zulip/schedulebot.py @@ -68,18 +68,18 @@ def get_display_name(client, user_id): return client.request("GET", "users", user_id)["user"]["full_name"] -def update_groups(client, group_ids, schedule, hour): +def update_groups(client, group_ids, schedule, hour, last): logging.info("Setting groups for hour {}".format(hour)) members = get_membership(client) def run_group(item): group_name, group_id = item - new_members = determine_members(schedule, group_name, hour) + new_members = set() if hour == last else determine_members(schedule, group_name, hour) assert group_id in members, "group {} doesn't exist".format(group_id) update_members(client, group_id, members[group_id], new_members) gevent.pool.Group().map(run_group, group_ids.items()) -def post_schedule(client, send_client, start_time, schedule, stream, hour, no_mentions): +def post_schedule(client, send_client, start_time, schedule, stream, hour, no_mentions, last, omega): going_offline = [] coming_online = [] display_names = {} @@ -88,6 +88,8 @@ def post_schedule(client, send_client, start_time, schedule, stream, hour, no_me for user_id, (_, hours) in schedule.items(): prev = get_role_at_hour(hours, hour - 1) now = get_role_at_hour(hours, hour) + if hour == last: + now = "" if now != "" or prev != "": found_any = True if now == "Supervisor": @@ -120,6 +122,13 @@ def post_schedule(client, send_client, start_time, schedule, stream, hour, no_me shift = ["zeta", "dawn-guard", "alpha-flight", "night-watch"][shift] shift_hour = hour_pst % 6 + 1 + if omega >= 0 and hour >= omega: + shift = "omega" + shift_hour = hour - omega + 1 + if hour == last: + shift = "verified" + shift_hour = "7.99" + def render_name(user_id, mention=True): if no_mentions: mention = False @@ -165,6 +174,10 @@ def post_schedule(client, send_client, start_time, schedule, stream, hour, no_me "", "---", ] + if hour == last: + lines += [ + "**Well done everyone, and thank you for all your hard work :heart:**" + ] if stream == "DEBUG": print("\n".join(lines)) @@ -202,7 +215,7 @@ def parse_schedule(user_ids, schedule_file): return schedule -def main(conf_file, hour=-1, no_groups=False, stream="General", no_mentions=False, no_initial=False): +def main(conf_file, hour=-1, no_groups=False, stream="General", no_mentions=False, no_initial=False, omega=-1, last=-1): """ config: url: the base url of the instance @@ -228,17 +241,18 @@ def main(conf_file, hour=-1, no_groups=False, stream="General", no_mentions=Fals schedule = parse_schedule(config["members"], config["schedule"]) if hour >= 0: if not no_groups: - update_groups(client, group_ids, schedule, hour) + update_groups(client, group_ids, schedule, hour, last) if stream: - post_schedule(client, send_client, start_time, schedule, stream, hour, no_mentions) + post_schedule(client, send_client, start_time, schedule, stream, hour, no_mentions, last, omega) return while True: hour = int((time.time() - start_time) / 3600) + kind = 'normal' if not no_initial: if not no_groups: - update_groups(client, group_ids, schedule, hour) + update_groups(client, group_ids, schedule, hour, last) if stream: - post_schedule(client, send_client, start_time, schedule, stream, hour, no_mentions) + post_schedule(client, send_client, start_time, schedule, stream, hour, no_mentions, last, omega) no_initial = False next_hour = start_time + 3600 * (hour + 1) remaining = next_hour - time.time()