]> git.cworth.org Git - turbot/commitdiff
Fix `/help me` to not give a dispatch_failed error in a private channel
authorCarl Worth <cworth@cworth.org>
Mon, 11 Jan 2021 21:56:20 +0000 (13:56 -0800)
committerCarl Worth <cworth@cworth.org>
Mon, 11 Jan 2021 22:04:42 +0000 (14:04 -0800)
Since Turbot can't send a message to a private channel, instead we
just reply as an ephemeral message to the user.

turbot/interaction.py

index 8cba346a2122a96c1e2bd9740f78977fd597db7c..546e59a70a25728b1dcdee92d60f6d5730687fda 100644 (file)
@@ -1335,7 +1335,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 +1348,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)