slack-ruby-client 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/{integtest.yml → integration_test.yml} +6 -5
  3. data/.github/workflows/{rubocop.yml → lint.yml} +5 -4
  4. data/.github/workflows/{danger.yml → pr_lint.yml} +8 -6
  5. data/.github/workflows/test.yml +4 -2
  6. data/.gitignore +0 -1
  7. data/.rubocop.yml +4 -0
  8. data/.rubocop_todo.yml +8 -14
  9. data/.ruby-version +1 -0
  10. data/CHANGELOG.md +14 -0
  11. data/CONTRIBUTING.md +5 -4
  12. data/Gemfile +1 -6
  13. data/README.md +60 -63
  14. data/RELEASING.md +1 -1
  15. data/UPGRADING.md +28 -0
  16. data/bin/commands/admin_audit_anomaly_allow.rb +23 -0
  17. data/bin/commands/admin_conversations.rb +12 -11
  18. data/bin/commands/admin_users.rb +1 -1
  19. data/bin/commands/admin_users_session.rb +1 -1
  20. data/bin/commands/apps_connections.rb +2 -2
  21. data/bin/commands/bookmarks.rb +1 -0
  22. data/bin/commands/chat.rb +9 -6
  23. data/bin/commands/conversations.rb +8 -6
  24. data/bin/commands/files.rb +24 -0
  25. data/bin/commands/rtm.rb +0 -15
  26. data/bin/commands/views.rb +4 -2
  27. data/bin/commands.rb +1 -0
  28. data/bin/slack +1 -1
  29. data/lib/slack/real_time/api/message.rb +3 -2
  30. data/lib/slack/real_time/api/templates/event_handler.erb +5 -1
  31. data/lib/slack/real_time/api/typing.rb +2 -1
  32. data/lib/slack/real_time/client.rb +8 -26
  33. data/lib/slack/real_time/config.rb +3 -3
  34. data/lib/slack/real_time/models/channel.rb +4 -0
  35. data/lib/slack/real_time/models/{group.rb → mpim.rb} +1 -1
  36. data/lib/slack/real_time/models.rb +2 -1
  37. data/lib/slack/real_time/stores/base.rb +25 -9
  38. data/lib/slack/real_time/stores/starter.rb +323 -309
  39. data/lib/slack/real_time/stores/store.rb +265 -198
  40. data/lib/slack/real_time/stores.rb +1 -7
  41. data/lib/slack/version.rb +1 -1
  42. data/lib/slack/web/api/endpoints/admin_analytics.rb +1 -1
  43. data/lib/slack/web/api/endpoints/admin_apps.rb +2 -2
  44. data/lib/slack/web/api/endpoints/admin_apps_requests.rb +1 -1
  45. data/lib/slack/web/api/endpoints/admin_audit_anomaly_allow.rb +34 -0
  46. data/lib/slack/web/api/endpoints/admin_auth_policy.rb +7 -7
  47. data/lib/slack/web/api/endpoints/admin_barriers.rb +8 -8
  48. data/lib/slack/web/api/endpoints/admin_conversations.rb +30 -28
  49. data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +6 -6
  50. data/lib/slack/web/api/endpoints/admin_emoji.rb +7 -7
  51. data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +2 -2
  52. data/lib/slack/web/api/endpoints/admin_teams.rb +2 -2
  53. data/lib/slack/web/api/endpoints/admin_teams_admins.rb +1 -1
  54. data/lib/slack/web/api/endpoints/admin_teams_owners.rb +1 -1
  55. data/lib/slack/web/api/endpoints/admin_teams_settings.rb +11 -11
  56. data/lib/slack/web/api/endpoints/admin_usergroups.rb +7 -7
  57. data/lib/slack/web/api/endpoints/admin_users.rb +16 -16
  58. data/lib/slack/web/api/endpoints/admin_users_session.rb +8 -8
  59. data/lib/slack/web/api/endpoints/apps.rb +2 -2
  60. data/lib/slack/web/api/endpoints/apps_connections.rb +1 -1
  61. data/lib/slack/web/api/endpoints/apps_event_authorizations.rb +1 -1
  62. data/lib/slack/web/api/endpoints/apps_manifest.rb +6 -6
  63. data/lib/slack/web/api/endpoints/bookmarks.rb +10 -8
  64. data/lib/slack/web/api/endpoints/bots.rb +1 -1
  65. data/lib/slack/web/api/endpoints/calls.rb +5 -5
  66. data/lib/slack/web/api/endpoints/calls_participants.rb +4 -4
  67. data/lib/slack/web/api/endpoints/chat.rb +36 -30
  68. data/lib/slack/web/api/endpoints/conversations.rb +37 -33
  69. data/lib/slack/web/api/endpoints/dialog.rb +2 -2
  70. data/lib/slack/web/api/endpoints/dnd.rb +1 -1
  71. data/lib/slack/web/api/endpoints/files.rb +45 -8
  72. data/lib/slack/web/api/endpoints/files_comments.rb +2 -2
  73. data/lib/slack/web/api/endpoints/files_remote.rb +8 -8
  74. data/lib/slack/web/api/endpoints/migration.rb +1 -1
  75. data/lib/slack/web/api/endpoints/oauth_v2.rb +2 -2
  76. data/lib/slack/web/api/endpoints/pins.rb +3 -3
  77. data/lib/slack/web/api/endpoints/reactions.rb +4 -4
  78. data/lib/slack/web/api/endpoints/reminders.rb +5 -5
  79. data/lib/slack/web/api/endpoints/rtm.rb +0 -23
  80. data/lib/slack/web/api/endpoints/search.rb +3 -3
  81. data/lib/slack/web/api/endpoints/tooling_tokens.rb +1 -1
  82. data/lib/slack/web/api/endpoints/usergroups.rb +4 -4
  83. data/lib/slack/web/api/endpoints/usergroups_users.rb +3 -3
  84. data/lib/slack/web/api/endpoints/users.rb +4 -4
  85. data/lib/slack/web/api/endpoints/users_admin.rb +2 -2
  86. data/lib/slack/web/api/endpoints/views.rb +16 -11
  87. data/lib/slack/web/api/endpoints/workflows.rb +4 -4
  88. data/lib/slack/web/api/endpoints.rb +2 -0
  89. data/lib/slack/web/api/errors.rb +56 -6
  90. data/lib/slack/web/api/mixins/conversations.id.rb +1 -1
  91. data/lib/slack/web/api/mixins/users.id.rb +1 -1
  92. data/lib/slack/web/api/mixins/users.search.rb +2 -1
  93. data/lib/slack/web/api/patches/{chat.1.patch → chat.attachments-blocks.patch} +13 -14
  94. data/lib/slack/web/api/patches/{dialog.1.open-json-support.patch → dialog.encoded-json.patch} +4 -4
  95. data/lib/slack/web/api/patches/views.view-json.patch +55 -0
  96. data/lib/slack/web/api/templates/method.erb +1 -1
  97. data/lib/slack/web/config.rb +2 -2
  98. data/lib/tasks/real_time.rake +44 -22
  99. data/lib/tasks/web.rake +9 -2
  100. data/spec/fixtures/slack/web/rtm_connect.yml +85 -1
  101. data/spec/slack/events/config_spec.rb +2 -0
  102. data/spec/slack/events/request_spec.rb +4 -0
  103. data/spec/slack/messages/formatting_spec.rb +10 -0
  104. data/spec/slack/real_time/api/message_spec.rb +1 -1
  105. data/spec/slack/real_time/api/ping_spec.rb +1 -1
  106. data/spec/slack/real_time/api/typing_spec.rb +1 -1
  107. data/spec/slack/real_time/client_spec.rb +73 -111
  108. data/spec/slack/real_time/event_handlers/bot_spec.rb +19 -17
  109. data/spec/slack/real_time/event_handlers/event_handlers_spec.rb +1 -1
  110. data/spec/slack/real_time/event_handlers/im_spec.rb +28 -25
  111. data/spec/slack/real_time/event_handlers/{group_spec.rb → private_channel_spec.rb} +35 -27
  112. data/spec/slack/real_time/event_handlers/{channel_spec.rb → public_channel_spec.rb} +24 -20
  113. data/spec/slack/real_time/event_handlers/team_spec.rb +7 -8
  114. data/spec/slack/real_time/event_handlers/user_spec.rb +6 -5
  115. data/spec/slack/real_time/stores/store_spec.rb +50 -0
  116. data/spec/slack/slack_spec.rb +1 -0
  117. data/spec/slack/web/api/endpoints/admin_audit_anomaly_allow_spec.rb +8 -0
  118. data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +17 -1
  119. data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +2 -0
  120. data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +13 -4
  121. data/spec/slack/web/api/endpoints/files_spec.rb +13 -0
  122. data/spec/slack/web/api/mixins/conversations_spec.rb +2 -0
  123. data/spec/slack/web/api/mixins/users_spec.rb +2 -0
  124. data/spec/slack/web/api/pagination/cursor_spec.rb +4 -0
  125. data/spec/slack/web/client_spec.rb +14 -4
  126. data/spec/support/real_time/loaded_client.rb +120 -0
  127. metadata +18 -35
  128. data/bin/commands/admin_conversations_whitelist.rb +0 -37
  129. data/bin/commands/apps_permissions.rb +0 -23
  130. data/bin/commands/apps_permissions_resources.rb +0 -15
  131. data/bin/commands/apps_permissions_scopes.rb +0 -13
  132. data/bin/commands/apps_permissions_users.rb +0 -26
  133. data/bin/commands/channels.rb +0 -23
  134. data/bin/commands/groups.rb +0 -14
  135. data/bin/commands/im.rb +0 -6
  136. data/bin/commands/mpim.rb +0 -6
  137. data/lib/slack/web/api/endpoints/admin_conversations_whitelist.rb +0 -64
  138. data/lib/slack/web/api/endpoints/apps_permissions.rb +0 -36
  139. data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +0 -31
  140. data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +0 -21
  141. data/lib/slack/web/api/endpoints/apps_permissions_users.rb +0 -50
  142. data/lib/slack/web/api/endpoints/channels.rb +0 -25
  143. data/lib/slack/web/api/endpoints/groups.rb +0 -13
  144. data/lib/slack/web/api/endpoints/im.rb +0 -13
  145. data/lib/slack/web/api/endpoints/mpim.rb +0 -13
  146. data/lib/slack/web/api/endpoints/presence.rb +0 -23
  147. data/lib/slack/web/api/patches/views.1.view-json.patch +0 -40
  148. data/lib/slack/web/api/patches/views.1.views-published.patch +0 -16
  149. data/spec/fixtures/slack/web/rtm_start.yml +0 -815
  150. data/spec/slack/real_time/rtm_start_spec.rb +0 -14
  151. data/spec/slack/real_time/store_spec.rb +0 -12
