Spaces:
Runtime error
Runtime error
from apscheduler.schedulers.asyncio import AsyncIOScheduler | |
from asyncio import run as run_async | |
from contextlib import asynccontextmanager | |
from dependency_injector.wiring import inject, Provide | |
from fastapi import FastAPI, HTTPException, Depends | |
from loguru import logger | |
from typing import Any, AsyncGenerator | |
from slack_bolt.async_app import AsyncApp | |
from slack_bolt.adapter.socket_mode.async_handler import AsyncSocketModeHandler | |
from starlette.requests import Request | |
from starlette.responses import Response | |
from threading import Thread | |
from typing import Any, Dict, Self | |
from ctp_slack_bot.containers import Container | |
from ctp_slack_bot.core.config import Settings | |
from ctp_slack_bot.core.logging import setup_logging | |
from ctp_slack_bot.core.response_rendering import PrettyJSONResponse | |
from ctp_slack_bot.tasks import start_scheduler, stop_scheduler | |
async def main() -> None: | |
container = Container() | |
container.wire(packages=['ctp_slack_bot']) | |
# Setup logging. | |
setup_logging(container) | |
logger.info("Starting application") | |
# Start the scheduler. | |
scheduler = start_scheduler(container) | |
logger.info("Started scheduler") | |
# Initialize primordial dependencies in container. | |
container.primordial_services() | |
# Start Slack socket mode in a background thread and set up an event handler for the Bolt app. | |
bolt_app = container.slack_bolt_app() | |
slack_service = container.slack_service() | |
async def handle_message(body: Dict[str, Any]) -> None: | |
logger.debug("Ignored regular message: {}", body.get("event").get("text")) | |
#await slack_service.process_message(body) | |
async def handle_app_mention(body: Dict[str, Any]) -> None: | |
#logger.debug("Ignored app mention: {}", body.get("event").get("text")) | |
await slack_service.process_message(body) | |
# Start Socket Mode handler in a background thread | |
socket_mode_handler = AsyncSocketModeHandler( | |
app=bolt_app, | |
app_token=container.settings().SLACK_APP_TOKEN.get_secret_value() | |
) | |
logger.info("Starting Slack Socket Mode handler…") | |
await socket_mode_handler.start_async() | |
# Shutdown. | |
logger.info("Shutting down application") | |
stop_scheduler(scheduler) | |
logger.info("Stopped scheduler") | |
if __name__ == "__main__": | |
# run() | |
run_async(main()) | |