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.
Round management
----------------
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.
• Select round fields by default based on the round of the puzzle for
the channel in which `/puzzle` is invoked.
return section_block(text_block(puzzle_text))
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']
name = hunt['name']
hunt_id = hunt['hunt_id']
channel_id = hunt['channel_id']
)
puzzles = response['Items']
)
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)
hunt_text = "*<{}|{}>*".format(channel_url(channel_id), name)
section_block(text_block(hunt_text)),
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)
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
def home(turb, user_id):
"""Returns a view to be published as the turbot home tab for user_id
continue
if user_id in slack_channel_members(turb.slack_client,
hunt['channel_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)
- 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 = [
if len(my_hunt_blocks):
my_hunt_blocks = [