Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package samples;

import com.slack.api.bolt.App;
import com.slack.api.bolt.AppConfig;
import com.slack.api.model.event.SharedChannelInviteAcceptedEvent;
import com.slack.api.model.event.SharedChannelInviteApprovedEvent;
import com.slack.api.model.event.SharedChannelInviteDeclinedEvent;
import com.slack.api.model.event.SharedChannelInviteReceivedEvent;
import lombok.extern.slf4j.Slf4j;
import util.ResourceLoader;
import util.TestSlackAppServer;

@Slf4j
public class EventsSample_SlackConnectInvites {

public static void main(String[] args) throws Exception {
AppConfig config = ResourceLoader.loadAppConfig("appConfig_SlackConnectReceiver.json");
App app = new App(config);

app.event(SharedChannelInviteReceivedEvent.class, (event, ctx) -> {
ctx.logger.info("received - {}", event);
return ctx.ack();
});
app.event(SharedChannelInviteAcceptedEvent.class, (event, ctx) -> {
ctx.logger.info("accepted - {}", event);
return ctx.ack();
});
app.event(SharedChannelInviteApprovedEvent.class, (event, ctx) -> {
ctx.logger.info("approved - {}", event);
return ctx.ack();
});
app.event(SharedChannelInviteDeclinedEvent.class, (event, ctx) -> {
ctx.logger.info("declined - {}", event);
return ctx.ack();
});

TestSlackAppServer server = new TestSlackAppServer(app);
server.start();
}

}
9 changes: 9 additions & 0 deletions json-logs/samples/api/conversations.acceptSharedInvite.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"ok": false,
"error": "",
"implicit_approval": false,
"channel_id": "C00000000",
"invite_id": "I00000000",
"needed": "",
"provided": ""
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"ok": false,
"error": "",
"needed": "",
"provided": ""
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"ok": false,
"error": "",
"needed": "",
"provided": ""
}
10 changes: 10 additions & 0 deletions json-logs/samples/api/conversations.inviteShared.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"ok": false,
"error": "",
"url": "https://www.example.com/",
"invite_id": "I00000000",
"conf_code": "",
"is_legacy_shared_channel": false,
"needed": "",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When are the needed and provided fields returned by the API or they a feature of the java-sdk impl? I tried playing around with the api methods tester to generate these fields, but I didn't see these returned.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"provided": ""
}
146 changes: 146 additions & 0 deletions json-logs/samples/api/conversations.listConnectInvites.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
{
"ok": false,
"error": "",
"arg": "",
"invites": [
{
"direction": "",
"status": "",
"date_last_updated": 12345,
"invite_type": "",
"invite": {
"id": "I00000000",
"date_created": 12345,
"date_invalid": 12345,
"inviting_team": {
"id": "E00000000",
"name": "",
"icon": {
"image_102": "https://www.example.com/",
"image_132": "https://www.example.com/",
"image_230": "https://www.example.com/",
"image_34": "https://www.example.com/",
"image_44": "https://www.example.com/",
"image_68": "https://www.example.com/",
"image_88": "https://www.example.com/",
"image_default": false,
"image_original": "https://www.example.com/"
},
"is_verified": false,
"domain": "",
"date_created": 12345
},
"inviting_user": {
"id": "U00000000",
"team_id": "E00000000",
"name": "",
"updated": 12345,
"profile": {
"real_name": "",
"display_name": "",
"real_name_normalized": "",
"display_name_normalized": "",
"team": "E00000000",
"avatar_hash": "",
"email": "",
"image_24": "https://www.example.com/",
"image_32": "https://www.example.com/",
"image_48": "https://www.example.com/",
"image_72": "https://www.example.com/",
"image_192": "https://www.example.com/",
"image_512": "https://www.example.com/",
"image_1024": "https://www.example.com/",
"image_original": "https://www.example.com/",
"is_custom_image": false
}
},
"link": "https://www.example.com/",
"recipient_user_id": "U00000000",
"recipient_email": ""
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This does not exist in the document

},
"channel": {
"id": "C00000000",
"is_im": false,
"is_private": false,
"name": ""
},
"acceptances": [
{
"approval_status": "",
"date_accepted": 12345,
"date_invalid": 12345,
"date_last_updated": 12345,
"accepting_team": {
"id": "T00000000",
"name": "",
"icon": {
"image_102": "https://www.example.com/",
"image_132": "https://www.example.com/",
"image_230": "https://www.example.com/",
"image_34": "https://www.example.com/",
"image_44": "https://www.example.com/",
"image_68": "https://www.example.com/",
"image_88": "https://www.example.com/",
"image_original": "https://www.example.com/"
},
"is_verified": false,
"domain": "",
"date_created": 12345
},
"accepting_user": {
"id": "U00000000",
"team_id": "T00000000",
"name": "",
"updated": 12345,
"profile": {
"real_name": "",
"display_name": "",
"real_name_normalized": "",
"display_name_normalized": "",
"team": "T00000000",
"avatar_hash": "",
"email": "",
"image_24": "https://www.example.com/",
"image_32": "https://www.example.com/",
"image_48": "https://www.example.com/",
"image_72": "https://www.example.com/",
"image_192": "https://www.example.com/",
"image_512": "https://www.example.com/"
}
},
"reviews": [
{
"type": "",
"date_review": 12345,
"reviewing_team": {
"id": "T00000000",
"name": "",
"icon": {
"image_102": "https://www.example.com/",
"image_132": "https://www.example.com/",
"image_230": "https://www.example.com/",
"image_34": "https://www.example.com/",
"image_44": "https://www.example.com/",
"image_68": "https://www.example.com/",
"image_88": "https://www.example.com/",
"image_original": "https://www.example.com/"
},
"is_verified": false,
"domain": "",
"date_created": 12345
}
}
]
}
]
}
],
"response_metadata": {
"next_cursor": "",
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for pagination

"messages": [
""
]
},
"needed": "",
"provided": ""
}
Original file line number Diff line number Diff line change
Expand Up @@ -795,6 +795,29 @@ CompletableFuture<AdminConversationsWhitelistListGroupsLinkedToChannelResponse>

