Skip to content

Commit 367f5b7

Browse files
committed
feat(web-api): add chat_{appendStream|startStream|stopStream} methods
1 parent ed1893d commit 367f5b7

File tree

3 files changed

+236
-26
lines changed

3 files changed

+236
-26
lines changed

slack_sdk/web/async_client.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2620,6 +2620,26 @@ async def channels_unarchive(
26202620

26212621
# --------------------------
26222622

2623+
async def chat_appendStream(
2624+
self,
2625+
*,
2626+
channel: str,
2627+
ts: str,
2628+
markdown_text: Optional[str],
2629+
**kwargs,
2630+
) -> AsyncSlackResponse:
2631+
"""Appends text to an existing streaming conversation.
2632+
https://api.slack.com/methods/chat.appendStream
2633+
"""
2634+
kwargs.update(
2635+
{
2636+
"channel": channel,
2637+
"ts": ts,
2638+
"markdown_text": markdown_text,
2639+
}
2640+
)
2641+
return await self.api_call("chat.appendStream", params=kwargs)
2642+
26232643
async def chat_delete(
26242644
self,
26252645
*,
@@ -2930,6 +2950,55 @@ async def chat_scheduledMessages_list(
29302950
)
29312951
return await self.api_call("chat.scheduledMessages.list", params=kwargs)
29322952

2953+
async def chat_startStream(
2954+
self,
2955+
*,
2956+
channel: str,
2957+
thread_ts: Optional[str] = None,
2958+
markdown_text: Optional[str] = None,
2959+
unfurl_links: Optional[bool] = None,
2960+
unfurl_media: Optional[bool] = None,
2961+
**kwargs,
2962+
) -> AsyncSlackResponse:
2963+
"""Starts a new streaming conversation.
2964+
https://api.slack.com/methods/chat.startStream
2965+
"""
2966+
kwargs.update(
2967+
{
2968+
"channel": channel,
2969+
"thread_ts": thread_ts,
2970+
"markdown_text": markdown_text,
2971+
"unfurl_links": unfurl_links,
2972+
"unfurl_media": unfurl_media,
2973+
}
2974+
)
2975+
kwargs = _remove_none_values(kwargs)
2976+
return await self.api_call("chat.startStream", params=kwargs)
2977+
2978+
async def chat_stopStream(
2979+
self,
2980+
*,
2981+
channel: str,
2982+
ts: str,
2983+
markdown_text: Optional[str] = None,
2984+
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
2985+
**kwargs,
2986+
) -> AsyncSlackResponse:
2987+
"""Finalizes and completes the streaming message.
2988+
https://api.slack.com/methods/chat.stopStream
2989+
"""
2990+
kwargs.update(
2991+
{
2992+
"channel": channel,
2993+
"ts": ts,
2994+
"markdown_text": markdown_text,
2995+
"blocks": blocks,
2996+
}
2997+
)
2998+
_parse_web_class_objects(kwargs)
2999+
kwargs = _remove_none_values(kwargs)
3000+
return await self.api_call("chat.stopStream", json=kwargs)
3001+
29333002
async def conversations_acceptSharedInvite(
29343003
self,
29353004
*,

slack_sdk/web/client.py

Lines changed: 98 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2610,6 +2610,27 @@ def channels_unarchive(
26102610

26112611
# --------------------------
26122612

2613+
def chat_appendStream(
2614+
self,
2615+
*,
2616+
channel: str,
2617+
ts: str,
2618+
markdown_text: Optional[str],
2619+
**kwargs,
2620+
) -> SlackResponse:
2621+
"""Appends text to an existing streaming conversation.
2622+
https://api.slack.com/methods/chat.appendStream
2623+
"""
2624+
kwargs.update(
2625+
{
2626+
"channel": channel,
2627+
"ts": ts,
2628+
"markdown_text": markdown_text,
2629+
}
2630+
)
2631+
kwargs = _remove_none_values(kwargs)
2632+
return self.api_call("chat.appendStream", params=kwargs)
2633+
26132634
def chat_delete(
26142635
self,
26152636
*,
@@ -2814,6 +2835,83 @@ def chat_scheduleMessage(
28142835
# NOTE: intentionally using json over params for the API methods using blocks/attachments
28152836
return self.api_call("chat.scheduleMessage", json=kwargs)
28162837

2838+
def chat_scheduledMessages_list(
2839+
self,
2840+
*,
2841+
channel: Optional[str] = None,
2842+
cursor: Optional[str] = None,
2843+
latest: Optional[str] = None,
2844+
limit: Optional[int] = None,
2845+
oldest: Optional[str] = None,
2846+
team_id: Optional[str] = None,
2847+
**kwargs,
2848+
) -> SlackResponse:
2849+
"""Lists all scheduled messages.
2850+
https://api.slack.com/methods/chat.scheduledMessages.list
2851+
"""
2852+
kwargs.update(
2853+
{
2854+
"channel": channel,
2855+
"cursor": cursor,
2856+
"latest": latest,
2857+
"limit": limit,
2858+
"oldest": oldest,
2859+
"team_id": team_id,
2860+
}
2861+
)
2862+
return self.api_call("chat.scheduledMessages.list", params=kwargs)
2863+
2864+
def chat_startStream(
2865+
self,
2866+
*,
2867+
channel: str,
2868+
thread_ts: Optional[str] = None,
2869+
markdown_text: Optional[str] = None,
2870+
unfurl_links: Optional[bool] = None,
2871+
unfurl_media: Optional[bool] = None,
2872+
**kwargs,
2873+
) -> SlackResponse:
2874+
"""Starts a new streaming conversation.
2875+
https://api.slack.com/methods/chat.startStream
2876+
"""
2877+
kwargs.update(
2878+
{
2879+
"channel": channel,
2880+
"thread_ts": thread_ts,
2881+
"markdown_text": markdown_text,
2882+
"unfurl_links": unfurl_links,
2883+
"unfurl_media": unfurl_media,
2884+
}
2885+
)
2886+
kwargs = _remove_none_values(kwargs)
2887+
return self.api_call("chat.startStream", params=kwargs)
2888+
2889+
def chat_stopStream(
2890+
self,
2891+
*,
2892+
channel: str,
2893+
ts: str,
2894+
markdown_text: Optional[str] = None,
2895+
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
2896+
metadata: Optional[Union[Dict, Metadata]] = None,
2897+
**kwargs,
2898+
) -> SlackResponse:
2899+
"""Stops a streaming conversation.
2900+
https://api.slack.com/methods/chat.stopStream
2901+
"""
2902+
kwargs.update(
2903+
{
2904+
"channel": channel,
2905+
"ts": ts,
2906+
"markdown_text": markdown_text,
2907+
"blocks": blocks,
2908+
"metadata": metadata,
2909+
}
2910+
)
2911+
_parse_web_class_objects(kwargs)
2912+
kwargs = _remove_none_values(kwargs)
2913+
return self.api_call("chat.stopStream", json=kwargs)
2914+
28172915
def chat_unfurl(
28182916
self,
28192917
*,
@@ -2894,32 +2992,6 @@ def chat_update(
28942992
# NOTE: intentionally using json over params for API methods using blocks/attachments
28952993
return self.api_call("chat.update", json=kwargs)
28962994

2897-
def chat_scheduledMessages_list(
2898-
self,
2899-
*,
2900-
channel: Optional[str] = None,
2901-
cursor: Optional[str] = None,
2902-
latest: Optional[str] = None,
2903-
limit: Optional[int] = None,
2904-
oldest: Optional[str] = None,
2905-
team_id: Optional[str] = None,
2906-
**kwargs,
2907-
) -> SlackResponse:
2908-
"""Lists all scheduled messages.
2909-
https://api.slack.com/methods/chat.scheduledMessages.list
2910-
"""
2911-
kwargs.update(
2912-
{
2913-
"channel": channel,
2914-
"cursor": cursor,
2915-
"latest": latest,
2916-
"limit": limit,
2917-
"oldest": oldest,
2918-
"team_id": team_id,
2919-
}
2920-
)
2921-
return self.api_call("chat.scheduledMessages.list", params=kwargs)
2922-
29232995
def conversations_acceptSharedInvite(
29242996
self,
29252997
*,

slack_sdk/web/legacy_client.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2622,6 +2622,26 @@ def channels_unarchive(
26222622

26232623
# --------------------------
26242624

2625+
def chat_appendStream(
2626+
self,
2627+
*,
2628+
channel: str,
2629+
ts: str,
2630+
markdown_text: Optional[str],
2631+
**kwargs,
2632+
) -> Union[Future, SlackResponse]:
2633+
"""Appends text to an existing streaming conversation.
2634+
https://api.slack.com/methods/chat.appendStream
2635+
"""
2636+
kwargs.update(
2637+
{
2638+
"channel": channel,
2639+
"ts": ts,
2640+
"markdown_text": markdown_text,
2641+
}
2642+
)
2643+
return self.api_call("chat.appendStream", params=kwargs)
2644+
26252645
def chat_delete(
26262646
self,
26272647
*,
@@ -2932,6 +2952,55 @@ def chat_scheduledMessages_list(
29322952
)
29332953
return self.api_call("chat.scheduledMessages.list", params=kwargs)
29342954

2955+
def chat_startStream(
2956+
self,
2957+
*,
2958+
channel: str,
2959+
thread_ts: Optional[str] = None,
2960+
markdown_text: Optional[str] = None,
2961+
unfurl_links: Optional[bool] = None,
2962+
unfurl_media: Optional[bool] = None,
2963+
**kwargs,
2964+
) -> Union[Future, SlackResponse]:
2965+
"""Starts a new streaming conversation.
2966+
https://api.slack.com/methods/chat.startStream
2967+
"""
2968+
kwargs.update(
2969+
{
2970+
"channel": channel,
2971+
"thread_ts": thread_ts,
2972+
"markdown_text": markdown_text,
2973+
"unfurl_links": unfurl_links,
2974+
"unfurl_media": unfurl_media,
2975+
}
2976+
)
2977+
kwargs = _remove_none_values(kwargs)
2978+
return self.api_call("chat.startStream", params=kwargs)
2979+
2980+
def chat_stopStream(
2981+
self,
2982+
*,
2983+
channel: str,
2984+
ts: str,
2985+
markdown_text: Optional[str] = None,
2986+
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
2987+
**kwargs,
2988+
) -> Union[Future, SlackResponse]:
2989+
"""Finalizes and completes the streaming message.
2990+
https://api.slack.com/methods/chat.stopStream
2991+
"""
2992+
kwargs.update(
2993+
{
2994+
"channel": channel,
2995+
"ts": ts,
2996+
"markdown_text": markdown_text,
2997+
"blocks": blocks,
2998+
}
2999+
)
3000+
_parse_web_class_objects(kwargs)
3001+
kwargs = _remove_none_values(kwargs)
3002+
return self.api_call("chat.stopStream", json=kwargs)
3003+
29353004
def conversations_acceptSharedInvite(
29363005
self,
29373006
*,

0 commit comments

Comments
 (0)