slack-ruby-client 0.11.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (403) hide show
  1. checksums.yaml +5 -5
  2. data/.coveralls.yml +2 -0
  3. data/.github/FUNDING.yml +2 -0
  4. data/.github/dependabot.yml +6 -0
  5. data/.github/workflows/integration_test.yml +45 -0
  6. data/.github/workflows/lint.yml +14 -0
  7. data/.github/workflows/pr_lint.yml +21 -0
  8. data/.github/workflows/test.yml +56 -0
  9. data/.github/workflows/update_api.yml +81 -0
  10. data/.gitignore +7 -3
  11. data/.rubocop.yml +40 -2
  12. data/.rubocop_todo.yml +209 -55
  13. data/.ruby-version +1 -0
  14. data/CHANGELOG.md +257 -30
  15. data/CONTRIBUTING.md +44 -29
  16. data/Dangerfile +2 -0
  17. data/Gemfile +28 -6
  18. data/Gemfile.danger +6 -0
  19. data/LICENSE.md +1 -1
  20. data/README.md +473 -134
  21. data/RELEASING.md +2 -2
  22. data/Rakefile +2 -1
  23. data/SECURITY.md +9 -0
  24. data/UPGRADING.md +117 -3
  25. data/bin/commands/admin_analytics.rb +22 -0
  26. data/bin/commands/admin_apps.rb +57 -0
  27. data/bin/commands/admin_apps_activities.rb +32 -0
  28. data/bin/commands/admin_apps_approved.rb +24 -0
  29. data/bin/commands/admin_apps_config.rb +31 -0
  30. data/bin/commands/admin_apps_requests.rb +35 -0
  31. data/bin/commands/admin_apps_restricted.rb +24 -0
  32. data/bin/commands/admin_audit_anomaly_allow.rb +29 -0
  33. data/bin/commands/admin_auth_policy.rb +45 -0
  34. data/bin/commands/admin_barriers.rb +53 -0
  35. data/bin/commands/admin_conversations.rb +260 -0
  36. data/bin/commands/admin_conversations_ekm.rb +23 -0
  37. data/bin/commands/admin_conversations_restrictAccess.rb +43 -0
  38. data/bin/commands/admin_emoji.rb +60 -0
  39. data/bin/commands/admin_functions.rb +23 -0
  40. data/bin/commands/admin_functions_permissions.rb +31 -0
  41. data/bin/commands/admin_inviteRequests.rb +42 -0
  42. data/bin/commands/admin_inviteRequests_approved.rb +22 -0
  43. data/bin/commands/admin_inviteRequests_denied.rb +22 -0
  44. data/bin/commands/admin_roles.rb +46 -0
  45. data/bin/commands/admin_teams.rb +33 -0
  46. data/bin/commands/admin_teams_admins.rb +22 -0
  47. data/bin/commands/admin_teams_owners.rb +22 -0
  48. data/bin/commands/admin_teams_settings.rb +70 -0
  49. data/bin/commands/admin_usergroups.rb +54 -0
  50. data/bin/commands/admin_users.rb +106 -0
  51. data/bin/commands/admin_users_session.rb +84 -0
  52. data/bin/commands/admin_users_unsupportedVersions.rb +21 -0
  53. data/bin/commands/admin_workflows.rb +42 -0
  54. data/bin/commands/admin_workflows_collaborators.rb +31 -0
  55. data/bin/commands/admin_workflows_permissions.rb +21 -0
  56. data/bin/commands/admin_workflows_triggers_types_permissions.rb +31 -0
  57. data/bin/commands/api.rb +15 -9
  58. data/bin/commands/apps.rb +21 -0
  59. data/bin/commands/apps_activities.rb +32 -0
  60. data/bin/commands/apps_auth_external.rb +32 -0
  61. data/bin/commands/apps_connections.rb +19 -0
  62. data/bin/commands/apps_datastore.rb +116 -0
  63. data/bin/commands/apps_event_authorizations.rb +22 -0
  64. data/bin/commands/apps_manifest.rb +58 -0
  65. data/bin/commands/assistant_search.rb +27 -0
  66. data/bin/commands/assistant_threads.rb +45 -0
  67. data/bin/commands/auth.rb +22 -15
  68. data/bin/commands/auth_teams.rb +22 -0
  69. data/bin/commands/bookmarks.rb +60 -0
  70. data/bin/commands/bots.rb +16 -8
  71. data/bin/commands/calls.rb +58 -0
  72. data/bin/commands/calls_participants.rb +31 -0
  73. data/bin/commands/canvases.rb +41 -0
  74. data/bin/commands/canvases_access.rb +34 -0
  75. data/bin/commands/canvases_sections.rb +21 -0
  76. data/bin/commands/chat.rb +158 -99
  77. data/bin/commands/chat_scheduledMessages.rb +25 -0
  78. data/bin/commands/conversations.rb +241 -157
  79. data/bin/commands/conversations_canvases.rb +22 -0
  80. data/bin/commands/conversations_externalInvitePermissions.rb +22 -0
  81. data/bin/commands/conversations_requestSharedInvite.rb +48 -0
  82. data/bin/commands/dialog.rb +16 -9
  83. data/bin/commands/dnd.rb +47 -38
  84. data/bin/commands/emoji.rb +15 -7
  85. data/bin/commands/files.rb +113 -87
  86. data/bin/commands/files_comments.rb +16 -30
  87. data/bin/commands/files_remote.rb +84 -0
  88. data/bin/commands/functions.rb +31 -0
  89. data/bin/commands/functions_distributions_permissions.rb +61 -0
  90. data/bin/commands/functions_workflows_steps.rb +23 -0
  91. data/bin/commands/functions_workflows_steps_responses.rb +23 -0
  92. data/bin/commands/migration.rb +17 -9
  93. data/bin/commands/oauth.rb +19 -24
  94. data/bin/commands/oauth_v2.rb +35 -0
  95. data/bin/commands/openid_connect.rb +33 -0
  96. data/bin/commands/pins.rb +33 -30
  97. data/bin/commands/reactions.rb +53 -45
  98. data/bin/commands/reminders.rb +54 -41
  99. data/bin/commands/rtm.rb +16 -22
  100. data/bin/commands/search.rb +44 -33
  101. data/bin/commands/stars.rb +39 -29
  102. data/bin/commands/team.rb +50 -34
  103. data/bin/commands/team_billing.rb +19 -0
  104. data/bin/commands/team_externalTeams.rb +35 -0
  105. data/bin/commands/team_preferences.rb +19 -0
  106. data/bin/commands/team_profile.rb +15 -8
  107. data/bin/commands/tooling_tokens.rb +20 -0
  108. data/bin/commands/usergroups.rb +69 -53
  109. data/bin/commands/usergroups_users.rb +30 -19
  110. data/bin/commands/users.rb +114 -84
  111. data/bin/commands/users_admin.rb +29 -22
  112. data/bin/commands/users_discoverableContacts.rb +20 -0
  113. data/bin/commands/users_prefs.rb +14 -7
  114. data/bin/commands/users_profile.rb +27 -20
  115. data/bin/commands/views.rb +56 -0
  116. data/bin/commands/workflows.rb +44 -0
  117. data/bin/commands/workflows_triggers_permissions.rb +60 -0
  118. data/bin/slack +50 -46
  119. data/examples/files_upload_v2/.env.example +1 -0
  120. data/examples/{hi_real_time → files_upload_v2}/Gemfile +2 -2
  121. data/examples/files_upload_v2/README.md +13 -0
  122. data/examples/files_upload_v2/files_upload_v2.rb +45 -0
  123. data/examples/hi_real_time_and_web/Gemfile +1 -0
  124. data/examples/hi_real_time_and_web/hi.rb +7 -3
  125. data/examples/{hi_real_time_async_eventmachine → hi_real_time_async_async}/Gemfile +2 -1
  126. data/examples/{hi_real_time_async_eventmachine → hi_real_time_async_async}/hi.rb +12 -7
  127. data/examples/hi_web/Gemfile +1 -0
  128. data/examples/hi_web/hi.rb +1 -0
  129. data/examples/new_ticket/Gemfile +1 -0
  130. data/examples/new_ticket/new_ticket.rb +1 -0
  131. data/examples/oauth_v2/.env.example +4 -0
  132. data/examples/oauth_v2/Gemfile +7 -0
  133. data/examples/oauth_v2/README.md +33 -0
  134. data/examples/oauth_v2/oauth_v2.rb +60 -0
  135. data/lib/slack/config.rb +2 -2
  136. data/lib/slack/events/config.rb +32 -0
  137. data/lib/slack/events/request.rb +76 -0
  138. data/lib/slack/logger.rb +6 -5
  139. data/lib/slack/messages/formatting.rb +66 -1
  140. data/lib/slack/messages/message.rb +1 -4
  141. data/lib/slack/real_time/api/message.rb +6 -3
  142. data/lib/slack/real_time/api/message_id.rb +1 -0
  143. data/lib/slack/real_time/api/ping.rb +5 -2
  144. data/lib/slack/real_time/api/templates/event_handler.erb +5 -1
  145. data/lib/slack/real_time/api/typing.rb +5 -2
  146. data/lib/slack/real_time/client.rb +117 -54
  147. data/lib/slack/real_time/concurrency/async.rb +142 -0
  148. data/lib/slack/real_time/concurrency.rb +2 -2
  149. data/lib/slack/real_time/config.rb +12 -13
  150. data/lib/slack/real_time/models/base.rb +1 -4
  151. data/lib/slack/real_time/models/bot.rb +1 -0
  152. data/lib/slack/real_time/models/channel.rb +5 -0
  153. data/lib/slack/real_time/models/im.rb +1 -0
  154. data/lib/slack/real_time/models/{group.rb → mpim.rb} +2 -1
  155. data/lib/slack/real_time/models/team.rb +1 -0
  156. data/lib/slack/real_time/models/user.rb +1 -0
  157. data/lib/slack/real_time/models.rb +3 -1
  158. data/lib/slack/real_time/socket.rb +49 -17
  159. data/lib/slack/real_time/stores/base.rb +28 -14
  160. data/lib/slack/real_time/stores/starter.rb +325 -287
  161. data/lib/slack/real_time/stores/store.rb +271 -186
  162. data/lib/slack/real_time/stores.rb +2 -7
  163. data/lib/slack/utils/security.rb +44 -0
  164. data/lib/slack/version.rb +2 -1
  165. data/lib/slack/web/api/endpoints/admin_analytics.rb +28 -0
  166. data/lib/slack/web/api/endpoints/admin_apps.rb +78 -0
  167. data/lib/slack/web/api/endpoints/admin_apps_activities.rb +53 -0
  168. data/lib/slack/web/api/endpoints/admin_apps_approved.rb +37 -0
  169. data/lib/slack/web/api/endpoints/admin_apps_config.rb +40 -0
  170. data/lib/slack/web/api/endpoints/admin_apps_requests.rb +53 -0
  171. data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +37 -0
  172. data/lib/slack/web/api/endpoints/admin_audit_anomaly_allow.rb +34 -0
  173. data/lib/slack/web/api/endpoints/admin_auth_policy.rb +72 -0
  174. data/lib/slack/web/api/endpoints/admin_barriers.rb +82 -0
  175. data/lib/slack/web/api/endpoints/admin_conversations.rb +397 -0
  176. data/lib/slack/web/api/endpoints/admin_conversations_ekm.rb +35 -0
  177. data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +61 -0
  178. data/lib/slack/web/api/endpoints/admin_emoji.rb +88 -0
  179. data/lib/slack/web/api/endpoints/admin_functions.rb +36 -0
  180. data/lib/slack/web/api/endpoints/admin_functions_permissions.rb +41 -0
  181. data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +61 -0
  182. data/lib/slack/web/api/endpoints/admin_inviteRequests_approved.rb +33 -0
  183. data/lib/slack/web/api/endpoints/admin_inviteRequests_denied.rb +33 -0
  184. data/lib/slack/web/api/endpoints/admin_roles.rb +73 -0
  185. data/lib/slack/web/api/endpoints/admin_teams.rb +50 -0
  186. data/lib/slack/web/api/endpoints/admin_teams_admins.rb +34 -0
  187. data/lib/slack/web/api/endpoints/admin_teams_owners.rb +34 -0
  188. data/lib/slack/web/api/endpoints/admin_teams_settings.rb +99 -0
  189. data/lib/slack/web/api/endpoints/admin_usergroups.rb +77 -0
  190. data/lib/slack/web/api/endpoints/admin_users.rb +167 -0
  191. data/lib/slack/web/api/endpoints/admin_users_session.rb +121 -0
  192. data/lib/slack/web/api/endpoints/admin_users_unsupportedVersions.rb +25 -0
  193. data/lib/slack/web/api/endpoints/admin_workflows.rb +67 -0
  194. data/lib/slack/web/api/endpoints/admin_workflows_collaborators.rb +42 -0
  195. data/lib/slack/web/api/endpoints/admin_workflows_permissions.rb +26 -0
  196. data/lib/slack/web/api/endpoints/admin_workflows_triggers_types_permissions.rb +41 -0
  197. data/lib/slack/web/api/endpoints/api.rb +2 -3
  198. data/lib/slack/web/api/endpoints/apps.rb +27 -0
  199. data/lib/slack/web/api/endpoints/apps_activities.rb +54 -0
  200. data/lib/slack/web/api/endpoints/apps_auth_external.rb +41 -0
  201. data/lib/slack/web/api/endpoints/apps_connections.rb +21 -0
  202. data/lib/slack/web/api/endpoints/apps_datastore.rb +181 -0
  203. data/lib/slack/web/api/endpoints/apps_event_authorizations.rb +34 -0
  204. data/lib/slack/web/api/endpoints/apps_manifest.rb +79 -0
  205. data/lib/slack/web/api/endpoints/assistant_search.rb +44 -0
  206. data/lib/slack/web/api/endpoints/assistant_threads.rb +68 -0
  207. data/lib/slack/web/api/endpoints/auth.rb +2 -1
  208. data/lib/slack/web/api/endpoints/auth_teams.rb +33 -0
  209. data/lib/slack/web/api/endpoints/bookmarks.rb +90 -0
  210. data/lib/slack/web/api/endpoints/bots.rb +4 -1
  211. data/lib/slack/web/api/endpoints/calls.rb +83 -0
  212. data/lib/slack/web/api/endpoints/calls_participants.rb +42 -0
  213. data/lib/slack/web/api/endpoints/canvases.rb +54 -0
  214. data/lib/slack/web/api/endpoints/canvases_access.rb +47 -0
  215. data/lib/slack/web/api/endpoints/canvases_sections.rb +27 -0
  216. data/lib/slack/web/api/endpoints/chat.rb +172 -87
  217. data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +40 -0
  218. data/lib/slack/web/api/endpoints/conversations.rb +190 -64
  219. data/lib/slack/web/api/endpoints/conversations_canvases.rb +28 -0
  220. data/lib/slack/web/api/endpoints/conversations_externalInvitePermissions.rb +31 -0
  221. data/lib/slack/web/api/endpoints/conversations_requestSharedInvite.rb +73 -0
  222. data/lib/slack/web/api/endpoints/dialog.rb +6 -10
  223. data/lib/slack/web/api/endpoints/dnd.rb +11 -5
  224. data/lib/slack/web/api/endpoints/emoji.rb +3 -0
  225. data/lib/slack/web/api/endpoints/files.rb +85 -36
  226. data/lib/slack/web/api/endpoints/files_comments.rb +4 -36
  227. data/lib/slack/web/api/endpoints/files_remote.rb +127 -0
  228. data/lib/slack/web/api/endpoints/functions.rb +43 -0
  229. data/lib/slack/web/api/endpoints/functions_distributions_permissions.rb +84 -0
  230. data/lib/slack/web/api/endpoints/functions_workflows_steps.rb +30 -0
  231. data/lib/slack/web/api/endpoints/functions_workflows_steps_responses.rb +30 -0
  232. data/lib/slack/web/api/endpoints/migration.rb +6 -3
  233. data/lib/slack/web/api/endpoints/oauth.rb +10 -32
  234. data/lib/slack/web/api/endpoints/oauth_v2.rb +48 -0
  235. data/lib/slack/web/api/endpoints/openid_connect.rb +42 -0
  236. data/lib/slack/web/api/endpoints/pins.rb +11 -18
  237. data/lib/slack/web/api/endpoints/reactions.rb +31 -20
  238. data/lib/slack/web/api/endpoints/reminders.rb +25 -12
  239. data/lib/slack/web/api/endpoints/rtm.rb +4 -22
  240. data/lib/slack/web/api/endpoints/search.rb +33 -18
  241. data/lib/slack/web/api/endpoints/stars.rb +23 -10
  242. data/lib/slack/web/api/endpoints/team.rb +38 -7
  243. data/lib/slack/web/api/endpoints/team_billing.rb +21 -0
  244. data/lib/slack/web/api/endpoints/team_externalTeams.rb +53 -0
  245. data/lib/slack/web/api/endpoints/team_preferences.rb +21 -0
  246. data/lib/slack/web/api/endpoints/team_profile.rb +2 -1
  247. data/lib/slack/web/api/endpoints/tooling_tokens.rb +24 -0
  248. data/lib/slack/web/api/endpoints/usergroups.rb +44 -25
  249. data/lib/slack/web/api/endpoints/usergroups_users.rb +23 -14
  250. data/lib/slack/web/api/endpoints/users.rb +57 -18
  251. data/lib/slack/web/api/endpoints/users_admin.rb +5 -2
  252. data/lib/slack/web/api/endpoints/users_discoverableContacts.rb +24 -0
  253. data/lib/slack/web/api/endpoints/users_prefs.rb +2 -0
  254. data/lib/slack/web/api/endpoints/users_profile.rb +11 -9
  255. data/lib/slack/web/api/endpoints/views.rb +86 -0
  256. data/lib/slack/web/api/endpoints/workflows.rb +63 -0
  257. data/lib/slack/web/api/endpoints/workflows_triggers_permissions.rb +87 -0
  258. data/lib/slack/web/api/endpoints.rb +136 -12
  259. data/lib/slack/web/api/error.rb +1 -0
  260. data/lib/slack/web/api/errors/server_error.rb +37 -0
  261. data/lib/slack/web/api/errors/slack_error.rb +14 -1
  262. data/lib/slack/web/api/errors/too_many_requests_error.rb +2 -4
  263. data/lib/slack/web/api/errors.rb +1396 -0
  264. data/lib/slack/web/api/helpers/files.rb +97 -0
  265. data/lib/slack/web/api/helpers.rb +13 -0
  266. data/lib/slack/web/api/mixins/conversations.id.rb +47 -0
  267. data/lib/slack/web/api/mixins/ids.id.rb +4 -3
  268. data/lib/slack/web/api/mixins/users.id.rb +18 -4
  269. data/lib/slack/web/api/mixins/users.search.rb +3 -1
  270. data/lib/slack/web/api/mixins.rb +2 -2
  271. data/lib/slack/web/api/options.rb +26 -0
  272. data/lib/slack/web/api/patches/.gitkeep +0 -0
  273. data/lib/slack/web/api/templates/command.erb +19 -12
  274. data/lib/slack/web/api/templates/endpoints.erb +2 -2
  275. data/lib/slack/web/api/templates/errors.erb +20 -0
  276. data/lib/slack/web/api/templates/method.erb +23 -3
  277. data/lib/slack/web/api/templates/method_spec.erb +40 -3
  278. data/lib/slack/web/client.rb +4 -1
  279. data/lib/slack/web/config.rb +9 -2
  280. data/lib/slack/web/faraday/connection.rb +11 -20
  281. data/lib/slack/web/faraday/options.rb +24 -0
  282. data/lib/slack/web/faraday/request.rb +6 -1
  283. data/lib/slack/web/faraday/response/raise_error.rb +14 -8
  284. data/lib/slack/web/faraday/response/wrap_error.rb +24 -0
  285. data/lib/slack/web/pagination/cursor.rb +7 -7
  286. data/lib/slack-ruby-client.rb +18 -6
  287. data/lib/slack.rb +1 -0
  288. data/lib/slack_ruby_client.rb +1 -0
  289. data/lib/tasks/git.rake +1 -0
  290. data/lib/tasks/real_time.rake +51 -21
  291. data/lib/tasks/update.rake +1 -0
  292. data/lib/tasks/web.rake +43 -17
  293. data/slack-ruby-client.gemspec +10 -14
  294. metadata +191 -307
  295. data/.travis.yml +0 -30
  296. data/bin/commands/apps_permissions.rb +0 -22
  297. data/bin/commands/channels.rb +0 -175
  298. data/bin/commands/groups.rb +0 -172
  299. data/bin/commands/im.rb +0 -67
  300. data/bin/commands/mpim.rb +0 -63
  301. data/bin/commands.rb +0 -33
  302. data/examples/hi_real_time/hi.gif +0 -0
  303. data/examples/hi_real_time/hi.rb +0 -37
  304. data/examples/hi_real_time_async_celluloid/Gemfile +0 -6
  305. data/examples/hi_real_time_async_celluloid/hi.rb +0 -36
  306. data/examples/hi_real_time_async_eventmachine/Procfile +0 -2
  307. data/lib/slack/real_time/concurrency/celluloid.rb +0 -117
  308. data/lib/slack/real_time/concurrency/eventmachine.rb +0 -60
  309. data/lib/slack/web/api/endpoints/apps_permissions.rb +0 -35
  310. data/lib/slack/web/api/endpoints/channels.rb +0 -265
  311. data/lib/slack/web/api/endpoints/groups.rb +0 -255
  312. data/lib/slack/web/api/endpoints/im.rb +0 -113
  313. data/lib/slack/web/api/endpoints/mpim.rb +0 -98
  314. data/lib/slack/web/api/endpoints/presence.rb +0 -23
  315. data/lib/slack/web/api/mixins/channels.id.json +0 -20
  316. data/lib/slack/web/api/mixins/channels.id.rb +0 -26
  317. data/lib/slack/web/api/mixins/groups.id.json +0 -20
  318. data/lib/slack/web/api/mixins/groups.id.rb +0 -26
  319. data/lib/slack/web/api/patches/chat.1.text-attachments-required.patch +0 -13
  320. data/lib/slack/web/api/patches/chat.2.attachments-json.patch +0 -17
  321. data/lib/slack/web/api/patches/chat.3.update-attachments-support.patch +0 -21
  322. data/lib/slack/web/api/patches/chat.4.postEphemeral-attachments-support.patch +0 -17
  323. data/lib/slack/web/api/patches/dialog.1.open-json-support.patch +0 -17
  324. data/lib/slack/web/api/templates/commands.erb +0 -5
  325. data/screenshots/register-bot.png +0 -0
  326. data/spec/fixtures/slack/web/429_error.yml +0 -85
  327. data/spec/fixtures/slack/web/auth_test_error.yml +0 -48
  328. data/spec/fixtures/slack/web/auth_test_success.yml +0 -57
  329. data/spec/fixtures/slack/web/channels_info.yml +0 -46
  330. data/spec/fixtures/slack/web/groups_info.yml +0 -43
  331. data/spec/fixtures/slack/web/paginated_users_list.yml +0 -181
  332. data/spec/fixtures/slack/web/rtm_connect.yml +0 -70
  333. data/spec/fixtures/slack/web/rtm_start.yml +0 -104
  334. data/spec/fixtures/slack/web/users_info.yml +0 -130
  335. data/spec/fixtures/slack/web/users_list.yml +0 -72
  336. data/spec/integration/integration_spec.rb +0 -139
  337. data/spec/slack/config_spec.rb +0 -14
  338. data/spec/slack/messages/formatting_spec.rb +0 -43
  339. data/spec/slack/real_time/api/message_spec.rb +0 -15
  340. data/spec/slack/real_time/api/ping_spec.rb +0 -15
  341. data/spec/slack/real_time/api/typing_spec.rb +0 -15
  342. data/spec/slack/real_time/client_spec.rb +0 -425
  343. data/spec/slack/real_time/concurrency/celluloid_spec.rb +0 -62
  344. data/spec/slack/real_time/concurrency/eventmachine_spec.rb +0 -47
  345. data/spec/slack/real_time/concurrency/it_behaves_like_a_realtime_socket.rb +0 -19
  346. data/spec/slack/real_time/event_handlers/bot_spec.rb +0 -44
  347. data/spec/slack/real_time/event_handlers/channel_spec.rb +0 -116
  348. data/spec/slack/real_time/event_handlers/event_handlers_spec.rb +0 -15
  349. data/spec/slack/real_time/event_handlers/group_spec.rb +0 -90
  350. data/spec/slack/real_time/event_handlers/im_spec.rb +0 -47
  351. data/spec/slack/real_time/event_handlers/team_spec.rb +0 -62
  352. data/spec/slack/real_time/event_handlers/user_spec.rb +0 -63
  353. data/spec/slack/real_time/rtm_connect_spec.rb +0 -13
  354. data/spec/slack/real_time/rtm_start_spec.rb +0 -13
  355. data/spec/slack/real_time/store_spec.rb +0 -11
  356. data/spec/slack/slack_spec.rb +0 -58
  357. data/spec/slack/version_spec.rb +0 -7
  358. data/spec/slack/web/api/endpoints/api_spec.rb +0 -7
  359. data/spec/slack/web/api/endpoints/apps_permissions_spec.rb +0 -15
  360. data/spec/slack/web/api/endpoints/bots_spec.rb +0 -7
  361. data/spec/slack/web/api/endpoints/conversations_spec.rb +0 -100
  362. data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +0 -25
  363. data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +0 -11
  364. data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +0 -105
  365. data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +0 -28
  366. data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +0 -11
  367. data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +0 -33
  368. data/spec/slack/web/api/endpoints/dnd_spec.rb +0 -12
  369. data/spec/slack/web/api/endpoints/emoji_spec.rb +0 -7
  370. data/spec/slack/web/api/endpoints/files_comments_spec.rb +0 -34
  371. data/spec/slack/web/api/endpoints/files_spec.rb +0 -43
  372. data/spec/slack/web/api/endpoints/im_spec.rb +0 -38
  373. data/spec/slack/web/api/endpoints/migration_spec.rb +0 -12
  374. data/spec/slack/web/api/endpoints/mpim_spec.rb +0 -38
  375. data/spec/slack/web/api/endpoints/oauth_spec.rb +0 -29
  376. data/spec/slack/web/api/endpoints/pins_spec.rb +0 -22
  377. data/spec/slack/web/api/endpoints/reactions_spec.rb +0 -17
  378. data/spec/slack/web/api/endpoints/reminders_spec.rb +0 -30
  379. data/spec/slack/web/api/endpoints/rtm_spec.rb +0 -7
  380. data/spec/slack/web/api/endpoints/search_spec.rb +0 -22
  381. data/spec/slack/web/api/endpoints/stars_spec.rb +0 -7
  382. data/spec/slack/web/api/endpoints/team_profile_spec.rb +0 -7
  383. data/spec/slack/web/api/endpoints/team_spec.rb +0 -7
  384. data/spec/slack/web/api/endpoints/usergroups_spec.rb +0 -27
  385. data/spec/slack/web/api/endpoints/usergroups_users_spec.rb +0 -20
  386. data/spec/slack/web/api/endpoints/users_admin_spec.rb +0 -17
  387. data/spec/slack/web/api/endpoints/users_prefs_spec.rb +0 -7
  388. data/spec/slack/web/api/endpoints/users_profile_spec.rb +0 -7
  389. data/spec/slack/web/api/error_spec.rb +0 -14
  390. data/spec/slack/web/api/errors/slack_error_spec.rb +0 -14
  391. data/spec/slack/web/api/mixins/channels_spec.rb +0 -31
  392. data/spec/slack/web/api/mixins/groups_spec.rb +0 -31
  393. data/spec/slack/web/api/mixins/users_spec.rb +0 -39
  394. data/spec/slack/web/api/pagination/cursor_spec.rb +0 -70
  395. data/spec/slack/web/client_spec.rb +0 -174
  396. data/spec/spec_helper.rb +0 -14
  397. data/spec/support/queue_with_timeout.rb +0 -34
  398. data/spec/support/real_time/concurrency/mock.rb +0 -30
  399. data/spec/support/real_time/connected_client.rb +0 -21
  400. data/spec/support/real_time/event.rb +0 -11
  401. data/spec/support/token.rb +0 -10
  402. data/spec/support/vcr.rb +0 -9
  403. /data/examples/{hi_real_time_async_celluloid → hi_real_time_async_async}/Procfile +0 -0
