]> git.cworth.org Git - turbot/blobdiff - turbot/interaction.py
Add find_puzzle_for_puzzle_id
[turbot] / turbot / interaction.py
index 8cba346a2122a96c1e2bd9740f78977fd597db7c..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,7 +1346,6 @@ 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]
@@ -1349,15 +1359,19 @@ def help_command(turb, body, args):
         to_try = "In response to <@{}> asking `/help me`:\n\n{}\n".format(
             user_id, 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":
+        # 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)