Skip to content

Commit c575ba4

Browse files
seratchmwbrooks
andauthored
Add granular user change events (#984)
Co-authored-by: Michael Brooks <[email protected]>
1 parent aea01bb commit c575ba4

File tree

18 files changed

+899
-0
lines changed

18 files changed

+899
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package samples;
2+
3+
import com.slack.api.bolt.App;
4+
import com.slack.api.bolt.AppConfig;
5+
import com.slack.api.bolt.socket_mode.SocketModeApp;
6+
import com.slack.api.model.event.UserChangeEvent;
7+
import com.slack.api.model.event.UserHuddleChangedEvent;
8+
import com.slack.api.model.event.UserProfileChangedEvent;
9+
import com.slack.api.model.event.UserStatusChangedEvent;
10+
import config.Constants;
11+
12+
public class UserChangeEventApp {
13+
14+
public static void main(String[] args) throws Exception {
15+
App app = new App(AppConfig.builder()
16+
.singleTeamBotToken(System.getenv(Constants.SLACK_SDK_TEST_SOCKET_MODE_BOT_TOKEN))
17+
.build());
18+
app.use((req, resp, chain) -> {
19+
req.getContext().logger.info(req.getRequestBodyAsString());
20+
return chain.next(req);
21+
});
22+
23+
app.event(UserChangeEvent.class, (payload, ctx) -> {
24+
return ctx.ack();
25+
});app.event(UserProfileChangedEvent.class, (payload, ctx) -> {
26+
return ctx.ack();
27+
});app.event(UserStatusChangedEvent.class, (payload, ctx) -> {
28+
return ctx.ack();
29+
});
30+
app.event(UserHuddleChangedEvent.class, (payload, ctx) -> {
31+
return ctx.ack();
32+
});
33+
String appToken = System.getenv(Constants.SLACK_SDK_TEST_SOCKET_MODE_APP_TOKEN);
34+
SocketModeApp socketModeApp = new SocketModeApp(appToken, app);
35+
socketModeApp.start();
36+
}
37+
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
{
2+
"token": "",
3+
"enterprise_id": "",
4+
"team_id": "",
5+
"api_app_id": "",
6+
"type": "",
7+
"authed_users": [
8+
""
9+
],
10+
"authed_teams": [
11+
""
12+
],
13+
"authorizations": [
14+
{
15+
"enterprise_id": "",
16+
"team_id": "",
17+
"user_id": "",
18+
"is_bot": false,
19+
"is_enterprise_install": false
20+
}
21+
],
22+
"is_ext_shared_channel": false,
23+
"event_id": "",
24+
"event_time": 123,
25+
"event_context": "",
26+
"event": {
27+
"type": "user_huddle_changed",
28+
"user": {
29+
"id": "",
30+
"team_id": "",
31+
"name": "",
32+
"deleted": false,
33+
"color": "",
34+
"real_name": "",
35+
"tz": "",
36+
"tz_label": "",
37+
"tz_offset": 123,
38+
"profile": {
39+
"guest_channels": "",
40+
"guest_invited_by": "",
41+
"guest_expiration_ts": 123,
42+
"avatar_hash": "",
43+
"status_text": "",
44+
"status_text_canonical": "",
45+
"status_emoji": "",
46+
"status_emoji_url": "",
47+
"status_expiration": 123,
48+
"display_name": "",
49+
"display_name_normalized": "",
50+
"real_name": "",
51+
"real_name_normalized": "",
52+
"bot_id": "",
53+
"title": "",
54+
"email": "",
55+
"skype": "",
56+
"phone": "",
57+
"team": "",
58+
"api_app_id": "",
59+
"always_active": false,
60+
"image_original": "",
61+
"image_24": "",
62+
"image_32": "",
63+
"image_48": "",
64+
"image_72": "",
65+
"image_192": "",
66+
"image_512": "",
67+
"image_1024": "",
68+
"is_custom_image": false,
69+
"pronouns": "",
70+
"huddle_state": "",
71+
"huddle_state_expiration_ts": 123,
72+
"first_name": "",
73+
"last_name": ""
74+
},
75+
"is_admin": false,
76+
"is_owner": false,
77+
"is_primary_owner": false,
78+
"is_invited_user": false,
79+
"is_restricted": false,
80+
"is_ultra_restricted": false,
81+
"is_bot": false,
82+
"is_stranger": false,
83+
"is_app_user": false,
84+
"updated": 123,
85+
"has_2fa": false,
86+
"is_email_confirmed": false,
87+
"presence": "",
88+
"enterprise_user": {
89+
"id": "",
90+
"enterprise_id": "",
91+
"enterprise_name": "",
92+
"is_admin": false,
93+
"is_owner": false
94+
},
95+
"two_factor_type": "",
96+
"has_files": false,
97+
"locale": "",
98+
"is_workflow_bot": false,
99+
"who_can_share_contact_card": ""
100+
},
101+
"cache_ts": 123,
102+
"event_ts": ""
103+
}
104+
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
{
2+
"token": "",
3+
"enterprise_id": "",
4+
"team_id": "",
5+
"api_app_id": "",
6+
"type": "",
7+
"authed_users": [
8+
""
9+
],
10+
"authed_teams": [
11+
""
12+
],
13+
"authorizations": [
14+
{
15+
"enterprise_id": "",
16+
"team_id": "",
17+
"user_id": "",
18+
"is_bot": false,
19+
"is_enterprise_install": false
20+
}
21+
],
22+
"is_ext_shared_channel": false,
23+
"event_id": "",
24+
"event_time": 123,
25+
"event_context": "",
26+
"event": {
27+
"type": "user_profile_changed",
28+
"user": {
29+
"id": "",
30+
"team_id": "",
31+
"name": "",
32+
"deleted": false,
33+
"color": "",
34+
"real_name": "",
35+
"tz": "",
36+
"tz_label": "",
37+
"tz_offset": 123,
38+
"profile": {
39+
"guest_channels": "",
40+
"guest_invited_by": "",
41+
"guest_expiration_ts": 123,
42+
"avatar_hash": "",
43+
"status_text": "",
44+
"status_text_canonical": "",
45+
"status_emoji": "",
46+
"status_emoji_url": "",
47+
"status_expiration": 123,
48+
"display_name": "",
49+
"display_name_normalized": "",
50+
"real_name": "",
51+
"real_name_normalized": "",
52+
"bot_id": "",
53+
"title": "",
54+
"email": "",
55+
"skype": "",
56+
"phone": "",
57+
"team": "",
58+
"api_app_id": "",
59+
"always_active": false,
60+
"image_original": "",
61+
"image_24": "",
62+
"image_32": "",
63+
"image_48": "",
64+
"image_72": "",
65+
"image_192": "",
66+
"image_512": "",
67+
"image_1024": "",
68+
"is_custom_image": false,
69+
"pronouns": "",
70+
"huddle_state": "",
71+
"huddle_state_expiration_ts": 123,
72+
"first_name": "",
73+
"last_name": ""
74+
},
75+
"is_admin": false,
76+
"is_owner": false,
77+
"is_primary_owner": false,
78+
"is_invited_user": false,
79+
"is_restricted": false,
80+
"is_ultra_restricted": false,
81+
"is_bot": false,
82+
"is_stranger": false,
83+
"is_app_user": false,
84+
"updated": 123,
85+
"has_2fa": false,
86+
"is_email_confirmed": false,
87+
"presence": "",
88+
"enterprise_user": {
89+
"id": "",
90+
"enterprise_id": "",
91+
"enterprise_name": "",
92+
"is_admin": false,
93+
"is_owner": false
94+
},
95+
"two_factor_type": "",
96+
"has_files": false,
97+
"locale": "",
98+
"is_workflow_bot": false,
99+
"who_can_share_contact_card": ""
100+
},
101+
"cache_ts": 123,
102+
"event_ts": ""
103+
}
104+
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
{
2+
"token": "",
3+
"enterprise_id": "",
4+
"team_id": "",
5+
"api_app_id": "",
6+
"type": "",
7+
"authed_users": [
8+
""
9+
],
10+
"authed_teams": [
11+
""
12+
],
13+
"authorizations": [
14+
{
15+
"enterprise_id": "",
16+
"team_id": "",
17+
"user_id": "",
18+
"is_bot": false,
19+
"is_enterprise_install": false
20+
}
21+
],
22+
"is_ext_shared_channel": false,
23+
"event_id": "",
24+
"event_time": 123,
25+
"event_context": "",
26+
"event": {
27+
"type": "user_status_changed",
28+
"user": {
29+
"id": "",
30+
"team_id": "",
31+
"name": "",
32+
"deleted": false,
33+
"color": "",
34+
"real_name": "",
35+
"tz": "",
36+
"tz_label": "",
37+
"tz_offset": 123,
38+
"profile": {
39+
"guest_channels": "",
40+
"guest_invited_by": "",
41+
"guest_expiration_ts": 123,
42+
"avatar_hash": "",
43+
"status_text": "",
44+
"status_text_canonical": "",
45+
"status_emoji": "",
46+
"status_emoji_url": "",
47+
"status_expiration": 123,
48+
"display_name": "",
49+
"display_name_normalized": "",
50+
"real_name": "",
51+
"real_name_normalized": "",
52+
"bot_id": "",
53+
"title": "",
54+
"email": "",
55+
"skype": "",
56+
"phone": "",
57+
"team": "",
58+
"api_app_id": "",
59+
"always_active": false,
60+
"image_original": "",
61+
"image_24": "",
62+
"image_32": "",
63+
"image_48": "",
64+
"image_72": "",
65+
"image_192": "",
66+
"image_512": "",
67+
"image_1024": "",
68+
"is_custom_image": false,
69+
"pronouns": "",
70+
"huddle_state": "",
71+
"huddle_state_expiration_ts": 123,
72+
"first_name": "",
73+
"last_name": ""
74+
},
75+
"is_admin": false,
76+
"is_owner": false,
77+
"is_primary_owner": false,
78+
"is_invited_user": false,
79+
"is_restricted": false,
80+
"is_ultra_restricted": false,
81+
"is_bot": false,
82+
"is_stranger": false,
83+
"is_app_user": false,
84+
"updated": 123,
85+
"has_2fa": false,
86+
"is_email_confirmed": false,
87+
"presence": "",
88+
"enterprise_user": {
89+
"id": "",
90+
"enterprise_id": "",
91+
"enterprise_name": "",
92+
"is_admin": false,
93+
"is_owner": false
94+
},
95+
"two_factor_type": "",
96+
"has_files": false,
97+
"locale": "",
98+
"is_workflow_bot": false,
99+
"who_can_share_contact_card": ""
100+
},
101+
"cache_ts": 123,
102+
"event_ts": ""
103+
}
104+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.slack.api.model.event;
2+
3+
import com.slack.api.model.User;
4+
import lombok.Data;
5+
6+
/**
7+
* The user_huddle_changed event is sent to all connections for a workspace when a user's huddle status is changed.
8+
* The event is identical to the existing user_change event. Both user_change and user_huddle_changed are dispatched
9+
* at the exact same time. Use the users.profile.set method to update user profile data.
10+
* <p>
11+
* https://api.slack.com/events/user_huddle_changed
12+
*/
13+
@Data
14+
public class UserHuddleChangedEvent implements Event {
15+
16+
public static final String TYPE_NAME = "user_huddle_changed";
17+
18+
private final String type = TYPE_NAME;
19+
private User user; // TODO: make sure the available attributes
20+
private Integer cacheTs;
21+
private String eventTs;
22+
}

0 commit comments

Comments
 (0)