integrations.slack.events.handler

integrations/slack/events/handler.py

  1"""
  2integrations/slack/events/handler.py
  3"""
  4
  5import logging
  6import os
  7import sys
  8from typing import TYPE_CHECKING
  9
 10import libs.dispatcher
 11from cls.timekit import ExtendedDatetime as ExtDt
 12from integrations.slack.events.handler_registry import register, register_all
 13from integrations.slack.events.home_tab import home
 14
 15if TYPE_CHECKING:
 16    from integrations.slack.adapter import ServiceAdapter
 17
 18
 19def main(adapter: "ServiceAdapter"):
 20    """メイン処理
 21
 22    Args:
 23        adapter (ServiceAdapter): アダプタインターフェース
 24
 25    Raises:
 26        ModuleNotFoundError: ライブラリ未インストール
 27    """
 28
 29    try:
 30        from slack_bolt import App
 31        from slack_bolt.adapter.socket_mode import SocketModeHandler
 32        from slack_sdk import WebClient
 33        from slack_sdk.errors import SlackApiError
 34    except ModuleNotFoundError as err:
 35        raise ModuleNotFoundError(err.msg) from None
 36
 37    def log_filter():
 38        """ログレベル変更"""
 39        for name in logging.Logger.manager.loggerDict:
 40            if name.startswith(("slack_", "slack")) or "socket_mode" in name:
 41                logging.getLogger(name).setLevel(logging.WARNING)
 42
 43    try:
 44        log_filter()
 45        app = App(token=os.environ["SLACK_BOT_TOKEN"])
 46        adapter.api.webclient = WebClient(token=os.environ["SLACK_WEB_TOKEN"])
 47        adapter.api.appclient = app.client
 48        log_filter()
 49        adapter.conf.bot_id = app.client.auth_test()["user_id"]
 50    except SlackApiError as err:
 51        logging.error(err)
 52        sys.exit()
 53
 54    register_all(app, adapter)  # イベント遅延登録
 55    handler = SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"])
 56
 57    handler.start()
 58
 59
 60@register
 61def register_event_handlers(app, adapter: "ServiceAdapter"):
 62    """イベントAPI"""
 63
 64    m = adapter.parser()
 65
 66    @app.event("message")
 67    def handle_message_events(body):
 68        """メッセージイベント
 69
 70        Args:
 71            body (dict): ポストされたデータ
 72        """
 73
 74        m.reset()
 75        m.parser(body)
 76        libs.dispatcher.by_keyword(m)
 77
 78    @app.command(adapter.conf.slash_command)
 79    def slash_command(ack, body):
 80        """スラッシュコマンド
 81
 82        Args:
 83            ack (_type_): ack
 84            body (dict): ポストされたデータ
 85        """
 86
 87        ack()
 88        m.reset()
 89        m.parser(body)
 90        libs.dispatcher.by_keyword(m)
 91
 92    @app.event("app_home_opened")
 93    def handle_home_events(event):
 94        """ホームタブオープン
 95
 96        Args:
 97            event (dict): イベント内容
 98        """
 99
100        adapter.conf.tab_var = {
101            "view": {},
102            "no": 0,
103            "user_id": None,
104            "view_id": None,
105            "screen": None,
106            "operation": None,
107            "sday": adapter.conf.tab_var.get("sday", ExtDt().format("ymd", "-")),
108            "eday": adapter.conf.tab_var.get("eday", ExtDt().format("ymd", "-")),
109        }
110
111        adapter.conf.tab_var["user_id"] = event["user"]
112        if "view" in event:
113            adapter.conf.tab_var["view_id"] = event["view"]["id"]
114
115        logging.trace(adapter.conf.tab_var)  # type: ignore
116
117        home.build_main_menu(adapter)
118        result = adapter.api.appclient.views_publish(
119            user_id=adapter.conf.tab_var["user_id"],
120            view=adapter.conf.tab_var["view"],
121        )
122        logging.trace(result)  # type: ignore
def main(adapter: integrations.slack.adapter.ServiceAdapter):
20def main(adapter: "ServiceAdapter"):
21    """メイン処理
22
23    Args:
24        adapter (ServiceAdapter): アダプタインターフェース
25
26    Raises:
27        ModuleNotFoundError: ライブラリ未インストール
28    """
29
30    try:
31        from slack_bolt import App
32        from slack_bolt.adapter.socket_mode import SocketModeHandler
33        from slack_sdk import WebClient
34        from slack_sdk.errors import SlackApiError
35    except ModuleNotFoundError as err:
36        raise ModuleNotFoundError(err.msg) from None
37
38    def log_filter():
39        """ログレベル変更"""
40        for name in logging.Logger.manager.loggerDict:
41            if name.startswith(("slack_", "slack")) or "socket_mode" in name:
42                logging.getLogger(name).setLevel(logging.WARNING)
43
44    try:
45        log_filter()
46        app = App(token=os.environ["SLACK_BOT_TOKEN"])
47        adapter.api.webclient = WebClient(token=os.environ["SLACK_WEB_TOKEN"])
48        adapter.api.appclient = app.client
49        log_filter()
50        adapter.conf.bot_id = app.client.auth_test()["user_id"]
51    except SlackApiError as err:
52        logging.error(err)
53        sys.exit()
54
55    register_all(app, adapter)  # イベント遅延登録
56    handler = SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"])
57
58    handler.start()

メイン処理

Arguments:
  • adapter (ServiceAdapter): アダプタインターフェース
Raises:
  • ModuleNotFoundError: ライブラリ未インストール
register_event_handlers = None

イベントAPI