@@ -1,158 +1,76 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Slack
3
4
  module RealTime
4
5
  module Stores
5
- # Stores everything.
6
+ # Full store with initialization logic
6
7
  class Store < Base
7
- def self
8
- users[@self_id]
9
- end
10
-
11
- def team
12
- teams[@team_id]
13
- end
8
+ CONVERSATION_TYPES = {
9
+ public_channels: 'public_channel',
10
+ private_channels: 'private_channel',
11
+ ims: 'im',
12
+ mpims: 'mpim'
13
+ }.freeze
14
+
15
+ attr_reader :caches
16
+
17
+ def initialize(attrs, options = {})
18
+ @teams = {}
19
+ @users = {}
20
+ @bots = {}
21
+ @public_channels = {}
22
+ @private_channels = {}
23
+ @ims = {}
24
+ @mpims = {}
14
25
 
15
- def initialize(attrs)
16
26
  if attrs.team
17
27
  @team_id = attrs.team.id
18
- @teams = { @team_id => Slack::RealTime::Models::Team.new(attrs.team) }
19
- else
20
- @teams = {}
28
+ @teams[@team_id] = Models::Team.new(attrs.team)
21
29
  end
22
30
 
23
31
  if attrs.self
24
32
  @self_id = attrs.self.id
25
- @users = { @self_id => Slack::RealTime::Models::User.new(attrs.self) }
26
- else
27
- @users = {}
33
+ @users[@self_id] = Models::User.new(attrs.self)
28
34
  end
