Add slack example
This commit is contained in:
69
examples/slack/main.py
Normal file
69
examples/slack/main.py
Normal file
@@ -0,0 +1,69 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user