X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=turbot%2Finteraction.py;h=d7e8da6ff905bd086046ce499e82e47be319192a;hb=b7be5feac00a7e3ff5ceadbf7c5ab1bc5e3259d8;hp=86f438c372b5358c8641d3497809d4d1b5b6ba3f;hpb=a9f4ac01df4aca618a8e059f4eddcc4f80eb3a1f;p=turbot diff --git a/turbot/interaction.py b/turbot/interaction.py index 86f438c..d7e8da6 100644 --- a/turbot/interaction.py +++ b/turbot/interaction.py @@ -187,7 +187,7 @@ def edit_puzzle(turb, puzzle, trigger_id): solved = True solution_str = None - solution_list = puzzle.get("solution", ()) + solution_list = puzzle.get("solution", []) if solution_list: solution_str = ", ".join(solution_list) @@ -280,7 +280,7 @@ def edit_puzzle_submission(turb, payload, metadata): puzzle['status'] = 'solved' else: puzzle['status'] = 'unsolved' - puzzle['solution'] = () + puzzle['solution'] = [] solution = state['solution']['solution']['value'] if solution: # Construct a list from a set to avoid any duplicates @@ -321,7 +321,7 @@ def edit_puzzle_submission(turb, payload, metadata): puzzle['SK']) # If we are changing puzzle type (meta -> plain or plain -> meta) - # the the sort key has to change, so compute the new one and delete + # then the sort key has to change, so compute the new one and delete # the old item from the database. # # XXX: We should really be using a transaction here to combine the @@ -1045,7 +1045,7 @@ def new_puzzle_submission(turb, payload, metadata): if rounds: puzzle['rounds'] = rounds - puzzle['solution'] = () + puzzle['solution'] = [] puzzle['status'] = 'unsolved' # Create a channel for the puzzle @@ -1196,7 +1196,7 @@ def solved(turb, body, args): # Report the solution to the puzzle's channel slack_send_message( turb.slack_client, channel_id, - "Puzzle mark solved by <@{}>: `{}`".format(user_id, args)) + "Puzzle marked solved by <@{}>: `{}`".format(user_id, args)) # Also report the solution to the hunt channel hunt = find_hunt_for_hunt_id(turb, puzzle['hunt_id']) @@ -1214,6 +1214,50 @@ def solved(turb, body, args): commands["/solved"] = solved +def delete(turb, body, args): + """Implementation of the /delete command + + The argument to this command is the ID of a hunt. + + The command will report an error if the specified hunt is active. + + If the hunt is inactive, this command will archive all channels + from the hunt. + """ + + if not args: + return bot_reply("Error, no hunt provided. Usage: `/delete HUNT_ID`") + + hunt_id = args + hunt = find_hunt_for_hunt_id(turb, hunt_id) + + if not hunt: + return bot_reply("Error, no hunt named \"{}\" exists.".format(hunt_id)) + + if hunt['active']: + return bot_reply( + "Error, refusing to delete active hunt \"{}\".".format(hunt_id) + ) + + if hunt['hunt_id'] != hunt_id: + return bot_reply( + "Error, expected hunt ID of \"{}\" but found \"{}\".".format( + hunt_id, hunt['hunt_id'] + ) + ) + + puzzles = hunt_puzzles_for_hunt_id(turb, hunt_id) + + for puzzle in puzzles: + channel_id = puzzle['channel_id'] + turb.slack_client.conversations_archive(channel=channel_id) + + turb.slack_client.conversations_archive(channel=hunt['channel_id']) + + return lambda_ok + +commands["/delete"] = delete + def hunt(turb, body, args): """Implementation of the /hunt command