29
35
 
30
- attrs.users&.each do |data|
31
- user = Models::User.new(data)
32
- @users[data.id] = @users.key?(data.id) ? @users[data.id].merge(user) : user
33
- end
34
-
35
- @channels = {}
36
- attrs.channels&.each do |data|
37
- @channels[data.id] = Models::Channel.new(data)
38
- end
36
+ @caches =
37
+ if options[:caches].is_a?(Array) || options[:caches].nil?
38
+ caches = options[:caches].to_a.map(&:to_sym)
39
+ unknown_caches = caches - CACHES
40
+ raise ArgumentError, "Unknown caches: #{unknown_caches.join(', ')}" unless unknown_caches.empty?
39
41
 
40
- @bots = {}
41
- attrs.bots&.each do |data|
42
- @bots[data.id] = Models::Bot.new(data)
43
- end
42
+ Set.new(caches).freeze
43
+ elsif options[:caches] == :all
44
+ Set.new(CACHES).freeze
45
+ else
46
+ raise ArgumentError, 'Unexpected value for option `caches`. Expects :all or an array of caches'
47
+ end
48
+ end
44
49
 
45
- @groups = {}
46
- attrs.groups&.each do |data|
47
- @groups[data.id] = Models::Group.new(data)
48
- end
50
+ def self
51
+ users[@self_id]
52
+ end
49
53
 
50
- @ims = {}
51
- attrs.ims&.each do |data|
52
- @ims[data.id] = Models::Im.new(data)
53
- end
54
+ def team
55
+ teams[@team_id]
54
56
  end
55
57
 
56
58
  ### RealTime Events
57
59
 
