shared/openai-slackbot/openai_slackbot/bot.py (60 lines of code) (raw):

import typing as t from logging import getLogger import openai from openai_slackbot.clients.slack import SlackClient from openai_slackbot.handlers import BaseActionHandler, BaseMessageHandler from openai_slackbot.utils.envvars import string from slack_bolt.adapter.socket_mode.async_handler import AsyncSocketModeHandler from slack_bolt.app.async_app import AsyncApp logger = getLogger(__name__) async def register_app_handlers( *, app: AsyncApp, message_handler: t.Type[BaseMessageHandler], action_handlers: t.List[t.Type[BaseActionHandler]], slack_client: SlackClient, ): if message_handler: app.event("message")(message_handler(slack_client).maybe_handle) if action_handlers: for action_handler in action_handlers: handler = action_handler(slack_client) app.action(handler.action_id)(handler.maybe_handle) async def init_bot( *, openai_organization_id: str, slack_message_handler: t.Type[BaseMessageHandler], slack_action_handlers: t.List[t.Type[BaseActionHandler]], slack_template_path: str, ): slack_bot_token = string("SLACK_BOT_TOKEN") openai_api_key = string("OPENAI_API_KEY") # Init OpenAI API openai.organization = openai_organization_id openai.api_key = openai_api_key # Init slack bot app = AsyncApp(token=slack_bot_token) slack_client = SlackClient(app.client, slack_template_path) await register_app_handlers( app=app, message_handler=slack_message_handler, action_handlers=slack_action_handlers, slack_client=slack_client, ) return app async def start_app(app): socket_app_token = string("SOCKET_APP_TOKEN") handler = AsyncSocketModeHandler(app, socket_app_token) await handler.start_async() async def start_bot( *, openai_organization_id: str, slack_message_handler: t.Type[BaseMessageHandler], slack_action_handlers: t.List[t.Type[BaseActionHandler]], slack_template_path: str, ): app = await init_bot( openai_organization_id=openai_organization_id, slack_message_handler=slack_message_handler, slack_action_handlers=slack_action_handlers, slack_template_path=slack_template_path, ) await start_app(app)