]> git.cworth.org Git - turbot/blobdiff - turbot/interaction.py
Fix `/help me` to not give a dispatch_failed error in a private channel
[turbot] / turbot / interaction.py
index f784a0266203862711d4c20f16656195f712a09f..546e59a70a25728b1dcdee92d60f6d5730687fda 100644 (file)
@@ -1335,9 +1335,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 +1345,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)