58
- # A shared channel invite was sent to a Slack user.
59
- # @see https://api.slack.com/events/shared_channel_invite_received
60
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/shared_channel_invite_received.json
61
- # on :shared_channel_invite_received do |data|
62
-
63
- # An enterprise grid migration has started on an external workspace..
64
- # @see https://api.slack.com/events/external_org_migration_started
65
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/external_org_migration_started.json
66
- # on :external_org_migration_started do |data|
67
-
68
- # An enterprise grid migration has finished on an external workspace..
69
- # @see https://api.slack.com/events/external_org_migration_finished
70
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/external_org_migration_finished.json
71
- # on :external_org_migration_finished do |data|
72
-
73
- # A private channel was deleted.
74
- # @see https://api.slack.com/events/group_deleted
75
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_deleted.json
76
- # on :group_deleted do |data|
77
-
78
- # Determine the current presence status for a list of users.
79
- # @see https://api.slack.com/events/presence_query
80
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/presence_query.json
81
- # on :presence_query do |data|
82
-
83
- # The membership of an existing User Group has changed.
84
- # @see https://api.slack.com/events/subteam_members_changed
85
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/subteam_members_changed.json
86
- # on :subteam_members_changed do |data|
87
-
88
- # Subscribe to presence events for the specified users.
89
- # @see https://api.slack.com/events/presence_sub
90
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/presence_sub.json
91
- # on :presence_sub do |data|
92
-
93
- # A user left a public or private channel.
94
- # @see https://api.slack.com/events/member_left_channel
95
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/member_left_channel.json
96
- # on :member_left_channel do |data|
97
-
98
- # A user joined a public or private channel.
99
- # @see https://api.slack.com/events/member_joined_channel
100
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/member_joined_channel.json
101
- # on :member_joined_channel do |data|
102
-
103
- # The server intends to close the connection soon..
104
- # @see https://api.slack.com/events/goodbye
105
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/goodbye.json
106
- # on :goodbye do |data|
107
-
108
- # Verifies ownership of an Events API Request URL.
109
- # @see https://api.slack.com/events/url_verification
110
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/url_verification.json
111
- # on :url_verification do |data|
112
-
113
- # A message was posted in a multiparty direct message channel.
114
- # @see https://api.slack.com/events/message.mpim
115
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/message.mpim.json
116
- # on :message.mpim do |data|
117
-
118
- # A message was posted in a direct message channel.
119
- # @see https://api.slack.com/events/message.im
120
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/message.im.json
121
- # on :message.im do |data|
122
-
123
- # A message was posted to a private channel.
124
- # @see https://api.slack.com/events/message.groups
125
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/message.groups.json
126
- # on :message.groups do |data|
127
-
128
- # A message was posted to a channel.
129
- # @see https://api.slack.com/events/message.channels
130
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/message.channels.json
131
- # on :message.channels do |data|
132
-
133
- # A direct message read marker was updated.
134
- # @see https://api.slack.com/events/im_marked
135
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/im_marked.json
136
- # on :im_marked do |data|
137
-
138
- # Bulk updates were made to a DM channel's history.
139
- # @see https://api.slack.com/events/im_history_changed
140
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/im_history_changed.json
141
- # on :im_history_changed do |data|
142
-
143
60
  # The list of accounts a user is signed into has changed.
144
61
  # @see https://api.slack.com/events/accounts_changed
145
62
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/accounts_changed.json
146
63
  # on :accounts_changed do |data|
147
64
 
148
- # An integration bot was added.
65
+ # A bot user was added.
149
66
  # @see https://api.slack.com/events/bot_added
150
67
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/bot_added.json
151
68
  on :bot_added do |data|
152
- bots[data.bot.id] = Models::Bot.new(data.bot)
69
+ bot = Models::Bot.new(data.bot)
70
+ bots[bot.id] = bot
153
71
  end
154
72
 
155
- # An integration bot was changed.
73
+ # A bot user was changed.
156
74
  # @see https://api.slack.com/events/bot_changed
157
75
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/bot_changed.json
158
76
  on :bot_changed do |data|
@@ -160,27 +78,27 @@ module Slack
160
78
  bot&.merge!(data.bot)
161
79
  end
162
80
 
163
- # A team channel was archived.
81
+ # A channel was archived.
164
82
  # @see https://api.slack.com/events/channel_archive
165
83
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_archive.json
166
84
  on :channel_archive do |data|
167
- channel = channels[data.channel]
85
+ channel = public_channels[data.channel]
168
86
  channel.is_archived = true if channel
169
87
  end
170
88
 
171
- # A team channel was created.
89
+ # A channel was created.
172
90
  # @see https://api.slack.com/events/channel_created
173
91
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_created.json
174
92
  on :channel_created do |data|
175
93
  channel = Models::Channel.new(data.channel)
176
- channels[channel.id] = channel
94
+ public_channels[channel.id] = channel
177
95
  end
178
96
 
179
- # A team channel was deleted.
97
+ # A channel was deleted.
180
98
  # @see https://api.slack.com/events/channel_deleted
181
99
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_deleted.json
182
100
  on :channel_deleted do |data|
183
- channels.delete(data.channel)
101
+ public_channels.delete(data.channel)
184
102
  end
185
103
 
186
104
  # Bulk updates were made to a channel's history.
@@ -193,11 +111,20 @@ module Slack
193
111
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_joined.json
194
112
  on :channel_joined do |data|
195
113
  channel_id = data.channel.id
196
- channel = channels[channel_id]
197
- if channel
198
- channel.merge!(data.channel)
114
+ if data.channel.is_private?
115
+ channel = private_channels[channel_id]
116
+ if channel
117
+ channel.merge!(data.channel)
118
+ else
119
+ private_channels[channel_id] = Models::Channel.new(data.channel)
120
+ end
199
121
  else
200
- channels[channel_id] = Models::Channel.new(data.channel)
122
+ channel = public_channels[channel_id]
123
+ if channel
124
+ channel.merge!(data.channel)
125
+ else
126
+ public_channels[channel_id] = Models::Channel.new(data.channel)
127
+ end
201
128
  end
202
129
  end
203
130
 
