]> git.cworth.org Git - turbot/blobdiff - turbot/interaction.py
Add find_puzzle_for_puzzle_id
[turbot] / turbot / interaction.py
index f784a0266203862711d4c20f16656195f712a09f..a3fe496c81adb8dc1ceca981c04d3d16a911058e 100644 (file)
@@ -572,7 +572,8 @@ def new_hunt_submission(turb, payload, metadata):
                 {'AttributeName': 'SK', 'AttributeType': 'S'},
                 {'AttributeName': 'channel_id', 'AttributeType': 'S'},
                 {'AttributeName': 'is_hunt', 'AttributeType': 'S'},
-                {'AttributeName': 'url', 'AttributeType': 'S'}
+                {'AttributeName': 'url', 'AttributeType': 'S'},
+                {'AttributeName': 'puzzle_id', 'AttributeType': 'S'}
             ],
             ProvisionedThroughput={
                 'ReadCapacityUnits': 5,
@@ -616,6 +617,16 @@ def new_hunt_submission(turb, payload, metadata):
                     'Projection': {
                         'ProjectionType': 'ALL'
                     }
+                },
+                {
+                    'IndexName': 'puzzle_id_index',
+                    'KeySchema': [
+                        {'AttributeName': 'hunt_id', 'KeyType': 'HASH'},
+                        {'AttributeName': 'puzzle_id', 'KeyType': 'RANGE'},
+                    ],
+                    'Projection': {
+                        'ProjectionType': 'ALL'
+                    }
                 }
             ]
         )
@@ -1335,9 +1346,9 @@ def help_command(turb, body, args):
     Displays help on how to use Turbot.
     """
 
-    channel_name = body['channel_name'][0]
     channel_id = body['channel_id'][0]
     response_url = body['response_url'][0]
+    user_id = body['user_id'][0]
 
     # Process "/help me" first. It calls out to have_you_tried rather
     # than going through our help system.
@@ -1345,17 +1356,22 @@ def help_command(turb, body, args):
     # Also, it reports in the current channel, (where all other help
     # output is reported privately to the invoking user).
     if args == "me":
-        to_try = have_you_tried()
-
-        # If this is a direct message then there's not a usable channel_id
-        # and we have to use the response_url instead
-        if channel_name == "directmessage":
+        to_try = "In response to <@{}> asking `/help me`:\n\n{}\n".format(
+            user_id, have_you_tried())
+
+        # We'll try first to reply directly to the channel (for the benefit
+        # of anyone else in the same channel that might be stuck too.
+        #
+        # But if this doesn't work, (direct message or private channel),
+        # then we can instead reply with an ephemeral message by using
+        # the response_url.
+        try:
+            turb.slack_client.chat_postMessage(
+                channel=channel_id, text=to_try)
+        except SlackApiError:
             requests.post(response_url,
                           json = {"text": to_try},
                           headers = {"Content-type": "application/json"})
-        else:
-            turb.slack_client.chat_postMessage(
-                channel=channel_id, text=to_try)
         return lambda_ok
 
     help_string = turbot_help(args)