11from typing import Optional , Callable
22
3- from slack_bolt .context .assistant .assistant_utilities import AssistantUtilities
43from slack_bolt .context .assistant .thread_context_store .store import AssistantThreadContextStore
54from slack_bolt .context .say_stream .say_stream import SayStream
65from slack_bolt .context .set_status .set_status import SetStatus
6+ from slack_bolt .context .set_suggested_prompts .set_suggested_prompts import SetSuggestedPrompts
77from slack_bolt .middleware import Middleware
8- from slack_bolt .request .payload_utils import is_assistant_event , to_event
8+ from slack_bolt .context .assistant .assistant_utilities import AssistantUtilities
9+ from slack_bolt .request .payload_utils import (
10+ is_app_home_opened_event ,
11+ is_assistant_event ,
12+ is_assistant_thread_context_changed_event ,
13+ is_assistant_thread_started_event ,
14+ is_im_message_event ,
15+ to_event ,
16+ )
917from slack_bolt .request .request import BoltRequest
1018from slack_bolt .response .response import BoltResponse
1119
@@ -19,32 +27,48 @@ def __init__(self, thread_context_store: Optional[AssistantThreadContextStore] =
1927
2028 def process (self , * , req : BoltRequest , resp : BoltResponse , next : Callable [[], BoltResponse ]) -> Optional [BoltResponse ]:
2129 event = to_event (req .body )
22- if event is not None :
23- if is_assistant_event (req .body ):
24- assistant = AssistantUtilities (
25- payload = event ,
26- context = req .context ,
27- thread_context_store = self .thread_context_store ,
28- )
29- req .context ["say" ] = assistant .say
30- req .context ["set_title" ] = assistant .set_title
31- req .context ["set_suggested_prompts" ] = assistant .set_suggested_prompts
32- req .context ["get_thread_context" ] = assistant .get_thread_context
33- req .context ["save_thread_context" ] = assistant .save_thread_context
34-
35- # TODO: in the future we might want to introduce a "proper" extract_ts utility
36- thread_ts = req .context .thread_ts or event .get ("ts" )
37- if req .context .channel_id and thread_ts :
38- req .context ["set_status" ] = SetStatus (
39- client = req .context .client ,
40- channel_id = req .context .channel_id ,
41- thread_ts = thread_ts ,
42- )
43- req .context ["say_stream" ] = SayStream (
44- client = req .context .client ,
45- channel = req .context .channel_id ,
46- recipient_team_id = req .context .team_id or req .context .enterprise_id ,
47- recipient_user_id = req .context .user_id ,
48- thread_ts = thread_ts ,
49- )
30+ if event is None :
31+ return next ()
32+ if req .context .channel_id is None :
33+ return next ()
34+
35+ if is_assistant_event (req .body ):
36+ # TODO: eventually we might remove this assistant specific logic
37+ assistant = AssistantUtilities (
38+ payload = event ,
39+ context = req .context ,
40+ thread_context_store = self .thread_context_store ,
41+ )
42+ req .context ["say" ] = assistant .say
43+ req .context ["set_title" ] = assistant .set_title
44+ req .context ["get_thread_context" ] = assistant .get_thread_context
45+ req .context ["save_thread_context" ] = assistant .save_thread_context
46+
47+ if (
48+ is_im_message_event (req .body )
49+ or is_assistant_thread_started_event (req .body )
50+ or is_assistant_thread_context_changed_event (req .body )
51+ or is_app_home_opened_event (req .body , tab = "messages" )
52+ ):
53+ req .context ["set_suggested_prompts" ] = SetSuggestedPrompts (
54+ client = req .context .client ,
55+ channel_id = req .context .channel_id ,
56+ thread_ts = req .context .thread_ts ,
57+ )
58+
59+ # TODO: in the future we might want to introduce a "proper" extract_ts utility
60+ thread_ts_or_ts = req .context .thread_ts or event .get ("ts" )
61+ if thread_ts_or_ts :
62+ req .context ["set_status" ] = SetStatus (
63+ client = req .context .client ,
64+ channel_id = req .context .channel_id ,
65+ thread_ts = thread_ts_or_ts ,
66+ )
67+ req .context ["say_stream" ] = SayStream (
68+ client = req .context .client ,
69+ channel = req .context .channel_id ,
70+ recipient_team_id = req .context .team_id or req .context .enterprise_id ,
71+ recipient_user_id = req .context .user_id ,
72+ thread_ts = thread_ts_or_ts ,
73+ )
5074 return next ()
0 commit comments