X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=turbot%2Fhunt.py;h=5edd443e59cc00da59aa14308a6b3fd133246a0a;hb=c1f3d14cd6f589030c95dabd9a0d4b3c7582b489;hp=c2e59e2be937c4577e7696f80b01fce51356e05d;hpb=29c36d3057c5602c5a4b6fb0e48f454db01ddd9d;p=turbot diff --git a/turbot/hunt.py b/turbot/hunt.py index c2e59e2..5edd443 100644 --- a/turbot/hunt.py +++ b/turbot/hunt.py @@ -1,4 +1,6 @@ -from turbot.blocks import section_block, text_block, divider_block +from turbot.blocks import ( + section_block, text_block, divider_block, accessory_block, button_block +) from turbot.round import round_blocks from turbot.puzzle import puzzle_blocks, puzzle_matches_all from turbot.channel import channel_url @@ -39,6 +41,10 @@ def hunt_blocks(turb, hunt, puzzle_status='unsolved', search_terms=[], limit_to_rounds=None): """Generate Slack blocks for a hunt + Returns a list of lists of blocks, (broken up by round so that + the receiver should do one Slack post for each entry in the + outer array. + The hunt argument should be a dictionary as returned from the database. @@ -54,8 +60,9 @@ def hunt_blocks(turb, hunt, puzzle_status='unsolved', search_terms=[], all of these terms will be included in the result. A match will be considered on any of puzzle title, round title, puzzle URL, puzzle - state or solution string. Terms can include - regular expression syntax. + state, puzzle type, tags, or solution + string. Terms can include regular expression + syntax. limit_to_rounds: A list of rounds. If provided only the given rounds will be included in the output. Note: @@ -109,12 +116,21 @@ def hunt_blocks(turb, hunt, puzzle_status='unsolved', search_terms=[], hunt_text += " matching {}".format(" AND ".join(quoted_terms)) blocks = [ - section_block(text_block(hunt_text)), + [ + accessory_block( + section_block(text_block(hunt_text)), + button_block("✏", "edit_hunt", hunt_id) + ) + ] ] + block = blocks[0] if not len(puzzles): - blocks += [ - section_block(text_block("No puzzles found.")) + text = "No puzzles found." + if puzzle_status != 'all': + text += ' (Consider searching for "all" puzzles?)' + block += [ + section_block(text_block(text)) ] # Construct blocks for each round @@ -123,10 +139,12 @@ def hunt_blocks(turb, hunt, puzzle_status='unsolved', search_terms=[], continue # If we're only displaying one round the round header is redundant if limit_to_rounds and len(limit_to_rounds) == 1: - blocks += round_blocks(round, puzzles, omit_header=True) + block += round_blocks(round, puzzles, omit_header=True) else: - blocks += round_blocks(round, puzzles) - blocks.append(divider_block()) + block += round_blocks(round, puzzles) + block.append(divider_block()) + blocks.append([]) + block = blocks[-1] # Also blocks for any puzzles not in any round stray_puzzles = [puzzle for puzzle in puzzles if 'rounds' not in puzzle] @@ -138,10 +156,10 @@ def hunt_blocks(turb, hunt, puzzle_status='unsolved', search_terms=[], # to rounds but specifically the round of unassigned puzzles if len(stray_puzzles) and not limit_to_rounds: stray_text = "*Puzzles with no assigned round*" - blocks.append(section_block(text_block(stray_text))) + block.append(section_block(text_block(stray_text))) for puzzle in stray_puzzles: - blocks += puzzle_blocks(puzzle) + block += puzzle_blocks(puzzle) - blocks.append(divider_block()) + block.append(divider_block()) return blocks