X-Git-Url: https://git.cworth.org/git?p=turbot;a=blobdiff_plain;f=turbot%2Fpuzzle.py;h=f2816acb5b42b5903c3587060bc03680e706d670;hp=037dd5e01b3599dc7cca0b329d18777c2c532eaf;hb=ee51d944119832b3272bf0bbd330066d6dd5d658;hpb=e62996312b2f0372a0ac6683affbddf1275fda4c diff --git a/turbot/puzzle.py b/turbot/puzzle.py index 037dd5e..f2816ac 100644 --- a/turbot/puzzle.py +++ b/turbot/puzzle.py @@ -62,6 +62,7 @@ def puzzle_blocks(puzzle, include_rounds=False): url = puzzle.get('url', None) sheet_url = puzzle.get('sheet_url', None) state = puzzle.get('state', None) + tags = puzzle.get('tags', []) status_emoji = '' solution_str = '' @@ -85,7 +86,15 @@ def puzzle_blocks(puzzle, include_rounds=False): state_str = '' if state: - state_str = "\n{}".format(state) + state_str = " State: {}".format(state) + + tags_str = '' + if tags: + tags_str = " Tags: "+" ".join(["`{}`".format(tag) for tag in tags]) + + extra_str = '' + if state_str or tags_str: + extra_str = "\n{}{}".format(tags_str, state_str) rounds_str = '' if include_rounds and 'rounds' in puzzle: @@ -95,12 +104,13 @@ def puzzle_blocks(puzzle, include_rounds=False): ", ".join(rounds) ) - puzzle_text = "{}{} {}<{}|{}> ({}){}{}".format( - status_emoji, solution_str, + puzzle_text = "{} {}<{}|{}> {} ({}){}{}".format( + status_emoji, meta_str, channel_url(channel_id), name, + solution_str, ', '.join(links), rounds_str, - state_str + extra_str ) # Combining hunt ID and puzzle ID together here is safe because @@ -119,8 +129,9 @@ def puzzle_matches_one(puzzle, pattern): """Returns True if this puzzle matches the given string (regexp) A match will be considered on any of puzzle title, round title, - puzzle URL, puzzle state, or solution string. The string can - include regular expression syntax. Matching is case insensitive. + puzzle URL, puzzle state, puzzle type, tags, or solution + string. The string can include regular expression syntax. Matching + is case insensitive. """ p = re.compile('.*'+pattern+'.*', re.IGNORECASE) @@ -141,21 +152,31 @@ def puzzle_matches_one(puzzle, pattern): if p.match(puzzle['state']): return True + if 'type' in puzzle: + if p.match(puzzle['type']): + return True + if 'solution' in puzzle: for solution in puzzle['solution']: if p.match(solution): return True + if 'tags' in puzzle: + for tag in puzzle['tags']: + if p.match(tag): + return True + return False def puzzle_matches_all(puzzle, patterns): """Returns True if this puzzle matches all of the given list of patterns A match will be considered on any of puzzle title, round title, - puzzle URL, puzzle state, or solution string. All patterns must - match the puzzle somewhere, (that is, there is an implicit logical - AND between patterns). Patterns can include regular expression - syntax. Matching is case insensitive. + puzzle URL, puzzle state, puzzle types, tags, or solution + string. All patterns must match the puzzle somewhere, (that is, + there is an implicit logical AND between patterns). Patterns can + include regular expression syntax. Matching is case insensitive. + """ for pattern in patterns: @@ -208,6 +229,10 @@ def puzzle_channel_topic(puzzle): if len(links): topic += "({})".format(', '.join(links)) + tags = puzzle.get('tags', []) + if tags: + topic += " {}".format(" ".join(["`{}`".format(t) for t in tags])) + state = puzzle.get('state', None) if state: topic += " {}".format(state) @@ -265,7 +290,7 @@ def puzzle_update_channel_and_sheet(turb, puzzle, old_puzzle=None): old_sheet_name = puzzle_sheet_name(old_puzzle) if sheet_name != old_sheet_name: - turbot.sheets.renameSheet(turb, puzzle['sheet_url'], sheet_name) + turbot.sheets.rename_spreadsheet(turb, puzzle['sheet_url'], sheet_name) # Compute the Slack channel name and set it if it has changed channel_name = puzzle_channel_name(puzzle) @@ -279,3 +304,12 @@ def puzzle_update_channel_and_sheet(turb, puzzle, old_puzzle=None): channel=channel_id, name=channel_name ) + +# A copy deep enough to work for puzzle_update_channel_and_sheet above +def puzzle_copy(old_puzzle): + new_puzzle = old_puzzle.copy() + + if 'tags' in old_puzzle: + new_puzzle['tags'] = old_puzzle['tags'].copy() + + return new_puzzle