Skip to content

Commit 0e8a686

Browse files
feat: add support for conversations.requestShared approve, deny & list (#1530)
* feat: add support for `conversations.requestShared` `approve` and `deny` APIs * Update the optional message type for approve * Add missing methods * Fix duplicate message field setting
1 parent 062b8c2 commit 0e8a686

File tree

4 files changed

+215
-2
lines changed

4 files changed

+215
-2
lines changed

slack_sdk/web/async_client.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
99

1010
"""A Python module for interacting with Slack's Web API."""
11+
1112
import json
1213
import os
1314
import warnings
@@ -3191,6 +3192,74 @@ async def conversations_replies(
31913192
)
31923193
return await self.api_call("conversations.replies", http_verb="GET", params=kwargs)
31933194

3195+
async def conversations_requestSharedInvite_approve(
3196+
self,
3197+
*,
3198+
invite_id: str,
3199+
channel_id: Optional[str] = None,
3200+
is_external_limited: Optional[str] = None,
3201+
message: Optional[Dict[str, Any]] = None,
3202+
**kwargs,
3203+
) -> AsyncSlackResponse:
3204+
"""Approve a request to add an external user to a channel. This also sends them a Slack Connect invite.
3205+
https://api.slack.com/methods/conversations.requestSharedInvite.approve
3206+
"""
3207+
kwargs.update(
3208+
{
3209+
"invite_id": invite_id,
3210+
"channel_id": channel_id,
3211+
"is_external_limited": is_external_limited,
3212+
}
3213+
)
3214+
if message is not None:
3215+
kwargs.update({"message": json.dumps(message)})
3216+
return await self.api_call("conversations.requestSharedInvite.approve", params=kwargs)
3217+
3218+
async def conversations_requestSharedInvite_deny(
3219+
self,
3220+
*,
3221+
invite_id: str,
3222+
message: Optional[str] = None,
3223+
**kwargs,
3224+
) -> AsyncSlackResponse:
3225+
"""Deny a request to invite an external user to a channel.
3226+
https://api.slack.com/methods/conversations.requestSharedInvite.deny
3227+
"""
3228+
kwargs.update({"invite_id": invite_id, "message": message})
3229+
return await self.api_call("conversations.requestSharedInvite.deny", params=kwargs)
3230+
3231+
async def conversations_requestSharedInvite_list(
3232+
self,
3233+
*,
3234+
cursor: Optional[str] = None,
3235+
include_approved: Optional[bool] = None,
3236+
include_denied: Optional[bool] = None,
3237+
include_expired: Optional[bool] = None,
3238+
invite_ids: Optional[Union[str, Sequence[str]]] = None,
3239+
limit: Optional[int] = None,
3240+
user_id: Optional[str] = None,
3241+
**kwargs,
3242+
) -> AsyncSlackResponse:
3243+
"""Lists requests to add external users to channels with ability to filter.
3244+
https://api.slack.com/methods/conversations.requestSharedInvite.list
3245+
"""
3246+
kwargs.update(
3247+
{
3248+
"cursor": cursor,
3249+
"include_approved": include_approved,
3250+
"include_denied": include_denied,
3251+
"include_expired": include_expired,
3252+
"limit": limit,
3253+
"user_id": user_id,
3254+
}
3255+
)
3256+
if invite_ids is not None:
3257+
if isinstance(invite_ids, (list, Tuple)):
3258+
kwargs.update({"invite_ids": ",".join(invite_ids)})
3259+
else:
3260+
kwargs.update({"invite_ids": invite_ids})
3261+
return await self.api_call("conversations.requestSharedInvite.list", params=kwargs)
3262+
31943263
async def conversations_setPurpose(
31953264
self,
31963265
*,

slack_sdk/web/client.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
"""A Python module for interacting with Slack's Web API."""
2+
23
import json
34
import os
45
import warnings
@@ -3182,6 +3183,74 @@ def conversations_replies(
31823183
)
31833184
return self.api_call("conversations.replies", http_verb="GET", params=kwargs)
31843185

3186+
def conversations_requestSharedInvite_approve(
3187+
self,
3188+
*,
3189+
invite_id: str,
3190+
channel_id: Optional[str] = None,
3191+
is_external_limited: Optional[str] = None,
3192+
message: Optional[Dict[str, Any]] = None,
3193+
**kwargs,
3194+
) -> SlackResponse:
3195+
"""Approve a request to add an external user to a channel. This also sends them a Slack Connect invite.
3196+
https://api.slack.com/methods/conversations.requestSharedInvite.approve
3197+
"""
3198+
kwargs.update(
3199+
{
3200+
"invite_id": invite_id,
3201+
"channel_id": channel_id,
3202+
"is_external_limited": is_external_limited,
3203+
}
3204+
)
3205+
if message is not None:
3206+
kwargs.update({"message": json.dumps(message)})
3207+
return self.api_call("conversations.requestSharedInvite.approve", params=kwargs)
3208+
3209+
def conversations_requestSharedInvite_deny(
3210+
self,
3211+
*,
3212+
invite_id: str,
3213+
message: Optional[str] = None,
3214+
**kwargs,
3215+
) -> SlackResponse:
3216+
"""Deny a request to invite an external user to a channel.
3217+
https://api.slack.com/methods/conversations.requestSharedInvite.deny
3218+
"""
3219+
kwargs.update({"invite_id": invite_id, "message": message})
3220+
return self.api_call("conversations.requestSharedInvite.deny", params=kwargs)
3221+
3222+
def conversations_requestSharedInvite_list(
3223+
self,
3224+
*,
3225+
cursor: Optional[str] = None,
3226+
include_approved: Optional[bool] = None,
3227+
include_denied: Optional[bool] = None,
3228+
include_expired: Optional[bool] = None,
3229+
invite_ids: Optional[Union[str, Sequence[str]]] = None,
3230+
limit: Optional[int] = None,
3231+
user_id: Optional[str] = None,
3232+
**kwargs,
3233+
) -> SlackResponse:
3234+
"""Lists requests to add external users to channels with ability to filter.
3235+
https://api.slack.com/methods/conversations.requestSharedInvite.list
3236+
"""
3237+
kwargs.update(
3238+
{
3239+
"cursor": cursor,
3240+
"include_approved": include_approved,
3241+
"include_denied": include_denied,
3242+
"include_expired": include_expired,
3243+
"limit": limit,
3244+
"user_id": user_id,
3245+
}
3246+
)
3247+
if invite_ids is not None:
3248+
if isinstance(invite_ids, (list, Tuple)):
3249+
kwargs.update({"invite_ids": ",".join(invite_ids)})
3250+
else:
3251+
kwargs.update({"invite_ids": invite_ids})
3252+
return self.api_call("conversations.requestSharedInvite.list", params=kwargs)
3253+
31853254
def conversations_setPurpose(
31863255
self,
31873256
*,

slack_sdk/web/legacy_client.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from asyncio import Future
1111

1212
"""A Python module for interacting with Slack's Web API."""
13+
1314
import json
1415
import os
1516
import warnings
@@ -3193,6 +3194,74 @@ def conversations_replies(
31933194
)
31943195
return self.api_call("conversations.replies", http_verb="GET", params=kwargs)
31953196

3197+
def conversations_requestSharedInvite_approve(
3198+
self,
3199+
*,
3200+
invite_id: str,
3201+
channel_id: Optional[str] = None,
3202+
is_external_limited: Optional[str] = None,
3203+
message: Optional[Dict[str, Any]] = None,
3204+
**kwargs,
3205+
) -> Union[Future, SlackResponse]:
3206+
"""Approve a request to add an external user to a channel. This also sends them a Slack Connect invite.
3207+
https://api.slack.com/methods/conversations.requestSharedInvite.approve
3208+
"""
3209+
kwargs.update(
3210+
{
3211+
"invite_id": invite_id,
3212+
"channel_id": channel_id,
3213+
"is_external_limited": is_external_limited,
3214+
}
3215+
)
3216+
if message is not None:
3217+
kwargs.update({"message": json.dumps(message)})
3218+
return self.api_call("conversations.requestSharedInvite.approve", params=kwargs)
3219+
3220+
def conversations_requestSharedInvite_deny(
3221+
self,
3222+
*,
3223+
invite_id: str,
3224+
message: Optional[str] = None,
3225+
**kwargs,
3226+
) -> Union[Future, SlackResponse]:
3227+
"""Deny a request to invite an external user to a channel.
3228+
https://api.slack.com/methods/conversations.requestSharedInvite.deny
3229+
"""
3230+
kwargs.update({"invite_id": invite_id, "message": message})
3231+
return self.api_call("conversations.requestSharedInvite.deny", params=kwargs)
3232+
3233+
def conversations_requestSharedInvite_list(
3234+
self,
3235+
*,
3236+
cursor: Optional[str] = None,
3237+
include_approved: Optional[bool] = None,
3238+
include_denied: Optional[bool] = None,
3239+
include_expired: Optional[bool] = None,
3240+
invite_ids: Optional[Union[str, Sequence[str]]] = None,
3241+
limit: Optional[int] = None,
3242+
user_id: Optional[str] = None,
3243+
**kwargs,
3244+
) -> Union[Future, SlackResponse]:
3245+
"""Lists requests to add external users to channels with ability to filter.
3246+
https://api.slack.com/methods/conversations.requestSharedInvite.list
3247+
"""
3248+
kwargs.update(
3249+
{
3250+
"cursor": cursor,
3251+
"include_approved": include_approved,
3252+
"include_denied": include_denied,
3253+
"include_expired": include_expired,
3254+
"limit": limit,
3255+
"user_id": user_id,
3256+
}
3257+
)
3258+
if invite_ids is not None:
3259+
if isinstance(invite_ids, (list, Tuple)):
3260+
kwargs.update({"invite_ids": ",".join(invite_ids)})
3261+
else:
3262+
kwargs.update({"invite_ids": invite_ids})
3263+
return self.api_call("conversations.requestSharedInvite.list", params=kwargs)
3264+
31963265
def conversations_setPurpose(
31973266
self,
31983267
*,

0 commit comments

Comments
 (0)