Skip to content

Commit 1f6f318

Browse files
committed
refactor
1 parent f0da200 commit 1f6f318

File tree

2 files changed

+48
-80
lines changed

2 files changed

+48
-80
lines changed

packages/slackBotFunction/app/slack/slack_handlers.py

Lines changed: 48 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -9,56 +9,55 @@
99

1010
logger = get_logger()
1111

12+
# ================================================================
13+
# Event and message handlers
14+
# ================================================================
1215

13-
@lru_cache()
14-
def setup_handlers(app: App):
16+
17+
def mention_handler(event, ack, body):
1518
"""
16-
Register all event handlers with the Slack app
19+
Handle @mentions in channels - when users mention the bot in a channel
20+
Acknowledges the event immediately and triggers async processing to avoid timeouts
1721
"""
22+
ack()
23+
24+
event_id = body.get("event_id")
25+
if not event_id or is_duplicate_event(event_id):
26+
logger.info("Skipping duplicate or missing event", extra={"event_id": event_id})
27+
return
28+
29+
user_id = event.get("user", "unknown")
30+
logger.info("Processing @mention from user", extra={"user_id": user_id, "event_id": event_id})
1831

19-
@app.middleware
20-
def log_request(slack_logger, body, next):
21-
logger.debug("Slack request received", extra={"body": body})
22-
return next()
23-
24-
@app.event("app_mention")
25-
def handle_app_mention(event, ack, body):
26-
"""
27-
Handle @mentions in channels - when users mention the bot in a channel
28-
Acknowledges the event immediately and triggers async processing to avoid timeouts
29-
"""
30-
ack()
31-
32-
event_id = body.get("event_id")
33-
if not event_id or is_duplicate_event(event_id):
34-
logger.info("Skipping duplicate or missing event", extra={"event_id": event_id})
35-
return
36-
37-
user_id = event.get("user", "unknown")
38-
logger.info("Processing @mention from user", extra={"user_id": user_id, "event_id": event_id})
39-
40-
bot_token = get_bot_token()
41-
trigger_async_processing({"event": event, "event_id": event_id, "bot_token": bot_token})
42-
43-
@app.event("message")
44-
def handle_direct_message(event, ack, body):
45-
"""
46-
Handle direct messages to the bot - private 1:1 conversations
47-
Filters out channel messages and processes only direct messages
48-
"""
49-
ack()
50-
51-
# Only handle DMs, ignore channel messages
52-
if event.get("channel_type") != "im":
53-
return
54-
55-
event_id = body.get("event_id")
56-
if not event_id or is_duplicate_event(event_id):
57-
logger.info("Skipping duplicate or missing event", extra={"event_id": event_id})
58-
return
59-
60-
user_id = event.get("user", "unknown")
61-
logger.info("Processing DM from user", extra={"user_id": user_id, "event_id": event_id})
62-
63-
bot_token = get_bot_token()
64-
trigger_async_processing({"event": event, "event_id": event_id, "bot_token": bot_token})
32+
bot_token = get_bot_token()
33+
trigger_async_processing({"event": event, "event_id": event_id, "bot_token": bot_token})
34+
35+
36+
def dm_message_handler(event, ack, body):
37+
"""
38+
Handle direct messages to the bot - private 1:1 conversations
39+
Filters out channel messages and processes only direct messages
40+
"""
41+
ack()
42+
43+
# Only handle DMs, ignore channel messages
44+
if event.get("channel_type") != "im":
45+
return
46+
47+
event_id = body.get("event_id")
48+
if not event_id or is_duplicate_event(event_id):
49+
logger.info("Skipping duplicate or missing event", extra={"event_id": event_id})
50+
return
51+
52+
user_id = event.get("user", "unknown")
53+
logger.info("Processing DM from user", extra={"user_id": user_id, "event_id": event_id})
54+
55+
bot_token = get_bot_token()
56+
trigger_async_processing({"event": event, "event_id": event_id, "bot_token": bot_token})
57+
58+
59+
@lru_cache()
60+
def setup_handlers(app: App):
61+
"""Register handlers. Intentionally minimal—no branching here."""
62+
app.event("app_mention")(mention_handler)
63+
app.event("message")(dm_message_handler)

packages/slackBotFunction/tests/test_middleware.py

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,6 @@
22
from unittest.mock import Mock, patch
33

44

5-
def test_log_request_middleware_execution(mock_slack_app, mock_env, mock_get_parameter, lambda_context):
6-
"""Test log_request middleware actual execution"""
7-
if "app.slack.slack_handlers" in sys.modules:
8-
del sys.modules["app.slack.slack_handlers"]
9-
10-
from app.slack.slack_handlers import setup_handlers
11-
12-
setup_handlers(mock_slack_app)
13-
14-
# Verify the app.middleware decorator was called during import
15-
mock_slack_app.middleware.assert_called()
16-
17-
# Get the middleware function that was registered
18-
middleware_calls = mock_slack_app.middleware.call_args_list
19-
assert len(middleware_calls) > 0
20-
21-
# The middleware function should be the log_request function
22-
middleware_func = middleware_calls[0][0][0] # First argument of first call
23-
24-
# Now test calling the middleware function directly
25-
mock_next = Mock(return_value="middleware_result")
26-
mock_logger = Mock()
27-
test_body = {"test": "body"}
28-
29-
# This should execute lines 56-57 in the log_request function
30-
result = middleware_func(mock_logger, test_body, mock_next)
31-
32-
assert result == "middleware_result"
33-
mock_next.assert_called_once()
34-
35-
365
@patch("app.utils.handler_utils.is_duplicate_event")
376
@patch("app.utils.handler_utils.trigger_async_processing")
387
def test_app_mention_handler_execution_simple(

0 commit comments

Comments
 (0)