@@ -205,8 +132,8 @@ module Slack
205
132
  # @see https://api.slack.com/events/channel_left
206
133
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_left.json
207
134
  on :channel_left do |data|
208
- channel = channels[data.channel]
209
- channel.members.delete(self.self.id) if channel.key? :members
135
+ channel = public_channels[data.channel]
136
+ channel&.members&.delete(self.self.id)
210
137
  end
211
138
 
212
139
  # Your channel read marker was updated.
@@ -214,23 +141,23 @@ module Slack
214
141
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_marked.json
215
142
  # on :channel_marked do |data|
216
143
 
217
- # A team channel was renamed.
144
+ # A channel was renamed.
218
145
  # @see https://api.slack.com/events/channel_rename
219
146
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_rename.json
220
147
  on :channel_rename do |data|
221
- channel = channels[data.channel.id]
222
- channel.name = data.channel.name if channel
148
+ channel = public_channels[data.channel.id]
149
+ channel&.merge!(data.channel)
223
150
  end
224
151
 
225
- # A team channel was unarchived.
152
+ # A channel was unarchived.
226
153
  # @see https://api.slack.com/events/channel_unarchive
227
154
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_unarchive.json
228
155
  on :channel_unarchive do |data|
229
- channel = channels[data.channel]
156
+ channel = public_channels[data.channel]
230
157
  channel.is_archived = false if channel
231
158
  end
232
159
 
233
- # A team slash command has been added or changed.
160
+ # A slash command has been added or changed.
234
161
  # @see https://api.slack.com/events/commands_changed
235
162
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/commands_changed.json
236
163
  # on :commands_changed do |data|
@@ -238,25 +165,40 @@ module Slack
238
165
  # Do not Disturb settings changed for the current user.
239
166
  # @see https://api.slack.com/events/dnd_updated
240
167
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/dnd_updated.json
241
- # on :dnd_updated do |data|
168
+ on :dnd_updated do |data|
169
+ self.dnd_status = data.dnd_status
170
+ end
242
171
 
243
- # Do not Disturb settings changed for a team member.
172
+ # Do not Disturb settings changed for a member.
244
173
  # @see https://api.slack.com/events/dnd_updated_user
245
174
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/dnd_updated_user.json
246
- # on :dnd_updated_user do |data|
175
+ on :dnd_updated_user do |data|
176
+ user = users[data.user]
177
+ user.dnd_status = data.dnd_status if user
178
+ end
247
179
 
248
- # The team email domain has changed.
180
+ # The workspace email domain has changed.
249
181
  # @see https://api.slack.com/events/email_domain_changed
250
182
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/email_domain_changed.json
251
183
  on :email_domain_changed do |data|
252
184
  team.email_domain = data.email_domain
253
185
  end
254
186
 
255
- # A team custom emoji has been added or changed.
187
+ # A custom emoji has been added or changed.
256
188
  # @see https://api.slack.com/events/emoji_changed
257
189
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/emoji_changed.json
258
190
  # on :emoji_changed do |data|
259
191
 
192
+ # An enterprise grid migration has finished on an external workspace..
193
+ # @see https://api.slack.com/events/external_org_migration_finished
194
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/external_org_migration_finished.json
195
+ # on :external_org_migration_finished do |data|
196
+
197
+ # An enterprise grid migration has started on an external workspace..
198
+ # @see https://api.slack.com/events/external_org_migration_started
199
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/external_org_migration_started.json
200
+ # on :external_org_migration_started do |data|
201
+
260
202
  # A file was changed.
261
203
  # @see https://api.slack.com/events/file_change
262
204
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/file_change.json
@@ -265,7 +207,7 @@ module Slack
265
207
  # A file comment was added.
266
208
  # @see https://api.slack.com/events/file_comment_added
267
209
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/file_comment_added.json
268
- # on :file_comment_added do |data| do
210
+ # on :file_comment_added do |data|
269
211
 
270
212
  # A file comment was deleted.
271
213
  # @see https://api.slack.com/events/file_comment_deleted
@@ -287,11 +229,6 @@ module Slack
287
229
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/file_deleted.json
288
230
  # on :file_deleted do |data|
289
231
 
290
- # A file was made private.
291
- # @see https://api.slack.com/events/file_private
292
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/file_private.json
293
- # on :file_private do |data|
294
-
295
232
  # A file was made public.
296
233
  # @see https://api.slack.com/events/file_public
297
234
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/file_public.json
@@ -307,70 +244,140 @@ module Slack
307
244
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/file_unshared.json
308
245
  # on :file_unshared do |data|
309
246
 
310
- # A private group was archived.
247
+ # The server intends to close the connection soon..
248
+ # @see https://api.slack.com/events/goodbye
249
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/goodbye.json
250
+ # on :goodbye do |data|
251
+
252
+ # A private channel was archived.
311
253
  # @see https://api.slack.com/events/group_archive
312
254
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_archive.json
313
255
  on :group_archive do |data|
314
- channel = groups[data.channel]
256
+ channel = private_channels[data.channel]
315
257
  channel.is_archived = true if channel
316
258
  end
317
259
 
