Skip to content

Commit 793b1cd

Browse files
feat: support markdown_text parameter
1 parent 97f546f commit 793b1cd

File tree

5 files changed

+100
-20
lines changed

5 files changed

+100
-20
lines changed

slack_sdk/web/async_client.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from .internal_utils import (
2323
_parse_web_class_objects,
2424
_update_call_participants,
25-
_warn_if_text_or_attachment_fallback_is_missing,
25+
_warn_if_message_text_content_is_missing,
2626
_remove_none_values,
2727
_to_v2_file_upload_item,
2828
_validate_for_legacy_client,
@@ -2694,6 +2694,7 @@ async def chat_postEphemeral(
26942694
link_names: Optional[bool] = None,
26952695
username: Optional[str] = None,
26962696
parse: Optional[str] = None,
2697+
markdown_text: Optional[str] = None,
26972698
**kwargs,
26982699
) -> AsyncSlackResponse:
26992700
"""Sends an ephemeral message to a user in a channel.
@@ -2713,11 +2714,12 @@ async def chat_postEphemeral(
27132714
"link_names": link_names,
27142715
"username": username,
27152716
"parse": parse,
2717+
"markdown_text": markdown_text,
27162718
}
27172719
)
27182720
_parse_web_class_objects(kwargs)
27192721
kwargs = _remove_none_values(kwargs)
2720-
_warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs)
2722+
_warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs)
27212723
# NOTE: intentionally using json over params for the API methods using blocks/attachments
27222724
return await self.api_call("chat.postEphemeral", json=kwargs)
27232725

@@ -2741,6 +2743,7 @@ async def chat_postMessage(
27412743
username: Optional[str] = None,
27422744
parse: Optional[str] = None, # none, full
27432745
metadata: Optional[Union[Dict, Metadata]] = None,
2746+
markdown_text: Optional[str] = None,
27442747
**kwargs,
27452748
) -> AsyncSlackResponse:
27462749
"""Sends a message to a channel.
@@ -2765,11 +2768,12 @@ async def chat_postMessage(
27652768
"username": username,
27662769
"parse": parse,
27672770
"metadata": metadata,
2771+
"markdown_text": markdown_text,
27682772
}
27692773
)
27702774
_parse_web_class_objects(kwargs)
27712775
kwargs = _remove_none_values(kwargs)
2772-
_warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs)
2776+
_warn_if_message_text_content_is_missing("chat.postMessage", kwargs)
27732777
# NOTE: intentionally using json over params for the API methods using blocks/attachments
27742778
return await self.api_call("chat.postMessage", json=kwargs)
27752779

@@ -2778,7 +2782,7 @@ async def chat_scheduleMessage(
27782782
*,
27792783
channel: str,
27802784
post_at: Union[str, int],
2781-
text: str,
2785+
text: Optional[str] = None,
27822786
as_user: Optional[bool] = None,
27832787
attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None,
27842788
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
@@ -2789,6 +2793,7 @@ async def chat_scheduleMessage(
27892793
unfurl_media: Optional[bool] = None,
27902794
link_names: Optional[bool] = None,
27912795
metadata: Optional[Union[Dict, Metadata]] = None,
2796+
markdown_text: Optional[str] = None,
27922797
**kwargs,
27932798
) -> AsyncSlackResponse:
27942799
"""Schedules a message.
@@ -2809,11 +2814,12 @@ async def chat_scheduleMessage(
28092814
"unfurl_media": unfurl_media,
28102815
"link_names": link_names,
28112816
"metadata": metadata,
2817+
"markdown_text": markdown_text,
28122818
}
28132819
)
28142820
_parse_web_class_objects(kwargs)
28152821
kwargs = _remove_none_values(kwargs)
2816-
_warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs)
2822+
_warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs)
28172823
# NOTE: intentionally using json over params for the API methods using blocks/attachments
28182824
return await self.api_call("chat.scheduleMessage", json=kwargs)
28192825

@@ -2866,6 +2872,7 @@ async def chat_update(
28662872
parse: Optional[str] = None, # none, full
28672873
reply_broadcast: Optional[bool] = None,
28682874
metadata: Optional[Union[Dict, Metadata]] = None,
2875+
markdown_text: Optional[str] = None,
28692876
**kwargs,
28702877
) -> AsyncSlackResponse:
28712878
"""Updates a message in a channel.
@@ -2883,6 +2890,7 @@ async def chat_update(
28832890
"parse": parse,
28842891
"reply_broadcast": reply_broadcast,
28852892
"metadata": metadata,
2893+
"markdown_text": markdown_text,
28862894
}
28872895
)
28882896
if isinstance(file_ids, (list, tuple)):
@@ -2891,7 +2899,7 @@ async def chat_update(
28912899
kwargs.update({"file_ids": file_ids})
28922900
_parse_web_class_objects(kwargs)
28932901
kwargs = _remove_none_values(kwargs)
2894-
_warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs)
2902+
_warn_if_message_text_content_is_missing("chat.update", kwargs)
28952903
# NOTE: intentionally using json over params for API methods using blocks/attachments
28962904
return await self.api_call("chat.update", json=kwargs)
28972905

