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
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