318
- # You closed a group channel.
260
+ # You closed a private channel.
319
261
  # @see https://api.slack.com/events/group_close
320
262
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_close.json
321
263
  on :group_close do |data|
322
- groups[data.channel].is_open = false
264
+ channel = private_channels[data.channel]
265
+ channel.is_open = false if channel
323
266
  end
324
267
 
325
- # Bulk updates were made to a group's history.
268
+ # A private channel was deleted.
269
+ # @see https://api.slack.com/events/group_deleted
270
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_deleted.json
271
+ on :group_deleted do |data|
272
+ private_channels.delete(data.channel)
273
+ end
274
+
275
+ # Bulk updates were made to a private channel's history.
326
276
  # @see https://api.slack.com/events/group_history_changed
327
277
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_history_changed.json
328
278
  # on :group_history_changed do |data|
329
279
 
330
- # You joined a private group.
280
+ # You joined a private channel.
331
281
  # @see https://api.slack.com/events/group_joined
332
282
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_joined.json
333
283
  on :group_joined do |data|
334
- groups[data.channel.id] = Models::Channel.new(data.channel)
284
+ channel = Models::Channel.new(data.channel)
285
+ private_channels[channel.id] = channel
335
286
  end
336
287
 
337
- # You left a private group.
288
+ # You left a private channel.
338
289
  # @see https://api.slack.com/events/group_left
339
290
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_left.json
340
291
  on :group_left do |data|
341
- channel = groups[data.channel]
342
- channel.members.delete(self.self.id) if channel&.key?(:members)
292
+ # Deleting because we can't access a private channel when we're not a member
293
+ private_channels.delete(data.channel)
343
294
  end
344
295
 
345
- # A private group read marker was updated.
296
+ # A private channel read marker was updated.
346
297
  # @see https://api.slack.com/events/group_marked
347
298
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_marked.json
348
299
  # on :group_marked do |data|
349
300
 
350
- # You opened a group channel.
301
+ # You created a group DM.
351
302
  # @see https://api.slack.com/events/group_open
352
303
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_open.json
353
304
  on :group_open do |data|
354
- groups[data.channel].is_open = true
305
+ channel = private_channels[data.channel]
306
+ channel.is_open = true if channel
355
307
  end
356
308
 
357
- # A private group was renamed.
309
+ # A private channel was renamed.
358
310
  # @see https://api.slack.com/events/group_rename
359
311
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_rename.json
360
312
  on :group_rename do |data|
361
- channel = groups[data.channel.id]
362
- channel.name = data.channel.name if channel
313
+ channel = private_channels[data.channel.id]
314
+ channel&.merge!(data.channel)
363
315
  end
364
316
 
365
- # A private group was unarchived.
317
+ # A private channel was unarchived.
366
318
  # @see https://api.slack.com/events/group_unarchive
367
319
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_unarchive.json
368
320
  on :group_unarchive do |data|
369
- channel = groups[data.channel]
321
+ channel = private_channels[data.channel]
370
322
  channel.is_archived = false if channel
371
323
  end
372
324
 
373
- # You closed a direct message channel.
325
+ # The client has successfully connected to the server.
326
+ # @see https://api.slack.com/events/hello
327
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/hello.json
328
+ on :hello do |_data, client|
329
+ # rubocop:disable Metrics/BlockNesting
330
+ if caches.include?(:teams)
331
+ team_info = client.web_client.team_info
332
+ team = Models::Team.new(team_info.team)
333
+ teams[team.id] = teams.key?(team.id) ? teams[team.id].merge(team) : team
334
+ end
335
+
336
+ if caches.include?(:users) || caches.include?(:bots)
337
+ client.web_client.users_list do |users_list|
338
+ users_list.members.each do |user_data|
339
+ if caches.include?(:users)
340
+ user = Models::User.new(user_data)
341
+ users[user.id] = users.key?(user.id) ? users[user.id].merge(user) : user
342
+ end
343
+
344
+ next unless user_data.is_bot? && caches.include?(:bots)
345
+
346
+ bot_info = client.web_client.bots_info(bot: user_data.profile.bot_id)
347
+ bot = Models::Bot.new(bot_info.bot)
348
+ bots[bot.id] = bots.key?(bot.id) ? bots[bot.id].merge(bot) : bot
349
+ end
350
+ end
351
+ end
352
+
353
+ if caches.include?(:public_channels) || caches.include?(:private_channels) ||
354
+ caches.include?(:ims) || caches.include?(:mpims)
355
+ types = CONVERSATION_TYPES.slice(*caches).values.join(',')
356
+ client.web_client.conversations_list(types: types) do |conversations|
357
+ conversations.channels.each do |channel_data|
358
+ if channel_data.is_mpim?
359
+ mpim = Models::Mpim.new(channel_data)
360
+ mpims[mpim.id] = mpims.key?(mpim.id) ? mpims[mpim.id].merge(mpim) : mpim
361
+ elsif channel_data.is_im?
362
+ im = Models::Im.new(channel_data)
363
+ ims[im.id] = ims.key?(im.id) ? ims[im.id].merge(im) : im
364
+ elsif channel_data.is_channel? || channel_data.is_group?
365
+ channel = Models::Channel.new(channel_data)
366
+ if channel.is_private?
367
+ private_channels[channel.id] =
368
+ private_channels.key?(channel.id) ? private_channels[channel.id].merge(channel) : channel
369
+ else
370
+ public_channels[channel.id] =
371
+ public_channels.key?(channel.id) ? public_channels[channel.id].merge(channel) : channel
372
+ end
373
+ end
374
+ end
375
+ end
376
+ end
377
+ # rubocop:enable Metrics/BlockNesting
378
+ end
379
+
380
+ # You closed a DM.
374
381
  # @see https://api.slack.com/events/im_close
