From 8e9a333cdc4118878bdf6ece9ee7456644fd1342 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sat, 8 Jan 2022 01:02:51 -0800 Subject: [PATCH] Use common code for setting the channel topic and description Previously, the initial setting of the topic and description was with custom code, separate from the code that set the topic later due to puzzle edits. Because of this code duplication, the formatting of these two sets of code had drifted already. Making the initial setting of topic use the existing puzzle_channel_topic() function eliminates the code duplication. Similarly, we give the channel description the same treatment that we were already giving the channel topic. That is, we update it whenever a puzzle edit would cause it to change. While we're doing that, and since the puzzle description doesn't have the same short limit as the channel topic, we expand it to be longer, (previously it was the same text as the initial channel topic). So the new puzzle_channel_description constructs a more verbose description which now includes the puzzle title (which the channel topic no longer includes after the previous commit), and also some helpful message about links and commands. --- turbot/events.py | 25 ++++++++++--------------- turbot/puzzle.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 15 deletions(-) diff --git a/turbot/events.py b/turbot/events.py index 25c8323..671eccb 100644 --- a/turbot/events.py +++ b/turbot/events.py @@ -2,6 +2,9 @@ from turbot.blocks import ( section_block, text_block, button_block, actions_block, divider_block ) from turbot.hunt import find_hunt_for_hunt_id +from turbot.puzzle import ( + puzzle_channel_topic, puzzle_channel_description, +) from turbot.sheets import ( sheets_create, sheets_create_for_puzzle, sheets_create_folder ) @@ -159,25 +162,17 @@ def hunt_channel_created(turb, channel_name, channel_id): return lambda_success -def set_channel_description(turb, puzzle): - channel_id = puzzle['channel_id'] - description = puzzle['name'] - url = puzzle.get('url', None) - sheet_url = puzzle.get('sheet_url', None) +def set_channel_topic_and_description(turb, puzzle): - links = [] - if url: - links.append("<{}|Puzzle>".format(url)) - if sheet_url: - links.append("<{}|Sheet>".format(sheet_url)) + channel_id = puzzle['channel_id'] - if len(links): - description += "({})".format(', '.join(links)) + topic = puzzle_channel_topic(puzzle) + description = puzzle_channel_description(puzzle) turb.slack_client.conversations_setPurpose(channel=channel_id, purpose=description) turb.slack_client.conversations_setTopic(channel=channel_id, - topic=description) + topic=topic) def puzzle_channel_created(turb, channel_name, channel_id): """Creates sheet and invites user for a newly-created puzzle channel""" @@ -219,8 +214,8 @@ def puzzle_channel_created(turb, channel_name, channel_id): puzzle['sheet_url'] = sheet['url'] turb.table.put_item(Item=puzzle) - # Get the new sheet_url into the channel description - set_channel_description(turb, puzzle) + # Get the new sheet_url into the channel topic and description + set_channel_topic_and_description(turb, puzzle) # And finally, give a welcome message with some documentation # on how to update the state of the puzzle in the database. diff --git a/turbot/puzzle.py b/turbot/puzzle.py index a6d3ffd..b9aa1ec 100644 --- a/turbot/puzzle.py +++ b/turbot/puzzle.py @@ -272,6 +272,42 @@ def puzzle_channel_topic(puzzle): return topic +def puzzle_channel_description(puzzle): + """Compute the channel description for a puzzle""" + + url = puzzle.get('url', None) + sheet_url = puzzle.get('sheet_url', None) + tags = puzzle.get('tags', []) + state = puzzle.get('state', None) + + description = ( + "Discussion to solve the puzzle \"{}\".\n".format(puzzle['name']) + ) + + if url: + description += "See the <{}|Original puzzle>\n".format(url) + + if sheet_url: + description += ( + "Actual solving work takes place in the " + + "<{}|shared spreadsheet>\n".format(sheet_url) + ) + + if tags: + description += "This puzzle has the following tags: {}\n".format( + " ".join(["`{}`".format(t) for t in tags])) + + if state: + description += "This puzzle has a state of: {}\n".format(state) + + description += ( + "You can see a summary of this information at any point " + + "by issuing the `/puzzle` command and you can edit any of " + + "this information by issuing the `/edit` command" + ) + + return description + def puzzle_channel_name(puzzle): """Compute the channel name for a puzzle""" @@ -325,6 +361,17 @@ def puzzle_update_channel_and_sheet(turb, puzzle, old_puzzle=None): turb.slack_client.conversations_setTopic(channel=channel_id, topic=channel_topic) + # Compute the channel description and set it if it has changed + channel_description = puzzle_channel_description(puzzle) + + old_channel_description = None + if old_puzzle: + old_channel_description = puzzle_channel_description(old_puzzle) + + if channel_description != old_channel_description: + turb.slack_client.conversations_setPurpose(channel=channel_id, + purpose=channel_description) + # Compute the sheet name and set it if it has changed sheet_name = puzzle_sheet_name(puzzle) -- 2.43.0