slack_sdk/web/client.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from .internal_utils import (
1313
_parse_web_class_objects,
1414
_update_call_participants,
15-
_warn_if_text_or_attachment_fallback_is_missing,
15+
_warn_if_message_text_content_is_missing,
1616
_remove_none_values,
1717
_to_v2_file_upload_item,
1818
_validate_for_legacy_client,
@@ -2684,6 +2684,7 @@ def chat_postEphemeral(
26842684
link_names: Optional[bool] = None,
26852685
username: Optional[str] = None,
26862686
parse: Optional[str] = None,
2687+
markdown_text: Optional[str] = None,
26872688
**kwargs,
26882689
) -> SlackResponse:
26892690
"""Sends an ephemeral message to a user in a channel.
@@ -2703,11 +2704,12 @@ def chat_postEphemeral(
27032704
"link_names": link_names,
27042705
"username": username,
27052706
"parse": parse,
2707+
"markdown_text": markdown_text,
27062708
}
27072709
)
27082710
_parse_web_class_objects(kwargs)
27092711
kwargs = _remove_none_values(kwargs)
2710-
_warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs)
2712+
_warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs)
27112713
# NOTE: intentionally using json over params for the API methods using blocks/attachments
27122714
return self.api_call("chat.postEphemeral", json=kwargs)
27132715

@@ -2731,6 +2733,7 @@ def chat_postMessage(
27312733
username: Optional[str] = None,
27322734
parse: Optional[str] = None, # none, full
27332735
metadata: Optional[Union[Dict, Metadata]] = None,
2736+
markdown_text: Optional[str] = None,
27342737
**kwargs,
27352738
) -> SlackResponse:
27362739
"""Sends a message to a channel.
@@ -2755,11 +2758,12 @@ def chat_postMessage(
27552758
"username": username,
27562759
"parse": parse,
27572760
"metadata": metadata,
2761+
"markdown_text": markdown_text,
27582762
}
27592763
)
27602764
_parse_web_class_objects(kwargs)
27612765
kwargs = _remove_none_values(kwargs)
2762-
_warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs)
2766+
_warn_if_message_text_content_is_missing("chat.postMessage", kwargs)
27632767
# NOTE: intentionally using json over params for the API methods using blocks/attachments
27642768
return self.api_call("chat.postMessage", json=kwargs)
27652769

