70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
import logging
|
|
import os
|
|
|
|
from slack_bolt import App, BoltContext
|
|
from slack_sdk.web import WebClient
|
|
from slack_sdk.http_retry.builtin_handlers import RateLimitErrorRetryHandler
|
|
|
|
from app.bolt_listeners import before_authorize, register_listeners
|
|
from app.env import *
|
|
from app.slack_ops import (
|
|
build_home_tab,
|
|
DEFAULT_HOME_TAB_MESSAGE,
|
|
DEFAULT_HOME_TAB_CONFIGURE_LABEL,
|
|
)
|
|
from app.i18n import translate
|
|
|
|
if __name__ == "__main__":
|
|
from slack_bolt.adapter.socket_mode import SocketModeHandler
|
|
|
|
logging.basicConfig(level=SLACK_APP_LOG_LEVEL)
|
|
|
|
app = App(
|
|
token=os.environ["SLACK_BOT_TOKEN"],
|
|
before_authorize=before_authorize,
|
|
process_before_response=True,
|
|
)
|
|
app.client.retry_handlers.append(RateLimitErrorRetryHandler(max_retry_count=2))
|
|
|
|
register_listeners(app)
|
|
|
|
@app.event("app_home_opened")
|
|
def render_home_tab(client: WebClient, context: BoltContext):
|
|
already_set_api_key = os.environ["OPENAI_API_KEY"]
|
|
text = translate(
|
|
openai_api_key=already_set_api_key,
|
|
context=context,
|
|
text=DEFAULT_HOME_TAB_MESSAGE,
|
|
)
|
|
configure_label = translate(
|
|
openai_api_key=already_set_api_key,
|
|
context=context,
|
|
text=DEFAULT_HOME_TAB_CONFIGURE_LABEL,
|
|
)
|
|
client.views_publish(
|
|
user_id=context.user_id,
|
|
view=build_home_tab(text, configure_label),
|
|
)
|
|
|
|
if USE_SLACK_LANGUAGE is True:
|
|
|
|
@app.middleware
|
|
def set_locale(
|
|
context: BoltContext,
|
|
client: WebClient,
|
|
next_,
|
|
):
|
|
user_id = context.actor_user_id or context.user_id
|
|
user_info = client.users_info(user=user_id, include_locale=True)
|
|
context["locale"] = user_info.get("user", {}).get("locale")
|
|
next_()
|
|
|
|
@app.middleware
|
|
def set_openai_api_key(context: BoltContext, next_):
|
|
context["OPENAI_API_KEY"] = os.environ["OPENAI_API_KEY"]
|
|
context["OPENAI_MODEL"] = OPENAI_MODEL
|
|
next_()
|
|
|
|
handler = SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"])
|
|
handler.start()
|