]> git.cworth.org Git - turbot/blobdiff - turbot/interaction.py
Make "/help me" self-documenting
[turbot] / turbot / interaction.py
index 69d4f2505d52a1fd1905b3c36298bfc8b068c466..8cba346a2122a96c1e2bd9740f78977fd597db7c 100644 (file)
@@ -17,6 +17,8 @@ from turbot.puzzle import (
     puzzle_copy
 )
 from turbot.round import round_quoted_puzzles_titles_answers
+from turbot.help import turbot_help
+from turbot.have_you_tried import have_you_tried
 import turbot.rot
 import turbot.sheets
 import turbot.slack
@@ -1326,3 +1328,44 @@ def round(turb, body, args):
     return lambda_ok
 
 commands["/round"] = round
+
+def help_command(turb, body, args):
+    """Implementation of the /help command
+
+    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.
+    #
+    # Also, it reports in the current channel, (where all other help
+    # output is reported privately to the invoking user).
+    if args == "me":
+        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":
+            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)
+
+    requests.post(response_url,
+                  json = {"text": help_string},
+                  headers = {"Content-type": "application/json"})
+
+    return lambda_ok
+
+commands["/help"] = help_command