@@ -2768,7 +2772,7 @@ def chat_scheduleMessage(
27682772
*,
27692773
channel: str,
27702774
post_at: Union[str, int],
2771-
text: str,
2775+
text: Optional[str] = None,
27722776
as_user: Optional[bool] = None,
27732777
attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None,
27742778
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
@@ -2779,6 +2783,7 @@ def chat_scheduleMessage(
27792783
unfurl_media: Optional[bool] = None,
27802784
link_names: Optional[bool] = None,
27812785
metadata: Optional[Union[Dict, Metadata]] = None,
2786+
markdown_text: Optional[str] = None,
27822787
**kwargs,
27832788
) -> SlackResponse:
27842789
"""Schedules a message.
@@ -2799,11 +2804,12 @@ def chat_scheduleMessage(
27992804
"unfurl_media": unfurl_media,
28002805
"link_names": link_names,
28012806
"metadata": metadata,
2807+
"markdown_text": markdown_text,
28022808
}
28032809
)
28042810
_parse_web_class_objects(kwargs)
28052811
kwargs = _remove_none_values(kwargs)
2806-
_warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs)
2812+
_warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs)
28072813
# NOTE: intentionally using json over params for the API methods using blocks/attachments
28082814
return self.api_call("chat.scheduleMessage", json=kwargs)
28092815

@@ -2856,6 +2862,7 @@ def chat_update(
28562862
parse: Optional[str] = None, # none, full
28572863
reply_broadcast: Optional[bool] = None,
28582864
metadata: Optional[Union[Dict, Metadata]] = None,
2865+
markdown_text: Optional[str] = None,
28592866
**kwargs,
28602867
) -> SlackResponse:
28612868
"""Updates a message in a channel.
@@ -2873,6 +2880,7 @@ def chat_update(
28732880
"parse": parse,
28742881
"reply_broadcast": reply_broadcast,
28752882
"metadata": metadata,
2883+
"markdown_text": markdown_text,
28762884
}
28772885
)
28782886
if isinstance(file_ids, (list, tuple)):
@@ -2881,7 +2889,7 @@ def chat_update(
28812889
kwargs.update({"file_ids": file_ids})
28822890
_parse_web_class_objects(kwargs)
28832891
kwargs = _remove_none_values(kwargs)
2884-
_warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs)
2892+
_warn_if_message_text_content_is_missing("chat.update", kwargs)
28852893
# NOTE: intentionally using json over params for API methods using blocks/attachments
28862894
return self.api_call("chat.update", json=kwargs)
28872895

slack_sdk/web/internal_utils.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,10 +247,12 @@ def _to_0_or_1_if_bool(v: Any) -> Union[Any, str]:
247247
return v
248248

249249

250-
def _warn_if_text_or_attachment_fallback_is_missing(endpoint: str, kwargs: Dict[str, Any]) -> None:
250+
def _warn_if_message_text_content_is_missing(endpoint: str, kwargs: Dict[str, Any]) -> None:
251251
text = kwargs.get("text")
252-
if text and len(text.strip()) > 0:
252+
markdown_text = kwargs.get("markdown_text")
253+
if (text and len(text.strip()) > 0) or (markdown_text and len(markdown_text.strip()) > 0):
253254
# If a top-level text arg is provided, we are good. This is the recommended accessibility field to always provide.
255+
# If a top-level markdown_text arg is provided, we are good. It should not be used in conjunction with blocks or text.
254256
return
255257

256258
# for unit tests etc.

slack_sdk/web/legacy_client.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from .internal_utils import (
2525
_parse_web_class_objects,
2626
_update_call_participants,
27-
_warn_if_text_or_attachment_fallback_is_missing,
27+
_warn_if_message_text_content_is_missing,
2828
_remove_none_values,
2929
_to_v2_file_upload_item,
3030
_validate_for_legacy_client,
@@ -2696,6 +2696,7 @@ def chat_postEphemeral(
26962696
link_names: Optional[bool] = None,
26972697
username: Optional[str] = None,
26982698
parse: Optional[str] = None,
2699+
markdown_text: Optional[str] = None,
26992700
**kwargs,
27002701
) -> Union[Future, SlackResponse]:
27012702
"""Sends an ephemeral message to a user in a channel.
@@ -2715,11 +2716,12 @@ def chat_postEphemeral(
27152716
"link_names": link_names,
27162717
"username": username,
27172718
"parse": parse,
2719+
"markdown_text": markdown_text,
27182720
}
27192721
)
27202722
_parse_web_class_objects(kwargs)
27212723
kwargs = _remove_none_values(kwargs)
2722-
_warn_if_text_or_attachment_fallback_is_missing("chat.postEphemeral", kwargs)
2724+
_warn_if_message_text_content_is_missing("chat.postEphemeral", kwargs)
27232725
# NOTE: intentionally using json over params for the API methods using blocks/attachments
27242726
return self.api_call("chat.postEphemeral", json=kwargs)
27252727

@@ -2743,6 +2745,7 @@ def chat_postMessage(
27432745
username: Optional[str] = None,
27442746
parse: Optional[str] = None, # none, full
27452747
metadata: Optional[Union[Dict, Metadata]] = None,
2748+
markdown_text: Optional[str] = None,
27462749
**kwargs,
27472750
) -> Union[Future, SlackResponse]:
27482751
"""Sends a message to a channel.
@@ -2767,11 +2770,12 @@ def chat_postMessage(
27672770
"username": username,
27682771
"parse": parse,
27692772
"metadata": metadata,
2773+
"markdown_text": markdown_text,
27702774
}
27712775
)
27722776
_parse_web_class_objects(kwargs)
27732777
kwargs = _remove_none_values(kwargs)
2774-
_warn_if_text_or_attachment_fallback_is_missing("chat.postMessage", kwargs)
2778+
_warn_if_message_text_content_is_missing("chat.postMessage", kwargs)
27752779
# NOTE: intentionally using json over params for the API methods using blocks/attachments
27762780
return self.api_call("chat.postMessage", json=kwargs)
27772781

