X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;ds=sidebyside;f=turbot%2Fpuzzle.py;h=f0456c6cba4c29d05cf4dcc23ed96953fea5c940;hb=915b439e07c5b4aaef754f5f41360d862149a3fc;hp=1a36bfb9be433460d850672733c4bfed92d6728e;hpb=65d277e6962108c5fdfe30cae4d66e4db29ce150;p=turbot diff --git a/turbot/puzzle.py b/turbot/puzzle.py index 1a36bfb..f0456c6 100644 --- a/turbot/puzzle.py +++ b/turbot/puzzle.py @@ -153,51 +153,38 @@ def puzzle_matches_all(puzzle, patterns): def puzzle_id_from_name(name): return re.sub(r'[^a-zA-Z0-9_]', '', name).lower() -def puzzle_update_channel_and_sheet(turb, puzzle): - - channel_id = puzzle['channel_id'] - name = puzzle['name'] - url = puzzle.get('url', None) - sheet_url = puzzle.get('sheet_url', None) - state = puzzle.get('state', None) - status = puzzle['status'] +def puzzle_channel_topic(puzzle): + """Compute the channel topic for a puzzle""" topic = '' - if status == 'solved': + if puzzle['status'] == 'solved': topic += "SOLVED: `{}` ".format('`, `'.join(puzzle['solution'])) - topic += name + topic += puzzle['name'] links = [] + + url = puzzle.get('url', None) if url: links.append("<{}|Puzzle>".format(url)) + + sheet_url = puzzle.get('sheet_url', None) if sheet_url: links.append("<{}|Sheet>".format(sheet_url)) if len(links): topic += "({})".format(', '.join(links)) + state = puzzle.get('state', None) if state: topic += " {}".format(state) - # Slack only allows 250 characters for a topic - if len(topic) > 250: - topic = topic[:247] + "..." - - turb.slack_client.conversations_setTopic(channel=channel_id, - topic=topic) + return topic - # Rename the sheet to include indication of solved/solution status - sheet_name = puzzle['name'] - if puzzle['status'] == 'solved': - sheet_name += " - Solved {}".format(", ".join(puzzle['solution'])) +def puzzle_channel_name(puzzle): + """Compute the channel name for a puzzle""" - turbot.sheets.renameSheet(turb, puzzle['sheet_url'], sheet_name) - - # Finally, rename the Slack channel to reflect the latest name and - # the solved status - # # Note: We don't use puzzle['hunt_id'] here because we're keeping # that as a persistent identifier in the database. Instead we # create a new ID-like identifier from the current name. @@ -205,10 +192,58 @@ def puzzle_update_channel_and_sheet(turb, puzzle): puzzle['hunt_id'], puzzle_id_from_name(puzzle['name']) ) + if puzzle['status'] == 'solved': channel_name += "-solved" - turb.slack_client.conversations_rename( - channel=puzzle['channel_id'], - name=channel_name - ) + return channel_name + +def puzzle_sheet_name(puzzle): + """Compute the sheet name for a puzzle""" + + sheet_name = puzzle['name'] + if puzzle['status'] == 'solved': + sheet_name += " - Solved {}".format(", ".join(puzzle['solution'])) + + return sheet_name + +def puzzle_update_channel_and_sheet(turb, puzzle, old_puzzle=None): + + channel_id = puzzle['channel_id'] + + # Compute the channel topic and set it if it has changed + channel_topic = puzzle_channel_topic(puzzle) + + old_channel_topic = None + if old_puzzle: + old_channel_topic = puzzle_channel_topic(old_puzzle) + + if channel_topic != old_channel_topic: + # Slack only allows 250 characters for a topic + if len(channel_topic) > 250: + channel_topic = channel_topic[:247] + "..." + turb.slack_client.conversations_setTopic(channel=channel_id, + topic=channel_topic) + + # Compute the sheet name and set it if it has changed + sheet_name = puzzle_sheet_name(puzzle) + + old_sheet_name = None + if old_puzzle: + old_sheet_name = puzzle_sheet_name(old_puzzle) + + if sheet_name != old_sheet_name: + turbot.sheets.renameSheet(turb, puzzle['sheet_url'], sheet_name) + + # Compute the Slack channel name and set it if it has changed + channel_name = puzzle_channel_name(puzzle) + + old_channel_name = None + if old_puzzle: + old_channel_name = puzzle_channel_name(old_puzzle) + + if channel_name != old_channel_name: + turb.slack_client.conversations_rename( + channel=channel_id, + name=channel_name + )