@@ -1,170 +1,104 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Slack
2
4
  module RealTime
3
5
  module Stores
4
- # Stores everything.
6
+ # Full store with initialization logic
5
7
  class Store < Base
6
- def self
7
- users[@self_id]
8
- end
9
-
10
- def team
11
- teams[@team_id]
12
- 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 = {}
13
25
 
14
- def initialize(attrs)
15
26
  if attrs.team
16
27
  @team_id = attrs.team.id
17
- @teams = { @team_id => Slack::RealTime::Models::Team.new(attrs.team) }
18
- else
19
- @teams = {}
28
+ @teams[@team_id] = Models::Team.new(attrs.team)
20
29
  end
21
30
 
22
31
  if attrs.self
23
32
  @self_id = attrs.self.id
24
- @users = { @self_id => Slack::RealTime::Models::User.new(attrs.self) }
25
- else
26
- @users = {}
33
+ @users[@self_id] = Models::User.new(attrs.self)
27
34
  end
28
35
 
29
- if attrs.users
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
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?
41
+
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'
33
47
  end
34
- end
35
-
36
- @channels = {}
37
- if attrs.channels
38
- attrs.channels.each do |data|
39
- @channels[data.id] = Models::Channel.new(data)
40
- end
41
- end
42
-
43
- @bots = {}
44
- if attrs.bots
45
- attrs.bots.each do |data|
46
- @bots[data.id] = Models::Bot.new(data)
47
- end
48
- end
48
+ end
49
49
 
