From 3cb02ee6f355f536960c8059f8f91c73fe20703f Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Wed, 21 Oct 2020 16:00:20 -0700 Subject: [PATCH] Combine actions.py and commands.py into interaction.py We're about to create a new slash command that fires up a modal, and the response to that modal will be an action. So we want the implementation of that slash command (which creates the view for the modal) to be in the same file as the handler for the action. So we combine these together for now. If this file become unwieldy later, we can re-separate things based on functional groups, (interactions related to hunts, puzzles, word-play utilities, etc.), but always keeping the view creators and the view-submission handlers together for any given view. --- turbot/commands.py | 41 -------------------------- turbot/{actions.py => interaction.py} | 42 ++++++++++++++++++++++++++- turbot_lambda/turbot_lambda.py | 15 +++++----- 3 files changed, 48 insertions(+), 50 deletions(-) delete mode 100644 turbot/commands.py rename turbot/{actions.py => interaction.py} (75%) diff --git a/turbot/commands.py b/turbot/commands.py deleted file mode 100644 index 68f470a..0000000 --- a/turbot/commands.py +++ /dev/null @@ -1,41 +0,0 @@ -import requests -import turbot.rot - -def rot(turb, body, args): - """Implementation of the /rot command - - The args string should be as follows: - - [count|*] String to be rotated - - That is, the first word of the string is an optional number (or - the character '*'). If this is a number it indicates an amount to - rotate each character in the string. If the count is '*' or is not - present, then the string will be rotated through all possible 25 - values. - - The result of the rotation is returned (with Slack formatting) in - the body of the response so that Slack will provide it as a reply - to the user who submitted the slash command.""" - - channel_name = body['channel_name'][0] - response_url = body['response_url'][0] - channel_id = body['channel_id'][0] - - result = turbot.rot.rot(args) - - if (channel_name == "directmessage"): - requests.post(response_url, - json = {"text": result}, - headers = {"Content-type": "application/json"}) - else: - turb.slack_client.chat_postMessage(channel=channel_id, text=result) - - return { - 'statusCode': 200, - 'body': "" - } - -commands = { - "/rot": rot -} diff --git a/turbot/actions.py b/turbot/interaction.py similarity index 75% rename from turbot/actions.py rename to turbot/interaction.py index 00708b0..4606449 100644 --- a/turbot/actions.py +++ b/turbot/interaction.py @@ -2,6 +2,8 @@ from turbot.blocks import input_block import turbot.sheets import json import re +import requests +import turbot.rot def new_hunt(turb, payload): """Handler for the action of user pressing the new_hunt button""" @@ -101,7 +103,6 @@ def new_hunt_submission(turb, payload): } def view_submission(turb, payload): - """Handler for Slack interactive view submission Specifically, those that have a payload type of 'view_submission'""" @@ -116,8 +117,47 @@ def view_submission(turb, payload): 'statusCode': 400 } +def rot(turb, body, args): + """Implementation of the /rot command + + The args string should be as follows: + + [count|*] String to be rotated + + That is, the first word of the string is an optional number (or + the character '*'). If this is a number it indicates an amount to + rotate each character in the string. If the count is '*' or is not + present, then the string will be rotated through all possible 25 + values. + + The result of the rotation is returned (with Slack formatting) in + the body of the response so that Slack will provide it as a reply + to the user who submitted the slash command.""" + + channel_name = body['channel_name'][0] + response_url = body['response_url'][0] + channel_id = body['channel_id'][0] + + result = turbot.rot.rot(args) + + if (channel_name == "directmessage"): + requests.post(response_url, + json = {"text": result}, + headers = {"Content-type": "application/json"}) + else: + turb.slack_client.chat_postMessage(channel=channel_id, text=result) + + return { + 'statusCode': 200, + 'body': "" + } + actions = { "button": { "new_hunt": new_hunt } } + +commands = { + "/rot": rot +} diff --git a/turbot_lambda/turbot_lambda.py b/turbot_lambda/turbot_lambda.py index 59312c8..8365739 100644 --- a/turbot_lambda/turbot_lambda.py +++ b/turbot_lambda/turbot_lambda.py @@ -10,8 +10,7 @@ from types import SimpleNamespace from google.auth.transport.requests import Request from googleapiclient.discovery import build -import turbot.actions -import turbot.commands +import turbot.interaction import turbot.events ssm = boto3.client('ssm') @@ -166,7 +165,7 @@ def turbot_interactive(turb, payload): if type == 'block_actions': return turbot_block_action(turb, payload) if type == 'view_submission': - return turbot.actions.view_submission(turb, payload) + return turbot.interaction.view_submission(turb, payload) if type == 'shortcut': return turbot_shortcut(turb, payload); return error("Unrecognized interactive type: {}".format(type)) @@ -188,10 +187,10 @@ def turbot_block_action(turb, payload): avalue = action['value'] if ( - atype in turbot.actions.actions - and avalue in turbot.actions.actions[atype] + atype in turbot.interaction.actions + and avalue in turbot.interaction.actions[atype] ): - return turbot.actions.actions[atype][avalue](turb, payload) + return turbot.interaction.actions[atype][avalue](turb, payload) return error("Unknown action of type/value: {}/{}".format(atype, avalue)) def turbot_shortcut(turb, payload): @@ -216,7 +215,7 @@ def turbot_slash_command(turb, body): else: args = '' - if command in turbot.commands.commands: - return turbot.commands.commands[command](turb, body, args) + if command in turbot.interaction.commands: + return turbot.interation.commands[command](turb, body, args) return error("Command {} not implemented".format(command)) -- 2.43.0