Skip to main content

The Bolt Framework for Python

Project description

⚠️ Important Notice ⚠️

🔄 Still Work In Progress 🔄

This project is still in alpha, and may have bugs in it. Also, the public APIs can be changed until the v1 release. We are keen to hear your feedback. Please feel free to submit an issue!

Bolt for Python (still in alpha)

Python Version pypi package Build Status Codecov

A Python framework to build Slack apps in a flash with the latest platform features. Check the samples to know how to use this framework.

Setup

python -m venv env
source env/bin/activate
pip install slack_bolt

First Bolt App (app.py)

Create an app by calling a constructor, which is a top-level export.

import logging
logging.basicConfig(level=logging.DEBUG)

from slack_bolt import App

# export SLACK_SIGNING_SECRET=***
# export SLACK_BOT_TOKEN=xoxb-***
app = App()

# Events API: https://api.slack.com/events-api
@app.event("app_mention")
def event_test(say):
    say("What's up?")

# Interactivity: https://api.slack.com/interactivity
@app.shortcut("callback-id-here")
# @app.command("/hello-bolt-python")
def open_modal(ack, client, logger, body):
    # acknowledge the incoming request from Slack immediately
    ack()
    # open a modal
    api_response = client.views_open(
        trigger_id=body["trigger_id"],
        view={
            "type": "modal",
            "callback_id": "view-id",
            "title": {
                "type": "plain_text",
                "text": "My App",
            },
            "submit": {
                "type": "plain_text",
                "text": "Submit",
            },
            "blocks": [
                {
                    "type": "input",
                    "block_id": "b",
                    "element": {
                        "type": "plain_text_input",
                        "action_id": "a"
                    },
                    "label": {
                        "type": "plain_text",
                        "text": "Label",
                    }
                }
            ]
        })
    logger.debug(api_response)

@app.view("view-id")
def view_submission(ack, view, logger):
    ack()
    # Prints {'b': {'a': {'type': 'plain_text_input', 'value': 'Your Input'}}}
    logger.info(view["state"]["values"])

if __name__ == "__main__":
    app.start(3000)  # POST http://localhost:3000/slack/events

Run the Bolt App

export SLACK_SIGNING_SECRET=***
export SLACK_BOT_TOKEN=xoxb-***
python app.py

# in another terminal
ngrok http 3000

AsyncApp Setup

If you prefer building Slack apps using asyncio, you can go with AsyncApp instead. You can use async/await style for everything in the app. To use AsyncApp, AIOHTTP library is required for asynchronous Slack Web API calls and the default web server.

python -m venv env
source env/bin/activate
pip install slack_bolt aiohttp

Import slack_bolt.async_app.AsyncApp instead of slack_bolt.App. All middleware/listeners must be async functions. Inside the functions, all utility methods such as ack, say, and respond requires await keyword.

from slack_bolt.async_app import AsyncApp

app = AsyncApp()

@app.event("app_mention")
async def event_test(body, say, logger):
    logger.info(body)
    await say("What's up?")

@app.command("/hello-bolt-python")
async def command(ack, body, respond):
    await ack()
    await respond(f"Hi <@{body['user_id']}>!")

if __name__ == "__main__":
    app.start(3000)

Starting the app is exactly the same with the way using slack_bolt.App.

export SLACK_SIGNING_SECRET=***
export SLACK_BOT_TOKEN=xoxb-***
python app.py

# in another terminal
ngrok http 3000

If you want to use another async Web framework (e.g., Sanic, FastAPI, Starlette), take a look at the built-in adapters and their samples.

Feedback

We are keen to hear your feedback. Please feel free to submit an issue!

License

The MIT License

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

slack_bolt-0.5.2a0.tar.gz (50.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

slack_bolt-0.5.2a0-py2.py3-none-any.whl (97.8 kB view details)

Uploaded Python 2Python 3

File details

Details for the file slack_bolt-0.5.2a0.tar.gz.

File metadata

  • Download URL: slack_bolt-0.5.2a0.tar.gz
  • Upload date:
  • Size: 50.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for slack_bolt-0.5.2a0.tar.gz
Algorithm Hash digest
SHA256 5741812e5944659a73a670d4832d72d45293dd085474cb66da36cd5ccd26d902
MD5 94b9b299e207b2bb849d3b2fcd5f75da
BLAKE2b-256 de0e11064479b15450a429631db6ce72bd522a35262dea3a45727590ea94f30d

See more details on using hashes here.

File details

Details for the file slack_bolt-0.5.2a0-py2.py3-none-any.whl.

File metadata

  • Download URL: slack_bolt-0.5.2a0-py2.py3-none-any.whl
  • Upload date:
  • Size: 97.8 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for slack_bolt-0.5.2a0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e40f865b429c930b07992728f9d9264140c456a2f3ce426dc4c409f31497b833
MD5 7ba63d716a4e5b6f18623fa8c8e467a4
BLAKE2b-256 b31ef2b5229cc9d4109f78b8248fe9b396d22f886632535f831c1b40ae36594f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page