50
- @groups = {}
51
- if attrs.groups
52
- attrs.groups.each do |data|
53
- @groups[data.id] = Models::Group.new(data)
54
- end
55
- end
50
+ def self
51
+ users[@self_id]
52
+ end
56
53
 
57
- @ims = {}
58
- if attrs.ims
59
- attrs.ims.each do |data|
60
- @ims[data.id] = Models::Im.new(data)
61
- end
62
- end
54
+ def team
55
+ teams[@team_id]
63
56
  end
64
57
 
65
58
  ### RealTime Events
66
59
 
67
- # The membership of an existing User Group has changed.
68
- # @see https://api.slack.com/events/subteam_members_changed
69
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/subteam_members_changed.json
70
- # on :subteam_members_changed do |data|
71
-
72
- # Subscribe to presence events for the specified users.
73
- # @see https://api.slack.com/events/presence_sub
74
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/presence_sub.json
75
- # on :presence_sub do |data|
76
-
77
- # A user left a public or private channel.
78
- # @see https://api.slack.com/events/member_left_channel
79
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/member_left_channel.json
80
- # on :member_left_channel do |data|
81
-
82
- # A user joined a public or private channel.
83
- # @see https://api.slack.com/events/member_joined_channel
84
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/member_joined_channel.json
85
- # on :member_joined_channel do |data|
86
-
87
- # The server intends to close the connection soon..
88
- # @see https://api.slack.com/events/goodbye
89
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/goodbye.json
90
- # on :goodbye do |data|
91
-
92
- # Verifies ownership of an Events API Request URL.
93
- # @see https://api.slack.com/events/url_verification
94
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/url_verification.json
95
- # on :url_verification do |data|
96
-
97
- # A message was posted in a multiparty direct message channel.
98
- # @see https://api.slack.com/events/message.mpim
99
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/message.mpim.json
100
- # on :message.mpim do |data|
101
-
102
- # A message was posted in a direct message channel.
103
- # @see https://api.slack.com/events/message.im
104
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/message.im.json
105
- # on :message.im do |data|
106
-
107
- # A message was posted to a private channel.
108
- # @see https://api.slack.com/events/message.groups
109
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/message.groups.json
110
- # on :message.groups do |data|
111
-
112
- # A message was posted to a channel.
113
- # @see https://api.slack.com/events/message.channels
114
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/message.channels.json
115
- # on :message.channels do |data|
116
-
117
- # A direct message read marker was updated.
118
- # @see https://api.slack.com/events/im_marked
119
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/im_marked.json
120
- # on :im_marked do |data|
121
-
122
- # Bulk updates were made to a DM channel's history.
123
- # @see https://api.slack.com/events/im_history_changed
124
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/im_history_changed.json
125
- # on :im_history_changed do |data|
126
-
127
60
  # The list of accounts a user is signed into has changed.
