From f0f7704495e3a7340cf09e561ecebd885875674f Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Fri, 1 Jan 2021 22:29:07 -0800 Subject: [PATCH] Add display of rounds in the Turbot home view Grouping puzzles that belong to each round (and also a list of puzzles that belong to no round). This drops another item from the TODO list. --- TODO | 2 -- turbot/events.py | 57 +++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 47 insertions(+), 12 deletions(-) diff --git a/TODO b/TODO index ca8ec0e..8b1d822 100644 --- a/TODO +++ b/TODO @@ -6,8 +6,6 @@ Recently-proposed ideas (not yet prioritized) Round management ---------------- -• Group the puzzles in the Turbot home view by round - • Select round fields by default based on the round of the puzzle for the channel in which `/puzzle` is invoked. diff --git a/turbot/events.py b/turbot/events.py index ccddc97..2f096b2 100644 --- a/turbot/events.py +++ b/turbot/events.py @@ -53,7 +53,24 @@ def puzzle_block(puzzle): return section_block(text_block(puzzle_text)) -def hunt_details_block(turb, hunt): +def round_blocks(round, puzzles): + + round_text = "*Round: {}*".format(round) + + blocks = [ + section_block(text_block(round_text)), + ] + + for puzzle in puzzles: + if 'rounds' not in puzzle: + continue + if round not in puzzle['rounds']: + continue + blocks.append(puzzle_block(puzzle)) + + return blocks + +def hunt_details_blocks(turb, hunt): name = hunt['name'] hunt_id = hunt['hunt_id'] channel_id = hunt['channel_id'] @@ -66,24 +83,44 @@ def hunt_details_block(turb, hunt): ) puzzles = response['Items'] + # Compute the set of rounds across all puzzles + rounds = set() + for puzzle in puzzles: + if 'rounds' not in puzzle: + continue + for round in puzzle['rounds']: + rounds.add(round) + hunt_text = "*<{}|{}>*".format(channel_url(channel_id), name) - return [ + blocks = [ section_block(text_block(hunt_text)), - *[puzzle_block(puzzle) for puzzle in puzzles], - divider_block() ] -def available_hunt_block(turb, hunt): + # Construct blocks for each round + for round in rounds: + blocks += round_blocks(round, puzzles) + + # Also blocks for any puzzles not in any round + stray_puzzles = [puzzle for puzzle in puzzles if 'rounds' not in puzzle] + if len(stray_puzzles): + stray_text = "*Puzzles with no asigned round*" + blocks.append(section_block(text_block(stray_text))) + for puzzle in stray_puzzles: + blocks.append(puzzle_block(puzzle)) + + blocks.append(divider_block()) + + return blocks + +def hunt_link_block(turb, hunt): name = hunt['name'] channel_id = hunt['channel_id'] hunt_link = "*<{}|{}>*".format(channel_url(channel_id), name) - return [ - section_block(text_block(hunt_link)), - ] + return section_block(text_block(hunt_link)), def home(turb, user_id): """Returns a view to be published as the turbot home tab for user_id @@ -107,9 +144,9 @@ def home(turb, user_id): continue if user_id in slack_channel_members(turb.slack_client, hunt['channel_id']): - my_hunt_blocks += hunt_details_block(turb, hunt) + my_hunt_blocks += hunt_details_blocks(turb, hunt) else: - available_hunt_blocks += available_hunt_block(turb, hunt) + available_hunt_blocks.append(hunt_link_block(turb, hunt)) if len(my_hunt_blocks): my_hunt_blocks = [ -- 2.43.0