LiKenun's picture
Bug fixes
3300601
raw
history blame
2.39 kB
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()
@bolt_app.event("message")
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)
@bolt_app.event("app_mention")
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())