"""Implementation of the `/edit` command
- To edit the puzzle for the current channel.
+ 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.
- This is simply a shortcut for `/puzzle edit`.
+ In any case, the operation is identical to `/hunt edit` or
+ `/puzzle edit`.
"""
- return edit_puzzle_command(turb, body)
+ # If we have an explicit argument, do what it says to do
+ if args == "hunt":
+ return edit_hunt_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
"""Handler for the action of user pressing an edit_puzzle button"""
action_id = payload['actions'][0]['action_id']
- response_url = payload['response_url']
trigger_id = payload['trigger_id']
(hunt_id, sort_key) = action_id.split('-', 1)
puzzle = find_puzzle_for_sort_key(turb, hunt_id, sort_key)
if not puzzle:
- requests.post(response_url,
- json = {"text": "Error: Puzzle not found!"},
- headers = {"Content-type": "application/json"})
return bot_reply("Error: Puzzle not found.")
return edit_puzzle(turb, puzzle, trigger_id)
"""Handler for the action of user pressing an edit_hunt button"""
hunt_id = payload['actions'][0]['action_id']
- response_url = payload['response_url']
trigger_id = payload['trigger_id']
- hunt = find_hunt_for_hunt_id(hunt_id)
+ hunt = find_hunt_for_hunt_id(turb, hunt_id)
if not hunt:
- requests.post(response_url,
- json = {"text": "Error: Hunt not found!"},
- headers = {"Content-type": "application/json"})
return bot_reply("Error: Hunt not found.")
return edit_hunt(turb, hunt, trigger_id)