128
61
  # @see https://api.slack.com/events/accounts_changed
129
62
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/accounts_changed.json
130
63
  # on :accounts_changed do |data|
131
64
 
132
- # An integration bot was added.
65
+ # A bot user was added.
133
66
  # @see https://api.slack.com/events/bot_added
134
67
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/bot_added.json
135
68
  on :bot_added do |data|
136
- bots[data.bot.id] = Models::Bot.new(data.bot)
69
+ bot = Models::Bot.new(data.bot)
70
+ bots[bot.id] = bot
137
71
  end
138
72
 
139
- # An integration bot was changed.
73
+ # A bot user was changed.
140
74
  # @see https://api.slack.com/events/bot_changed
141
75
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/bot_changed.json
142
76
  on :bot_changed do |data|
143
77
  bot = bots[data.bot.id]
144
- bot.merge!(data.bot) if bot
78
+ bot&.merge!(data.bot)
145
79
  end
146
80
 
147
- # A team channel was archived.
81
+ # A channel was archived.
148
82
  # @see https://api.slack.com/events/channel_archive
149
83
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_archive.json
150
84
  on :channel_archive do |data|
151
- channel = channels[data.channel]
85
+ channel = public_channels[data.channel]
152
86
  channel.is_archived = true if channel
153
87
  end