375
382
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/im_close.json
376
383
  on :im_close do |data|
@@ -379,14 +386,15 @@ module Slack
379
386
  ims[data.channel].is_open = false
380
387
  end
381
388
 
382
- # A direct message channel was created.
389
+ # A DM was created.
383
390
  # @see https://api.slack.com/events/im_created
384
391
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/im_created.json
385
392
  on :im_created do |data|
386
- ims[data.channel.id] = Models::Im.new(data.channel)
393
+ im = Models::Im.new(data.channel)
394
+ ims[im.id] = im
387
395
  end
388
396
 
389
- # Bulk updates were made to a DM channel's history.
397
+ # Bulk updates were made to a DM's history.
390
398
  # @see https://api.slack.com/events/im_history_changed
391
399
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/im_history_changed.json
392
400
  # on :im_history_changed do |data|
@@ -396,7 +404,7 @@ module Slack
396
404
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/im_marked.json
397
405
  # on :im_marked do |data|
398
406
 
399
- # You opened a direct message channel.
407
+ # You opened a DM.
400
408
  # @see https://api.slack.com/events/im_open
401
409
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/im_open.json
402
410
  on :im_open do |data|
@@ -412,6 +420,25 @@ module Slack
412
420
  self.self.presence = data.presence
413
421
  end
414
422
 
423
+ # A user joined a public channel, private channel or MPDM..
424
+ # @see https://api.slack.com/events/member_joined_channel
425
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/member_joined_channel.json
426
+ on :member_joined_channel do |data|
427
+ channel = public_channels[data.channel] || private_channels[data.channel]
428
+ if channel
429
+ channel.members ||= Set.new
430
+ channel.members << data.user
431
+ end
432
+ end
433
+
434
+ # A user left a public or private channel.
435
+ # @see https://api.slack.com/events/member_left_channel
436
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/member_left_channel.json
437
+ on :member_left_channel do |data|
438
+ channel = public_channels[data.channel] || private_channels[data.channel]
439
+ channel&.members&.delete(data.user)
440
+ end
441
+
415
442
  # A pin was added to a channel.
416
443
  # @see https://api.slack.com/events/pin_added
417
444
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/pin_added.json
@@ -430,7 +457,7 @@ module Slack
430
457
  self.self.prefs[data.name] = data.value
431
458
  end
432
459
 
433
- # A team member's presence changed.
460
+ # A member's presence changed.
434
461
  # @see https://api.slack.com/events/presence_change
435
462
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/presence_change.json
436
463
  on :presence_change do |data|
@@ -438,12 +465,22 @@ module Slack
438
465
  user.presence = data.presence if user
439
466
  end
440
467
 
441
- # A team member has added an emoji reaction to an item.
468
+ # Determine the current presence status for a list of users.
469
+ # @see https://api.slack.com/events/presence_query
470
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/presence_query.json
471
+ # on :presence_query do |data|
472
+
473
+ # Subscribe to presence events for the specified users.
474
+ # @see https://api.slack.com/events/presence_sub
475
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/presence_sub.json
476
+ # on :presence_sub do |data|
477
+
478
+ # A member has added an emoji reaction to an item.
442
479
  # @see https://api.slack.com/events/reaction_added
443
480
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/reaction_added.json
444
481
  # on :reaction_added do |data|
445
482
 
446
- # A team member removed an emoji reaction.
483
+ # A member removed an emoji reaction.
447
484
  # @see https://api.slack.com/events/reaction_removed
448
485
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/reaction_removed.json
449
486
  # on :reaction_removed do |data|
@@ -453,37 +490,47 @@ module Slack
453
490
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/reconnect_url.json
454
491
  # on :reconnect_url do |data|
455
492
 
456
- # A team member has starred an item.
493
+ # A shared channel invite was sent to a Slack user.
494
+ # @see https://api.slack.com/events/shared_channel_invite_received
495
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/shared_channel_invite_received.json
496
+ # on :shared_channel_invite_received do |data|
497
+
498
+ # A member has starred an item.
457
499
  # @see https://api.slack.com/events/star_added
458
500
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/star_added.json
459
501
  # on :star_added do |data|
460
502
 
461
- # A team member removed a star.
503
+ # A member removed a star.
462
504
  # @see https://api.slack.com/events/star_removed
463
505
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/star_removed.json
464
506
  # on :star_removed do |data|