@@ -2780,7 +2784,7 @@ def chat_scheduleMessage(
27802784
*,
27812785
channel: str,
27822786
post_at: Union[str, int],
2783-
text: str,
2787+
text: Optional[str] = None,
27842788
as_user: Optional[bool] = None,
27852789
attachments: Optional[Union[str, Sequence[Union[Dict, Attachment]]]] = None,
27862790
blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = None,
@@ -2791,6 +2795,7 @@ def chat_scheduleMessage(
27912795
unfurl_media: Optional[bool] = None,
27922796
link_names: Optional[bool] = None,
27932797
metadata: Optional[Union[Dict, Metadata]] = None,
2798+
markdown_text: Optional[str] = None,
27942799
**kwargs,
27952800
) -> Union[Future, SlackResponse]:
27962801
"""Schedules a message.
@@ -2811,11 +2816,12 @@ def chat_scheduleMessage(
28112816
"unfurl_media": unfurl_media,
28122817
"link_names": link_names,
28132818
"metadata": metadata,
2819+
"markdown_text": markdown_text,
28142820
}
28152821
)
28162822
_parse_web_class_objects(kwargs)
28172823
kwargs = _remove_none_values(kwargs)
2818-
_warn_if_text_or_attachment_fallback_is_missing("chat.scheduleMessage", kwargs)
2824+
_warn_if_message_text_content_is_missing("chat.scheduleMessage", kwargs)
28192825
# NOTE: intentionally using json over params for the API methods using blocks/attachments
28202826
return self.api_call("chat.scheduleMessage", json=kwargs)
28212827

@@ -2868,6 +2874,7 @@ def chat_update(
28682874
parse: Optional[str] = None, # none, full
28692875
reply_broadcast: Optional[bool] = None,
28702876
metadata: Optional[Union[Dict, Metadata]] = None,
2877+
markdown_text: Optional[str] = None,
28712878
**kwargs,
28722879
) -> Union[Future, SlackResponse]:
28732880
"""Updates a message in a channel.
@@ -2885,6 +2892,7 @@ def chat_update(
28852892
"parse": parse,
28862893
"reply_broadcast": reply_broadcast,
28872894
"metadata": metadata,
2895+
"markdown_text": markdown_text,
28882896
}
28892897
)
28902898
if isinstance(file_ids, (list, tuple)):
@@ -2893,7 +2901,7 @@ def chat_update(
28932901
kwargs.update({"file_ids": file_ids})
28942902
_parse_web_class_objects(kwargs)
28952903
kwargs = _remove_none_values(kwargs)
2896-
_warn_if_text_or_attachment_fallback_is_missing("chat.update", kwargs)
2904+
_warn_if_message_text_content_is_missing("chat.update", kwargs)
28972905
# NOTE: intentionally using json over params for API methods using blocks/attachments
28982906
return self.api_call("chat.update", json=kwargs)
28992907

0 commit comments

Comments
 (0)