X-Git-Url: https://git.cworth.org/git?p=turbot;a=blobdiff_plain;f=turbot%2Finteraction.py;h=3254f24587508953f7bf19d32905b5ea194dd68d;hp=0b2f30eec9324c9ba8689a266d9f3ad683e2fd78;hb=915b439e07c5b4aaef754f5f41360d862149a3fc;hpb=65d277e6962108c5fdfe30cae4d66e4db29ce150 diff --git a/turbot/interaction.py b/turbot/interaction.py index 0b2f30e..3254f24 100644 --- a/turbot/interaction.py +++ b/turbot/interaction.py @@ -229,13 +229,18 @@ def edit_puzzle_submission(turb, payload, metadata): } ) + # Get old puzzle from the database (to determine what's changed) + old_puzzle = find_puzzle_for_puzzle_id(turb, + puzzle['hunt_id'], + puzzle['puzzle_id']) + # Update the puzzle in the database turb.table.put_item(Item=puzzle) # We need to set the channel topic if any of puzzle name, url, # state, status, or solution, has changed. Let's just do that # unconditionally here. - puzzle_update_channel_and_sheet(turb, puzzle) + puzzle_update_channel_and_sheet(turb, puzzle, old_puzzle=old_puzzle) return lambda_ok @@ -682,17 +687,20 @@ def state(turb, body, args): channel_id = body['channel_id'][0] - puzzle = puzzle_for_channel(turb, channel_id) + old_puzzle = puzzle_for_channel(turb, channel_id) - if not puzzle: + if not old_puzzle: return bot_reply( "Sorry, the /state command only works in a puzzle channel") - # Set the state field in the database + # Make a copy of the puzzle object + puzzle = old_puzzle.copy() + + # Update the puzzle in the database puzzle['state'] = args turb.table.put_item(Item=puzzle) - puzzle_update_channel_and_sheet(turb, puzzle) + puzzle_update_channel_and_sheet(turb, puzzle, old_puzzle=old_puzzle) return lambda_ok @@ -706,15 +714,18 @@ def solved(turb, body, args): channel_id = body['channel_id'][0] user_name = body['user_name'][0] - puzzle = puzzle_for_channel(turb, channel_id) + old_puzzle = puzzle_for_channel(turb, channel_id) - if not puzzle: + if not old_puzzle: return bot_reply("Sorry, this is not a puzzle channel.") if not args: return bot_reply( "Error, no solution provided. Usage: `/solved SOLUTION HERE`") + # Make a copy of the puzzle object + puzzle = old_puzzle.copy() + # Set the status and solution fields in the database puzzle['status'] = 'solved' puzzle['solution'].append(args) @@ -737,7 +748,7 @@ def solved(turb, body, args): ) # And update the puzzle's description - puzzle_update_channel_and_sheet(turb, puzzle) + puzzle_update_channel_and_sheet(turb, puzzle, old_puzzle=old_puzzle) return lambda_ok