465
507
 
466
- # A user group has been added to the team.
508
+ # A User Group has been added to the workspace.
467
509
  # @see https://api.slack.com/events/subteam_created
468
510
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/subteam_created.json
469
511
  # on :subteam_created do |data|
470
512
 
471
- # You have been added to a user group.
513
+ # The membership of an existing User Group has changed.
514
+ # @see https://api.slack.com/events/subteam_members_changed
515
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/subteam_members_changed.json
516
+ # on :subteam_members_changed do |data|
517
+
518
+ # You have been added to a User Group.
472
519
  # @see https://api.slack.com/events/subteam_self_added
473
520
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/subteam_self_added.json
474
521
  # on :subteam_self_added do |data|
475
522
 
476
- # You have been removed from a user group.
523
+ # You have been removed from a User Group.
477
524
  # @see https://api.slack.com/events/subteam_self_removed
478
525
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/subteam_self_removed.json
479
526
  # on :subteam_self_removed do |data|
480
527
 
481
- # An existing user group has been updated or its members changed.
528
+ # An existing User Group has been updated or its members changed.
482
529
  # @see https://api.slack.com/events/subteam_updated
483
530
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/subteam_updated.json
484
531
  # on :subteam_updated do |data|
485
532
 
486
- # The team domain has changed.
533
+ # The workspace domain has changed.
487
534
  # @see https://api.slack.com/events/team_domain_change
488
535
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_domain_change.json
489
536
  on :team_domain_change do |data|
@@ -491,26 +538,27 @@ module Slack
491
538
  team.domain = data.domain
492
539
  end
493
540
 
494
- # A new team member has joined.
541
+ # A new member has joined.
495
542
  # @see https://api.slack.com/events/team_join
496
543
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_join.json
497
544
  on :team_join do |data|
498
- users[data.user.id] = Models::User.new(data.user)
545
+ user = Models::User.new(data.user)
546
+ users[user.id] = user
499
547
  end
500
548
 
501
- # The team is being migrated between servers.
549
+ # The workspace is being migrated between servers.
502
550
  # @see https://api.slack.com/events/team_migration_started
503
551
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_migration_started.json
504
552
  # on :team_migration_started do |data|
505
553
 
506
- # The team billing plan has changed.
554
+ # The account billing plan has changed.
507
555
  # @see https://api.slack.com/events/team_plan_change
508
556
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_plan_change.json
509
557
  on :team_plan_change do |data|
510
558
  team.plan = data.plan
511
559
  end
512
560
 
513
- # A team preference has been updated.
561
+ # A preference has been updated.
514
562
  # @see https://api.slack.com/events/team_pref_change
515
563
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_pref_change.json
516
564
  on :team_pref_change do |data|
@@ -518,34 +566,53 @@ module Slack
518
566
  team.prefs[data.name] = data.value
519
567
  end
520
568
 
521
- # Team profile fields have been updated.
569
+ # The workspace profile fields have been updated.
522
570
  # @see https://api.slack.com/events/team_profile_change
523
571
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_profile_change.json
524
572
  # on :team_profile_change do |data|
525
573
 
526
- # Team profile fields have been deleted.
574
+ # The workspace profile fields have been deleted.
527
575
  # @see https://api.slack.com/events/team_profile_delete
528
576
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_profile_delete.json
529
577
  # on :team_profile_delete do |data|
530
578
 
531
- # Team profile fields have been reordered.
579
+ # The workspace profile fields have been reordered.
532
580
  # @see https://api.slack.com/events/team_profile_reorder
533
581
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_profile_reorder.json
534
582
  # on :team_profile_reorder do |data|
535
583
 
536
- # The team name has changed.
584
+ # The workspace name has changed.
537
585
  # @see https://api.slack.com/events/team_rename
538
586
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_rename.json
539
587
  on :team_rename do |data|
540
588
  team.name = data.name
541
589
  end
542
590
 
543
- # A team member's data has changed.
591
+ # A member's data has changed.
544
592
  # @see https://api.slack.com/events/user_change
545
593
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/user_change.json
546
594
  on :user_change do |data|
547
- users[data.user.id] = Models::User.new(data.user)
548
- end
595
+ user = Models::User.new(data.user)
596
+ users[user.id] = user
597
+ end
598
+
599
+ # A user's huddle status has changed.
600
+ # @see https://api.slack.com/events/user_huddle_changed
601
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/user_huddle_changed.json
602
+ # on :user_huddle_changed do |data|
603
+ # (handled by :user_change)
604
+
605
+ # A user's profile data has changed.
606
+ # @see https://api.slack.com/events/user_profile_changed
607
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/user_profile_changed.json
608
+ # on :user_profile_changed do |data|
609
+ # (handled by :user_change)
610
+
611
+ # A user's status has changed.
612
+ # @see https://api.slack.com/events/user_status_changed
613
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/user_status_changed.json
614
+ # on :user_status_changed do |data|
615
+ # (handled by :user_change)
549
616
 
550
617
  # A channel member is typing a message.
551
618
  # @see https://api.slack.com/events/user_typing