]> git.cworth.org Git - turbot/commitdiff
Use common code for setting the channel topic and description
authorCarl Worth <cworth@cworth.org>
Sat, 8 Jan 2022 09:02:51 +0000 (01:02 -0800)
committerCarl Worth <cworth@cworth.org>
Sat, 8 Jan 2022 09:10:35 +0000 (01:10 -0800)
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
turbot/puzzle.py

index 25c83233865fee9063d91dc205e23f8fc761440a..671eccb95c7303c9762c5b4d7069c624ec96a65b 100644 (file)
@@ -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.
index a6d3ffd809b2af59e44f564e1ae78092588d7f4c..b9aa1ec40bcc44acaa2238123a2f052d04c92184 100644 (file)
@@ -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)