The Bolt Framework for Python
Project description
Bolt for Python
A Python framework to build Slack apps in a flash with the latest platform features. Check the document and examples to know how to use this framework.
Setup
# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
pip install -U pip
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 3.6+ required
python -m venv .venv
source .venv/bin/activate
pip install -U pip
# aiohttp is required
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 examples.
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
Built Distribution
Hashes for slack_bolt-0.9.1b0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 02c19bcf045d8a80bcbf653f5a68a747a5b4f928effb7f1f0072f9fb084030be |
|
MD5 | c9d13b91aaa34b6bd099f13e056b3c74 |
|
BLAKE2b-256 | ef90b93bbebc5e1d3afdebadad3b553065f43f19c5206f5130fea66b9a7d7242 |