Home

Awesome

slashbot

Slashbot makes it easy to create Slack slash commands using AWS Lambda functions. These can be handy for creating a secure way to execute automated tasks, even from a mobile device. Perfect for developing "chatops" type applications.

Features:

Installation

pip install slashbot [--target=source_directory] (the --target option is used to include your packages in your source folder so they willl be included in your AWS Lambda artifact)

Usage

import os
import time
import slashbot

# https://api.slack.com/authentication/verifying-requests-from-slack
slashbot.SLACK_SIGNING_SECRET = os.environ.get("SLACK_SIGNING_SECRET")

# Define a default response
@slashbot.route("*")
def default(cmd: slashbot.SlashCommand):
    if not cmd.provided_verb: #Nothing beyond the slash command
        return help(cmd)
    return (
        f"This is a default response. `{cmd.provided_verb}` is not a recognized command. \n"
        + help(cmd)
    )


@slashbot.route("help")
#Handlers take a SlashCommand as input and return text
def help(cmd: slashbot.SlashCommand):
    return f"Here is some helpful text"


@slashbot.route("hello")
def functionnamesdontmatter(cmd: slashbot.SlashCommand):
    return f"Hello {cmd.user_name}"


# Support for multi word verbs
@slashbot.route("good bye")
def good_bye(cmd: slashbot.SlashCommand):
    return f"Good bye {cmd.user_name}"


# An ack is automatically sent to Slack within the required 3 seconds.
# So your function can take up to the duration of a lambda function (15 mins) 
@slashbot.route("echo")
def echowithdelay(cmd):
    time.sleep(300)
    return f"Echo {' '.join(cmd.command_args)}"


# acl can be optionally provided (acl can be single user name or array of user names)
@slashbot.route("secure stuff", acl="anybodybutme")
def secure_stuff(_):
    ...
    # do some scary stuff limited to specific users
    return ""


def handler(event, context):
    return slashbot.main(event, context)

<img src="images/convo.png" width=400>

Todo