154
88
 
155
- # A team channel was created.
89
+ # A channel was created.
156
90
  # @see https://api.slack.com/events/channel_created
157
91
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_created.json
158
92
  on :channel_created do |data|
159
93
  channel = Models::Channel.new(data.channel)
160
- channels[channel.id] = channel
94
+ public_channels[channel.id] = channel
161
95
  end
162
96
 
163
- # A team channel was deleted.
97
+ # A channel was deleted.
164
98
  # @see https://api.slack.com/events/channel_deleted
165
99
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_deleted.json
166
100
  on :channel_deleted do |data|
167
- channels.delete(data.channel)
101
+ public_channels.delete(data.channel)
168
102
  end
169
103
 
170
104
  # Bulk updates were made to a channel's history.
@@ -177,11 +111,20 @@ module Slack
177
111
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_joined.json
178
112
  on :channel_joined do |data|
179
113
  channel_id = data.channel.id
180
- channel = channels[channel_id]
181
- if channel
182
- 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
183
121
  else
184
- 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
185
128
  end
186
129
  end
187
130
 
@@ -189,8 +132,8 @@ module Slack
189
132
  # @see https://api.slack.com/events/channel_left
190
133
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_left.json
191
134
  on :channel_left do |data|
192
- channel = channels[data.channel]
193
- channel.members.delete(self.self.id) if channel.key? :members
135
+ channel = public_channels[data.channel]
136
+ channel&.members&.delete(self.self.id)
194
137
  end
