1212import traceback
1313from typing import Any , Dict
1414from botocore .exceptions import ClientError
15- from slack_bolt import Ack , App
15+ from slack_bolt import Ack , App , BoltRequest
1616from slack_sdk import WebClient
1717from app .core .config import (
1818 bot_messages ,
2626 extract_conversation_context ,
2727 extract_pull_request_id ,
2828 extract_session_pull_request_id ,
29+ forward_event_to_pull_request_lambda ,
2930 gate_common ,
3031 is_latest_message ,
3132 strip_mentions ,
@@ -68,7 +69,7 @@ def respond_to_action(ack: Ack):
6869 ack ()
6970
7071
71- def mention_handler (event : Dict [str , Any ], body : Dict [str , Any ], client : WebClient ) -> None :
72+ def mention_handler (event : Dict [str , Any ], body : Dict [str , Any ], client : WebClient , req : BoltRequest ) -> None :
7273 """
7374 Channel interactions that mention the bot.
7475 Pulls some details unique to mentions and removes slack user name
@@ -91,10 +92,11 @@ def mention_handler(event: Dict[str, Any], body: Dict[str, Any], client: WebClie
9192 event = event ,
9293 event_id = event_id ,
9394 post_to_thread = True ,
95+ req = req ,
9496 )
9597
9698
97- def dm_message_handler (event : Dict [str , Any ], event_id : str , client : WebClient ) -> None :
99+ def dm_message_handler (event : Dict [str , Any ], event_id : str , client : WebClient , req : BoltRequest ) -> None :
98100 """
99101 Direct messages:
100102 Pulls some details unique to direct messages
@@ -105,7 +107,10 @@ def dm_message_handler(event: Dict[str, Any], event_id: str, client: WebClient)
105107 message_text = (event .get ("text" ) or "" ).strip ()
106108 user_id = event .get ("user" , "unknown" )
107109 conversation_key , thread_root = conversation_key_and_root (event = event )
108- logger .info (f"Processing DM from user { user_id } " , extra = {"event_id" : event_id })
110+ logger .info (
111+ f"Processing DM from user { user_id } " ,
112+ extra = {"event_id" : event_id , "conversation_key" : conversation_key , "thread_root" : thread_root },
113+ )
109114 _common_message_handler (
110115 message_text = message_text ,
111116 conversation_key = conversation_key ,
@@ -114,10 +119,11 @@ def dm_message_handler(event: Dict[str, Any], event_id: str, client: WebClient)
114119 event = event ,
115120 event_id = event_id ,
116121 post_to_thread = True ,
122+ req = req ,
117123 )
118124
119125
120- def thread_message_handler (event : Dict [str , Any ], event_id : str , client : WebClient ) -> None :
126+ def thread_message_handler (event : Dict [str , Any ], event_id : str , client : WebClient , req : BoltRequest ) -> None :
121127 """
122128 Thread messages:
123129 Pulls some details unique to threads
@@ -155,10 +161,11 @@ def thread_message_handler(event: Dict[str, Any], event_id: str, client: WebClie
155161 event = event ,
156162 event_id = event_id ,
157163 post_to_thread = True ,
164+ req = req ,
158165 )
159166
160167
161- def unified_message_handler (event : Dict [str , Any ], body : Dict [str , Any ], client : WebClient ) -> None :
168+ def unified_message_handler (event : Dict [str , Any ], body : Dict [str , Any ], client : WebClient , req : BoltRequest ) -> None :
162169 """Handle message events (but not app mentions) - DMs and channel messages"""
163170 event_id = gate_common (event = event , body = body )
164171 if not event_id :
@@ -167,13 +174,13 @@ def unified_message_handler(event: Dict[str, Any], body: Dict[str, Any], client:
167174 # Route to appropriate handler based on message type
168175 if event .get ("channel_type" ) == constants .CHANNEL_TYPE_IM :
169176 # DM handling
170- dm_message_handler (event = event , event_id = event_id , client = client )
177+ dm_message_handler (event = event , event_id = event_id , client = client , req = req )
171178 else :
172179 # Channel message handling
173- thread_message_handler (event = event , event_id = event_id , client = client )
180+ thread_message_handler (event = event , event_id = event_id , client = client , req = req )
174181
175182
176- def feedback_handler (body : Dict [str , Any ], client : WebClient ) -> None :
183+ def feedback_handler (body : Dict [str , Any ], client : WebClient , req : BoltRequest ) -> None :
177184 """Handle feedback button clicks (both positive and negative)."""
178185 try :
179186 channel_id = body ["channel" ]["id" ]
@@ -189,6 +196,10 @@ def feedback_handler(body: Dict[str, Any], client: WebClient) -> None:
189196 f"Feedback in pull request session { session_pull_request_id } " ,
190197 extra = {"session_pull_request_id" : session_pull_request_id },
191198 )
199+ forward_event_to_pull_request_lambda (
200+ req = req , pull_request_id = session_pull_request_id , forward_type = "feedback"
201+ )
202+ return
192203
193204 if message_ts and not is_latest_message (conversation_key = conversation_key , message_ts = message_ts ):
194205 logger .info (f"Feedback ignored - not latest message: { message_ts } " )
@@ -247,6 +258,7 @@ def _common_message_handler(
247258 event : Dict [str , Any ],
248259 event_id : str ,
249260 post_to_thread : bool ,
261+ req : BoltRequest ,
250262) -> None :
251263 """
252264 All messages get processed by this code
@@ -264,6 +276,8 @@ def _common_message_handler(
264276 f"Message in pull request session { session_pull_request_id } from user { user_id } " ,
265277 extra = {"session_pull_request_id" : session_pull_request_id },
266278 )
279+ forward_event_to_pull_request_lambda (req = req , pull_request_id = session_pull_request_id , forward_type = "event" )
280+ return
267281 if message_text .lower ().startswith (constants .FEEDBACK_PREFIX ):
268282 feedback_text = message_text .split (":" , 1 )[1 ].strip () if ":" in message_text else ""
269283 try :
0 commit comments