CompletableFuture<ConversationsUnarchiveResponse> conversationsUnarchive(RequestConfigurator<ConversationsUnarchiveRequest.ConversationsUnarchiveRequestBuilder> req);

// -------------
// Slack Connect

CompletableFuture<ConversationsInviteSharedResponse> conversationsInviteShared(ConversationsInviteSharedRequest req);

CompletableFuture<ConversationsInviteSharedResponse> conversationsInviteShared(RequestConfigurator<ConversationsInviteSharedRequest.ConversationsInviteSharedRequestBuilder> req);

CompletableFuture<ConversationsAcceptSharedInviteResponse> conversationsAcceptSharedInvite(ConversationsAcceptSharedInviteRequest req);

CompletableFuture<ConversationsAcceptSharedInviteResponse> conversationsAcceptSharedInvite(RequestConfigurator<ConversationsAcceptSharedInviteRequest.ConversationsAcceptSharedInviteRequestBuilder> req);

CompletableFuture<ConversationsApproveSharedInviteResponse> conversationsApproveSharedInvite(ConversationsApproveSharedInviteRequest req);

CompletableFuture<ConversationsApproveSharedInviteResponse> conversationsApproveSharedInvite(RequestConfigurator<ConversationsApproveSharedInviteRequest.ConversationsApproveSharedInviteRequestBuilder> req);

CompletableFuture<ConversationsDeclineSharedInviteResponse> conversationsDeclineSharedInvite(ConversationsDeclineSharedInviteRequest req);

CompletableFuture<ConversationsDeclineSharedInviteResponse> conversationsDeclineSharedInvite(RequestConfigurator<ConversationsDeclineSharedInviteRequest.ConversationsDeclineSharedInviteRequestBuilder> req);

CompletableFuture<ConversationsListConnectInvitesResponse> conversationsListConnectInvites(ConversationsListConnectInvitesRequest req);

CompletableFuture<ConversationsListConnectInvitesResponse> conversationsListConnectInvites(RequestConfigurator<ConversationsListConnectInvitesRequest.ConversationsListConnectInvitesRequestBuilder> req);

// ------------------------------
// dialog
// ------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,13 @@ private Methods() {
public static final String CONVERSATIONS_SET_TOPIC = "conversations.setTopic";
public static final String CONVERSATIONS_UNARCHIVE = "conversations.unarchive";

// Slack Connect APIs
public static final String CONVERSATIONS_INVITE_SHARED = "conversations.inviteShared";
public static final String CONVERSATIONS_ACCEPT_SHARED_INVITE = "conversations.acceptSharedInvite";
public static final String CONVERSATIONS_APPROVE_SHARED_INVITE = "conversations.approveSharedInvite";
public static final String CONVERSATIONS_DECLINE_SHARED_INVITE = "conversations.declineSharedInvite";
public static final String CONVERSATIONS_LIST_CONNECT_INVITES = "conversations.listConnectInvites";

// ------------------------------
// dialog
// ------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1078,6 +1078,29 @@ AdminUsergroupsRemoveChannelsResponse adminUsergroupsRemoveChannels(

ConversationsUnarchiveResponse conversationsUnarchive(RequestConfigurator<ConversationsUnarchiveRequest.ConversationsUnarchiveRequestBuilder> req) throws IOException, SlackApiException;

// -------------
// Slack Connect

ConversationsInviteSharedResponse conversationsInviteShared(ConversationsInviteSharedRequest req) throws IOException, SlackApiException;

ConversationsInviteSharedResponse conversationsInviteShared(RequestConfigurator<ConversationsInviteSharedRequest.ConversationsInviteSharedRequestBuilder> req) throws IOException, SlackApiException;