195
138
 
196
139
  # Your channel read marker was updated.
@@ -198,23 +141,23 @@ module Slack
198
141
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_marked.json
199
142
  # on :channel_marked do |data|
200
143
 
201
- # A team channel was renamed.
144
+ # A channel was renamed.
202
145
  # @see https://api.slack.com/events/channel_rename
203
146
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_rename.json
204
147
  on :channel_rename do |data|
205
- channel = channels[data.channel.id]
206
- channel.name = data.channel.name if channel
148
+ channel = public_channels[data.channel.id]
149
+ channel&.merge!(data.channel)
207
150
  end
208
151
 
209
- # A team channel was unarchived.
152
+ # A channel was unarchived.
210
153
  # @see https://api.slack.com/events/channel_unarchive
211
154
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/channel_unarchive.json
212
155
  on :channel_unarchive do |data|
213
- channel = channels[data.channel]
156
+ channel = public_channels[data.channel]
214
157
  channel.is_archived = false if channel
215
158
  end
216
159
 
217
- # A team slash command has been added or changed.
160
+ # A slash command has been added or changed.
218
161
  # @see https://api.slack.com/events/commands_changed
219
162
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/commands_changed.json
220
163
  # on :commands_changed do |data|
@@ -222,25 +165,40 @@ module Slack
222
165
  # Do not Disturb settings changed for the current user.
