X-Git-Url: https://git.cworth.org/git?p=turbot;a=blobdiff_plain;f=turbot%2Finteraction.py;fp=turbot%2Finteraction.py;h=c84afbc40d77dbd8d05c877579ccd2b402076585;hp=d7e8da6ff905bd086046ce499e82e47be319192a;hb=84463950bbc2b4b10a2cc84d82285336254d4282;hpb=b7be5feac00a7e3ff5ceadbf7c5ab1bc5e3259d8 diff --git a/turbot/interaction.py b/turbot/interaction.py index d7e8da6..c84afbc 100644 --- a/turbot/interaction.py +++ b/turbot/interaction.py @@ -216,6 +216,10 @@ def edit_puzzle(turb, puzzle, trigger_id): "New round(s) this puzzle belongs to " + "(comma separated)", optional=True), + input_block("Tag(s)", "tags", + "Tags for this puzzle (comma separated)", + initial_value=", ".join(puzzle.get("tags", [])), + optional=True), input_block("State", "state", "State of this puzzle (partial progress, next steps)", initial_value=puzzle.get("state", None), @@ -273,6 +277,7 @@ def edit_puzzle_submission(turb, payload, metadata): if rounds: puzzle['rounds'] = rounds new_rounds = state['new_rounds']['new_rounds']['value'] + tags = state['tags']['tags']['value'] puzzle_state = state['state']['state']['value'] if puzzle_state: puzzle['state'] = puzzle_state @@ -315,6 +320,24 @@ def edit_puzzle_submission(turb, payload, metadata): } ) + # Process any tags + puzzle['tags'] = [] + if tags: + for tag in tags.split(','): + # Drop any leading/trailing spaces from the tag + tag = tag.strip().upper() + # Ignore any empty string + if not len(tag): + continue + # Reject a tag that is not alphabetic or underscore A-Z_ + if not re.match(r'^[A-Z0-9_]*$', tag): + return submission_error( + "tags", + "Error: Tags can only contain letters, numbers, " + + "and the underscore character." + ) + puzzle['tags'].append(tag) + # Get old puzzle from the database (to determine what's changed) old_puzzle = find_puzzle_for_sort_key(turb, puzzle['hunt_id'], @@ -965,7 +988,10 @@ def new_puzzle(turb, body): input_block("New round(s)", "new_rounds", "New round(s) this puzzle belongs to " + "(comma separated)", - optional=True) + optional=True), + input_block("Tag(s)", "tags", + "Tags for this puzzle (comma separated)", + optional=True), ] } @@ -1007,6 +1033,7 @@ def new_puzzle_submission(turb, payload, metadata): else: rounds = [] new_rounds = state['new_rounds']['new_rounds']['value'] + tags = state['tags']['tags']['value'] # Create a Slack-channel-safe puzzle_id puzzle['puzzle_id'] = puzzle_id_from_name(puzzle['name']) @@ -1042,6 +1069,24 @@ def new_puzzle_submission(turb, payload, metadata): } ) + # Process any tags + puzzle['tags'] = [] + if tags: + for tag in tags.split(','): + # Drop any leading/trailing spaces from the tag + tag = tag.strip().upper() + # Ignore any empty string + if not len(tag): + continue + # Reject a tag that is not alphabetic or underscore A-Z_ + if not re.match(r'^[A-Z0-9_]*$', tag): + return submission_error( + "tags", + "Error: Tags can only contain letters, numbers, " + + "and the underscore character." + ) + puzzle['tags'].append(tag) + if rounds: puzzle['rounds'] = rounds