Implement reconnect, idle reporting, and security hardening
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
import time
|
||||
|
||||
from slack_bolt import App
|
||||
from slack_bolt.adapter.socket_mode import SocketModeHandler
|
||||
@@ -19,7 +20,8 @@ class SlackHandler:
|
||||
def __init__(self, config: Config) -> None:
|
||||
self.config = config
|
||||
self.app = App(token=config.slack_bot_token)
|
||||
self._handler = SocketModeHandler(self.app, config.slack_app_token)
|
||||
self._handler: SocketModeHandler | None = None
|
||||
self._stop_requested = False
|
||||
self._on_message_callback: callable | None = None
|
||||
self._on_command_callback: callable | None = None
|
||||
|
||||
@@ -98,11 +100,31 @@ class SlackHandler:
|
||||
)
|
||||
|
||||
def start(self) -> None:
|
||||
"""Socket Mode 핸들러를 시작한다."""
|
||||
"""Socket Mode 핸들러를 시작한다. 연결이 끊기면 재연결한다."""
|
||||
self._stop_requested = False
|
||||
logger.info("Slack Socket Mode 시작")
|
||||
self._handler.start()
|
||||
|
||||
while not self._stop_requested:
|
||||
try:
|
||||
self._handler = SocketModeHandler(self.app, self.config.slack_app_token)
|
||||
self._handler.start()
|
||||
except Exception:
|
||||
if self._stop_requested:
|
||||
break
|
||||
logger.exception("Socket Mode 연결이 종료되었습니다.")
|
||||
|
||||
if self._stop_requested:
|
||||
break
|
||||
|
||||
logger.warning(
|
||||
"Socket Mode 재연결 시도 (%s초 후)",
|
||||
self.config.reconnect_delay_seconds,
|
||||
)
|
||||
time.sleep(self.config.reconnect_delay_seconds)
|
||||
|
||||
def stop(self) -> None:
|
||||
"""Socket Mode 핸들러를 종료한다."""
|
||||
logger.info("Slack Socket Mode 종료")
|
||||
self._handler.close()
|
||||
self._stop_requested = True
|
||||
if self._handler is not None:
|
||||
self._handler.close()
|
||||
|
||||
Reference in New Issue
Block a user