223
166
  # @see https://api.slack.com/events/dnd_updated
224
167
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/dnd_updated.json
225
- # on :dnd_updated do |data|
168
+ on :dnd_updated do |data|
169
+ self.dnd_status = data.dnd_status
170
+ end
226
171
 
227
- # Do not Disturb settings changed for a team member.
172
+ # Do not Disturb settings changed for a member.
228
173
  # @see https://api.slack.com/events/dnd_updated_user
229
174
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/dnd_updated_user.json
230
- # 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
231
179
 
232
- # The team email domain has changed.
180
+ # The workspace email domain has changed.
233
181
  # @see https://api.slack.com/events/email_domain_changed
234
182
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/email_domain_changed.json
235
183
  on :email_domain_changed do |data|
236
184
  team.email_domain = data.email_domain
237
185
  end
238
186
 
239
- # A team custom emoji has been added or changed.
187
+ # A custom emoji has been added or changed.
240
188
  # @see https://api.slack.com/events/emoji_changed
241
189
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/emoji_changed.json
242
190
  # on :emoji_changed do |data|
243
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
+
244
202
  # A file was changed.
245
203
  # @see https://api.slack.com/events/file_change
246
204
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/file_change.json
@@ -249,7 +207,7 @@ module Slack
249
207
  # A file comment was added.
250
208
  # @see https://api.slack.com/events/file_comment_added
251
209
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/file_comment_added.json
252
- # on :file_comment_added do |data| do
210
+ # on :file_comment_added do |data|
253
211
 
254
212
  # A file comment was deleted.
255
213
  # @see https://api.slack.com/events/file_comment_deleted
@@ -271,11 +229,6 @@ module Slack
271
229
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/file_deleted.json
272
230
  # on :file_deleted do |data|
273
231
 
274
- # A file was made private.
275
- # @see https://api.slack.com/events/file_private
276
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/file_private.json
277
- # on :file_private do |data|
278
-
279
232
  # A file was made public.
280
233
  # @see https://api.slack.com/events/file_public
281
234
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/file_public.json
@@ -291,85 +244,157 @@ module Slack
291
244
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/file_unshared.json
292
245
  # on :file_unshared do |data|
293
246
 
294
- # 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.
295
253
  # @see https://api.slack.com/events/group_archive
296
254
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_archive.json
297
255
  on :group_archive do |data|
298
- channel = groups[data.channel]
256
+ channel = private_channels[data.channel]
299
257
  channel.is_archived = true if channel
300
258
  end
301
259
 
302
- # You closed a group channel.
260
+ # You closed a private channel.
303
261
  # @see https://api.slack.com/events/group_close
304
262
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_close.json
305
263
  on :group_close do |data|
306
- groups[data.channel].is_open = false
264
+ channel = private_channels[data.channel]
265
+ channel.is_open = false if channel
266
+ end
267
+
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)
307
273
  end
308
274
 
309
- # Bulk updates were made to a group's history.
275
+ # Bulk updates were made to a private channel's history.
310
276
  # @see https://api.slack.com/events/group_history_changed
311
277
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_history_changed.json
312
278
  # on :group_history_changed do |data|
313
279
 
314
- # You joined a private group.
280
+ # You joined a private channel.
315
281
  # @see https://api.slack.com/events/group_joined
316
282
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_joined.json
317
283
  on :group_joined do |data|
318
- groups[data.channel.id] = Models::Channel.new(data.channel)
284
+ channel = Models::Channel.new(data.channel)
285
+ private_channels[channel.id] = channel
319
286
  end
320
287
 
321
- # You left a private group.
288
+ # You left a private channel.
322
289
  # @see https://api.slack.com/events/group_left
323
290
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_left.json
324
291
  on :group_left do |data|
325
- channel = groups[data.channel]
326
- channel.members.delete(self.self.id) if channel && 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)
327
294
  end
328
295
 
329
- # A private group read marker was updated.
296
+ # A private channel read marker was updated.
330
297
  # @see https://api.slack.com/events/group_marked
331
298
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_marked.json
332
299
  # on :group_marked do |data|
333
300
 
334
- # You opened a group channel.
301
+ # You created a group DM.
335
302
  # @see https://api.slack.com/events/group_open
336
303
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_open.json
337
304
  on :group_open do |data|
338
- groups[data.channel].is_open = true
305
+ channel = private_channels[data.channel]
306
+ channel.is_open = true if channel
339
307
  end
340
308
 
341
- # A private group was renamed.
309
+ # A private channel was renamed.
342
310
  # @see https://api.slack.com/events/group_rename
343
311
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_rename.json
344
312
  on :group_rename do |data|
345
- channel = groups[data.channel.id]
346
- channel.name = data.channel.name if channel
313
+ channel = private_channels[data.channel.id]
314
+ channel&.merge!(data.channel)
347
315
  end
348
316
 
349
- # A private group was unarchived.
317
+ # A private channel was unarchived.
350
318
  # @see https://api.slack.com/events/group_unarchive
351
319
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/group_unarchive.json
352
320
  on :group_unarchive do |data|
353
- channel = groups[data.channel]
321
+ channel = private_channels[data.channel]
354
322
  channel.is_archived = false if channel
355
323
  end
356
324
 
357
- # 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.
358
381
  # @see https://api.slack.com/events/im_close
359
382
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/im_close.json
360
383
  on :im_close do |data|
361
- return unless ims && ims.key?(data.channel)
384
+ return unless ims&.key?(data.channel)
385
+
362
386
  ims[data.channel].is_open = false
363
387
  end
364
388
 
365
- # A direct message channel was created.
389
+ # A DM was created.
366
390
  # @see https://api.slack.com/events/im_created
367
391
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/im_created.json
368
392
  on :im_created do |data|
369
- ims[data.channel.id] = Models::Im.new(data.channel)
393
+ im = Models::Im.new(data.channel)
394
+ ims[im.id] = im
370
395
  end
371
396
 
372
- # Bulk updates were made to a DM channel's history.
397
+ # Bulk updates were made to a DM's history.
373
398
  # @see https://api.slack.com/events/im_history_changed
374
399
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/im_history_changed.json
375
400
  # on :im_history_changed do |data|
