]> git.cworth.org Git - turbot/commitdiff
Make /edit command smart to auto-edit either puzzle or hunt
authorCarl Worth <cworth@cworth.org>
Mon, 11 Jan 2021 16:25:20 +0000 (08:25 -0800)
committerCarl Worth <cworth@cworth.org>
Mon, 11 Jan 2021 16:58:18 +0000 (08:58 -0800)
Depending on which kind of channel it is run in. It's still possible to
explicitly run `/edit puzzle` or `/edit hunt` instead.

turbot/interaction.py

index 05bbbb88d3c09f5eade01318604df40d330484e1..392574d89f1d8c9405dd18fee541a8815aea720f 100644 (file)
@@ -86,16 +86,42 @@ def edit(turb, body, args):
 
     """Implementation of the `/edit` command
 
-    This can be used as `/edit hunt` or `/edit puzzle`, (and if issued as
-    just `/edit` will default to editing the current puzzle.
+    This can be used as `/edit` (with no arguments) in either a hunt
+    or a puzzle channel to edit that hunt or puzzle. It can also be
+    called explicitly as `/edit hunt` to edit a hunt even from a
+    puzzle channel.
 
-    These are simply shortcuts for `/hunt edit` and `/puzzle edit`.
+    In any case, the operation is identical to `/hunt edit` or
+    `/puzzle edit`.
     """
 
+    # If we have an explicit argument, do what it says to do
     if args == "hunt":
         return edit_hunt_command(turb, body)
 
-    return edit_puzzle_command(turb, body)
+    if args == "puzzle":
+        return edit_puzzle_command(turb, body)
+
+    # Any other argument string is an error
+    if args:
+        return bot_reply("Error: Unexpected argument: {}\n".format(args) +
+                         "Usage: `/edit puzzle`, `/edit hunt`, or " +
+                         "`/edit` (to choose based on channel)"
+                         )
+
+    # No explicit argument, so select what to edit based on the current channel
+    channel_id = body['channel_id'][0]
+    trigger_id = body['trigger_id'][0]
+
+    puzzle = puzzle_for_channel(turb, channel_id)
+    if puzzle:
+        return edit_puzzle(turb, puzzle, trigger_id)
+
+    hunt = hunt_for_channel(turb, channel_id)
+    if hunt:
+        return edit_hunt(turb, hunt, trigger_id)
+
+    return bot_reply("Sorry, `/edit` only works in a hunt or puzzle channel.")
 
 commands["/edit"] = edit