From 4a390d5c89977ae8ff8baae26001d6f047e50903 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Mon, 11 Jan 2021 13:56:20 -0800 Subject: [PATCH] Fix `/help me` to not give a dispatch_failed error in a private channel 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 | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/turbot/interaction.py b/turbot/interaction.py index 8cba346..546e59a 100644 --- a/turbot/interaction.py +++ b/turbot/interaction.py @@ -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) -- 2.43.0