ConversationsAcceptSharedInviteResponse conversationsAcceptSharedInvite(ConversationsAcceptSharedInviteRequest req) throws IOException, SlackApiException;

ConversationsAcceptSharedInviteResponse conversationsAcceptSharedInvite(RequestConfigurator<ConversationsAcceptSharedInviteRequest.ConversationsAcceptSharedInviteRequestBuilder> req) throws IOException, SlackApiException;

ConversationsApproveSharedInviteResponse conversationsApproveSharedInvite(ConversationsApproveSharedInviteRequest req) throws IOException, SlackApiException;

ConversationsApproveSharedInviteResponse conversationsApproveSharedInvite(RequestConfigurator<ConversationsApproveSharedInviteRequest.ConversationsApproveSharedInviteRequestBuilder> req) throws IOException, SlackApiException;

ConversationsDeclineSharedInviteResponse conversationsDeclineSharedInvite(ConversationsDeclineSharedInviteRequest req) throws IOException, SlackApiException;

ConversationsDeclineSharedInviteResponse conversationsDeclineSharedInvite(RequestConfigurator<ConversationsDeclineSharedInviteRequest.ConversationsDeclineSharedInviteRequestBuilder> req) throws IOException, SlackApiException;

ConversationsListConnectInvitesResponse conversationsListConnectInvites(ConversationsListConnectInvitesRequest req) throws IOException, SlackApiException;

ConversationsListConnectInvitesResponse conversationsListConnectInvites(RequestConfigurator<ConversationsListConnectInvitesRequest.ConversationsListConnectInvitesRequestBuilder> req) throws IOException, SlackApiException;

// ------------------------------
// dialog
// ------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,12 @@ public static void setRateLimitTier(String methodName, MethodsRateLimitTier tier
setRateLimitTier(MPIM_MARK, Tier3);
setRateLimitTier(GROUPS_CREATE_CHILD, Tier2);

setRateLimitTier(CONVERSATIONS_INVITE_SHARED, Tier2);
setRateLimitTier(CONVERSATIONS_ACCEPT_SHARED_INVITE, Tier1);
setRateLimitTier(CONVERSATIONS_APPROVE_SHARED_INVITE, Tier1);
setRateLimitTier(CONVERSATIONS_DECLINE_SHARED_INVITE, Tier1);
setRateLimitTier(CONVERSATIONS_LIST_CONNECT_INVITES, Tier1);

setRateLimitTier(DIALOG_OPEN, Tier4);

setRateLimitTier(DND_END_DND, Tier2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1349,6 +1349,51 @@ public static FormBody.Builder toForm(ConversationsUnarchiveRequest req) {
return form;
}

public static FormBody.Builder toForm(ConversationsInviteSharedRequest req) {
FormBody.Builder form = new FormBody.Builder();
setIfNotNull("channel", req.getChannel(), form);
if (req.getEmails() != null) {
setIfNotNull("emails", req.getEmails().stream().collect(joining(",")), form);
}
if (req.getUserIds() != null) {
setIfNotNull("user_ids", req.getUserIds().stream().collect(joining(",")), form);
}
return form;
}

public static FormBody.Builder toForm(ConversationsAcceptSharedInviteRequest req) {
FormBody.Builder form = new FormBody.Builder();
setIfNotNull("channel_name", req.getChannelName(), form);
setIfNotNull("channel_id", req.getChannelId(), form);
setIfNotNull("free_trial_accept", req.getFreeTrialAccept(), form);
setIfNotNull("invite_id", req.getInviteId(), form);
setIfNotNull("is_private", req.getIsPrivate(), form);
setIfNotNull("team_id", req.getTeamId(), form);
return form;
}

public static FormBody.Builder toForm(ConversationsApproveSharedInviteRequest req) {
FormBody.Builder form = new FormBody.Builder();
setIfNotNull("invite_id", req.getInviteId(), form);
setIfNotNull("target_team", req.getTargetTeam(), form);
return form;
}

public static FormBody.Builder toForm(ConversationsDeclineSharedInviteRequest req) {
FormBody.Builder form = new FormBody.Builder();
setIfNotNull("invite_id", req.getInviteId(), form);
setIfNotNull("target_team", req.getTargetTeam(), form);
return form;
}

public static FormBody.Builder toForm(ConversationsListConnectInvitesRequest req) {
FormBody.Builder form = new FormBody.Builder();
setIfNotNull("count", req.getCount(), form);
setIfNotNull("cursor", req.getCursor(), form);
setIfNotNull("team_id", req.getTeamId(), form);
return form;
}

public static FormBody.Builder toForm(DialogOpenRequest req) {
FormBody.Builder form = new FormBody.Builder();
setIfNotNull("trigger_id", req.getTriggerId(), form);
Expand Down
Loading