I'm using Slack Bolt Python SDK to create a Slack application in the Socket Mode. My application works and responds to the slash commands given on the app and I can see my method getting invoked as well. I'm trying to achieve automatic reloading of the app when code change happens using uvicorn library but I'm unable to get around it.
Following was my original working code before attempting to add uvicorn:-
from typing import Optional, Dict, Union, List
from slack_bolt import App
import os
from pathlib import Path
from dotenv import load_dotenv
import logging
from slack_sdk.errors import SlackApiError
from urllib.parse import unquote
from slack_bolt.adapter.socket_mode import SocketModeHandler
import json
logging.basicConfig(level=logging.DEBUG)
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)
SLACK_VERIFICATION_TOKEN = os.environ['SLACK_VERIFICATION_TOKEN']
SLACK_BOT_TOKEN = os.environ['SLACK_BOT_TOKEN']
SLACK_APP_TOKEN = os.environ['SLACK_APP_TOKEN']
app_bolt = App(token=SLACK_BOT_TOKEN)
@app_bolt.command("/echo")
def repeat_text(ack, say, command):
# Acknowledge command request
ack()
say(f"{command['text']}")
if __name__ == "__main__":
handler = SocketModeHandler(app_bolt, SLACK_APP_TOKEN)
handler.start()
But after adding uvicorn probably in a wrong way, I do not get any hits to my backend code when I typed the slash command on my slash app and I do not see the message like Bold application started in the logs when I my app loads:-
INFO:slack_bolt.App:A new session has been established (session id: 28cac339-5cb4-46fd-b8e4-f569ec78f72b)
INFO:slack_bolt.App:⚡️ Bolt app is running!
After adding uvicorn:-
from uvicorn import run
# if __name__ == "__main__":
# handler = SocketModeHandler(app_bolt, SLACK_APP_TOKEN)
# handler.start()
if __name__ == "__main__":
run("main:app_bolt", host="0.0.0.0", port=3000, reload=True, log_level="info")
I would really appreciate if someone guide to fix this code so that I can use reloading of code changes during my development using Slack bolt SDK