Skip to content

Commit c9a204a

Browse files
committed
Add complete/fail to context
1 parent 0a077ce commit c9a204a

12 files changed

Lines changed: 199 additions & 45 deletions

File tree

bolt/src/main/java/com/slack/api/bolt/context/Context.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ public abstract class Context {
6969
*/
7070
protected String functionBotAccessToken;
7171

72+
/**
73+
* The ID of function_executed event delivery.
74+
*/
75+
protected String functionExecutionId;
76+
7277
/**
7378
* The scopes associated to the botToken
7479
*/
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.slack.api.bolt.context;
2+
3+
import com.slack.api.methods.MethodsClient;
4+
import com.slack.api.methods.SlackApiException;
5+
import com.slack.api.methods.request.chat.ChatPostMessageRequest;
6+
import com.slack.api.methods.response.chat.ChatPostMessageResponse;
7+
import com.slack.api.methods.response.functions.FunctionsCompleteErrorResponse;
8+
import com.slack.api.methods.response.functions.FunctionsCompleteSuccessResponse;
9+
import com.slack.api.model.block.LayoutBlock;
10+
11+
import java.io.IOException;
12+
import java.util.List;
13+
import java.util.Map;
14+
15+
public interface FunctionUtility {
16+
17+
String getFunctionExecutionId();
18+
19+
MethodsClient client();
20+
21+
default FunctionsCompleteSuccessResponse complete(Map<String, ?> outputs) throws IOException, SlackApiException {
22+
return this.client().functionsCompleteSuccess(r -> r
23+
.functionExecutionId(this.getFunctionExecutionId())
24+
.outputs(outputs)
25+
);
26+
}
27+
28+
default FunctionsCompleteErrorResponse fail(String error) throws IOException, SlackApiException {
29+
return this.client().functionsCompleteError(r -> r
30+
.functionExecutionId(this.getFunctionExecutionId())
31+
.error(error)
32+
);
33+
}
34+
35+
}

bolt/src/main/java/com/slack/api/bolt/context/builtin/ActionContext.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.slack.api.bolt.context.ActionRespondUtility;
44
import com.slack.api.bolt.context.Context;
5+
import com.slack.api.bolt.context.FunctionUtility;
56
import com.slack.api.bolt.util.Responder;
67
import lombok.*;
78

@@ -15,7 +16,7 @@
1516
@AllArgsConstructor
1617
@ToString(callSuper = true)
1718
@EqualsAndHashCode(callSuper = false)
18-
public class ActionContext extends Context implements ActionRespondUtility {
19+
public class ActionContext extends Context implements ActionRespondUtility, FunctionUtility {
1920

2021
private String triggerId;
2122
private String responseUrl;
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
11
package com.slack.api.bolt.context.builtin;
22

33
import com.slack.api.bolt.context.Context;
4+
import com.slack.api.bolt.context.FunctionUtility;
45
import com.slack.api.bolt.context.SayUtility;
6+
import com.slack.api.methods.SlackApiException;
7+
import com.slack.api.methods.response.functions.FunctionsCompleteErrorResponse;
8+
import com.slack.api.methods.response.functions.FunctionsCompleteSuccessResponse;
59
import lombok.*;
610

11+
import java.io.IOException;
12+
import java.util.Map;
13+
714
@Getter
815
@Setter
916
@Builder
1017
@ToString(callSuper = true)
1118
@EqualsAndHashCode(callSuper = false)
1219
@NoArgsConstructor
1320
@AllArgsConstructor
14-
public class EventContext extends Context implements SayUtility {
21+
public class EventContext extends Context implements SayUtility, FunctionUtility {
1522

1623
private String channelId;
1724

@@ -21,5 +28,4 @@ public class EventContext extends Context implements SayUtility {
2128
// X-Slack-Retry-Reason: http_error in HTTP Mode
2229
// "retry_reason": "timeout", in Socket Mode
2330
private String retryReason;
24-
2531
}

bolt/src/main/java/com/slack/api/bolt/context/builtin/ViewSubmissionContext.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.slack.api.app_backend.views.payload.ViewSubmissionPayload;
55
import com.slack.api.app_backend.views.response.ViewSubmissionResponse;
66
import com.slack.api.bolt.context.Context;
7+
import com.slack.api.bolt.context.FunctionUtility;
78
import com.slack.api.bolt.context.InputBlockRespondUtility;
89
import com.slack.api.bolt.util.Responder;
910
import com.slack.api.bolt.response.Response;
@@ -20,7 +21,7 @@
2021
@AllArgsConstructor
2122
@ToString(callSuper = true)
2223
@EqualsAndHashCode(callSuper = false)
23-
public class ViewSubmissionContext extends Context implements InputBlockRespondUtility {
24+
public class ViewSubmissionContext extends Context implements InputBlockRespondUtility, FunctionUtility {
2425

2526
private List<ViewSubmissionPayload.ResponseUrl> responseUrls;
2627
private Responder responder;

bolt/src/main/java/com/slack/api/bolt/request/builtin/BlockActionRequest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ public BlockActionRequest(
4242
getContext().setTeamId(payload.getUser().getTeamId());
4343
}
4444
getContext().setRequestUserId(payload.getUser().getId());
45+
if (payload.getFunctionData() != null) {
46+
getContext().setFunctionExecutionId(payload.getFunctionData().getExecutionId());
47+
}
4548
}
4649
}
4750

bolt/src/main/java/com/slack/api/bolt/request/builtin/EventRequest.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,15 @@ public EventRequest(
107107
this.getContext().setChannelId(event.get("channel_id").getAsString());
108108
}
109109

110-
if (this.eventType != null
111-
&& this.eventType.equals(FunctionExecutedEvent.TYPE_NAME)
112-
&& event.get("bot_access_token") != null) {
113-
String functionBotAccessToken = event.get("bot_access_token").getAsString();
114-
this.getContext().setFunctionBotAccessToken(functionBotAccessToken);
110+
if (this.eventType != null && this.eventType.equals(FunctionExecutedEvent.TYPE_NAME)) {
111+
if (event.get("bot_access_token") != null) {
112+
String functionBotAccessToken = event.get("bot_access_token").getAsString();
113+
this.getContext().setFunctionBotAccessToken(functionBotAccessToken);
114+
}
115+
if (event.get("function_execution_id") != null) {
116+
String functionExecutionId = event.get("function_execution_id").getAsString();
117+
this.getContext().setFunctionExecutionId(functionExecutionId);
118+
}
115119
}
116120
}
117121

bolt/src/main/java/com/slack/api/bolt/request/builtin/ViewClosedRequest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ public ViewClosedRequest(
4343
}
4444
getContext().setRequestUserId(payload.getUser().getId());
4545
getContext().setFunctionBotAccessToken(payload.getBotAccessToken());
46+
if (payload.getFunctionData() != null) {
47+
getContext().setFunctionExecutionId(payload.getFunctionData().getExecutionId());
48+
}
4649
}
4750

4851
private DefaultContext context = new DefaultContext();

bolt/src/main/java/com/slack/api/bolt/request/builtin/ViewSubmissionRequest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ public ViewSubmissionRequest(
4444
getContext().setRequestUserId(payload.getUser().getId());
4545
getContext().setResponseUrls(payload.getResponseUrls());
4646
getContext().setFunctionBotAccessToken(payload.getBotAccessToken());
47+
if (payload.getFunctionData() != null) {
48+
getContext().setFunctionExecutionId(payload.getFunctionData().getExecutionId());
49+
}
4750
}
4851

4952
private ViewSubmissionContext context = new ViewSubmissionContext();

0 commit comments

Comments
 (0)