@@ -379,11 +404,12 @@ module Slack
379
404
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/im_marked.json
380
405
  # on :im_marked do |data|
381
406
 
382
- # You opened a direct message channel.
407
+ # You opened a DM.
383
408
  # @see https://api.slack.com/events/im_open
384
409
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/im_open.json
385
410
  on :im_open do |data|
386
- return unless ims && ims.key?(data.channel)
411
+ return unless ims&.key?(data.channel)
412
+
387
413
  ims[data.channel].is_open = true
388
414
  end
389
415
 
@@ -394,6 +420,25 @@ module Slack
394
420
  self.self.presence = data.presence
395
421
  end
396
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
+
397
442
  # A pin was added to a channel.
398
443
  # @see https://api.slack.com/events/pin_added
399
444
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/pin_added.json
@@ -412,7 +457,7 @@ module Slack
412
457
  self.self.prefs[data.name] = data.value
413
458
  end
414
459
 
415
- # A team member's presence changed.
460
+ # A member's presence changed.
416
461
  # @see https://api.slack.com/events/presence_change
417
462
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/presence_change.json
418
463
  on :presence_change do |data|
@@ -420,12 +465,22 @@ module Slack
420
465
  user.presence = data.presence if user
421
466
  end
422
467
 
423
- # 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.
424
479
  # @see https://api.slack.com/events/reaction_added
425
480
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/reaction_added.json
426
481
  # on :reaction_added do |data|
427
482
 
428
- # A team member removed an emoji reaction.
483
+ # A member removed an emoji reaction.
429
484
  # @see https://api.slack.com/events/reaction_removed
430
485
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/reaction_removed.json
431
486
  # on :reaction_removed do |data|
@@ -435,37 +490,47 @@ module Slack
435
490
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/reconnect_url.json
436
491
  # on :reconnect_url do |data|
437
492
 
438
- # 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 saved an item for later or starred an item.
439
499
  # @see https://api.slack.com/events/star_added
440
500
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/star_added.json
441
501
  # on :star_added do |data|
442
502
 
443
- # A team member removed a star.
503
+ # A member has removed an item saved for later or starred an item.
444
504
  # @see https://api.slack.com/events/star_removed
445
505
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/star_removed.json
446
506
  # on :star_removed do |data|
447
507
 
448
- # A user group has been added to the team.
508
+ # A User Group has been added to the workspace.
449
509
  # @see https://api.slack.com/events/subteam_created
450
510
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/subteam_created.json
451
511
  # on :subteam_created do |data|
452
512
 
453
- # 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.
454
519
  # @see https://api.slack.com/events/subteam_self_added
455
520
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/subteam_self_added.json
456
521
  # on :subteam_self_added do |data|
457
522
 
458
- # You have been removed from a user group.
523
+ # You have been removed from a User Group.
459
524
  # @see https://api.slack.com/events/subteam_self_removed
460
525
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/subteam_self_removed.json
461
526
  # on :subteam_self_removed do |data|
462
527
 
463
- # An existing user group has been updated or its members changed.
528
+ # An existing User Group has been updated or its members changed.
464
529
  # @see https://api.slack.com/events/subteam_updated
465
530
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/subteam_updated.json
466
531
  # on :subteam_updated do |data|
467
532
 
468
- # The team domain has changed.
533
+ # The workspace domain has changed.
469
534
  # @see https://api.slack.com/events/team_domain_change
470
535
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_domain_change.json
471
536
  on :team_domain_change do |data|
@@ -473,26 +538,27 @@ module Slack
473
538
  team.domain = data.domain
474
539
  end
475
540
 
476
- # A new team member has joined.
541
+ # A new member has joined.
477
542
  # @see https://api.slack.com/events/team_join
478
543
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_join.json
479
544
  on :team_join do |data|
480
- users[data.user.id] = Models::User.new(data.user)
545
+ user = Models::User.new(data.user)
546
+ users[user.id] = user
481
547
  end
482
548
 
483
- # The team is being migrated between servers.
549
+ # The workspace is being migrated between servers.
484
550
  # @see https://api.slack.com/events/team_migration_started
485
551
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_migration_started.json
486
552
  # on :team_migration_started do |data|
487
553
 
488
- # The team billing plan has changed.
554
+ # The account billing plan has changed.
489
555
  # @see https://api.slack.com/events/team_plan_change
490
556
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_plan_change.json
491
557
  on :team_plan_change do |data|
492
558
  team.plan = data.plan
493
559
  end
494
560
 
495
- # A team preference has been updated.
561
+ # A preference has been updated.
496
562
  # @see https://api.slack.com/events/team_pref_change
497
563
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_pref_change.json
498
564
  on :team_pref_change do |data|
@@ -500,34 +566,53 @@ module Slack
500
566
  team.prefs[data.name] = data.value
501
567
  end
502
568
 
503
- # Team profile fields have been updated.
569
+ # The workspace profile fields have been updated.
504
570
  # @see https://api.slack.com/events/team_profile_change
505
571
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_profile_change.json
506
572
  # on :team_profile_change do |data|
507
573
 
508
- # Team profile fields have been deleted.
574
+ # The workspace profile fields have been deleted.
509
575
  # @see https://api.slack.com/events/team_profile_delete
510
576
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_profile_delete.json
511
577
  # on :team_profile_delete do |data|
512
578
 
513
- # Team profile fields have been reordered.
579
+ # The workspace profile fields have been reordered.
514
580
  # @see https://api.slack.com/events/team_profile_reorder
515
581
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_profile_reorder.json
516
582
  # on :team_profile_reorder do |data|
517
583
 
518
- # The team name has changed.
584
+ # The workspace name has changed.
519
585
  # @see https://api.slack.com/events/team_rename
520
586
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/team_rename.json
521
587
  on :team_rename do |data|
522
588
  team.name = data.name
523
589
  end
524
590
 
525
- # A team member's data has changed.
591
+ # A member's data has changed.
526
592
  # @see https://api.slack.com/events/user_change
527
593
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/user_change.json
528
594
  on :user_change do |data|
529
- users[data.user.id] = Models::User.new(data.user)
530
- 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)
531
616
 
532
617
  # A channel member is typing a message.
533
618
  # @see https://api.slack.com/events/user_typing