slack-ruby-client 0.14.6 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (274) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.rubocop.yml +15 -3
  4. data/.rubocop_todo.yml +110 -38
  5. data/.travis.yml +2 -5
  6. data/CHANGELOG.md +42 -0
  7. data/CONTRIBUTING.md +19 -8
  8. data/Dangerfile +1 -1
  9. data/Gemfile +1 -2
  10. data/LICENSE.md +1 -1
  11. data/README.md +38 -36
  12. data/RELEASING.md +1 -1
  13. data/UPGRADING.md +62 -2
  14. data/bin/commands/admin_analytics.rb +16 -0
  15. data/bin/commands/admin_apps.rb +26 -2
  16. data/bin/commands/admin_apps_requests.rb +1 -0
  17. data/bin/commands/admin_auth_policy.rb +39 -0
  18. data/bin/commands/admin_barriers.rb +47 -0
  19. data/bin/commands/admin_conversations.rb +155 -3
  20. data/bin/commands/admin_conversations_ekm.rb +17 -0
  21. data/bin/commands/admin_conversations_restrictAccess.rb +37 -0
  22. data/bin/commands/admin_conversations_whitelist.rb +37 -0
  23. data/bin/commands/admin_emoji.rb +1 -1
  24. data/bin/commands/admin_teams.rb +1 -1
  25. data/bin/commands/admin_usergroups.rb +48 -0
  26. data/bin/commands/admin_users.rb +3 -2
  27. data/bin/commands/admin_users_session.rb +62 -0
  28. data/bin/commands/api.rb +0 -1
  29. data/bin/commands/apps_connections.rb +13 -0
  30. data/bin/commands/apps_event_authorizations.rb +16 -0
  31. data/bin/commands/apps_manifest.rb +51 -0
  32. data/bin/commands/auth_teams.rb +16 -0
  33. data/bin/commands/bots.rb +1 -0
  34. data/bin/commands/calls.rb +52 -0
  35. data/bin/commands/calls_participants.rb +25 -0
  36. data/bin/commands/channels.rb +1 -155
  37. data/bin/commands/chat.rb +17 -12
  38. data/bin/commands/chat_scheduledMessages.rb +1 -0
  39. data/bin/commands/conversations.rb +71 -3
  40. data/bin/commands/dnd.rb +2 -0
  41. data/bin/commands/files.rb +6 -4
  42. data/bin/commands/files_remote.rb +2 -2
  43. data/bin/commands/groups.rb +1 -162
  44. data/bin/commands/im.rb +1 -63
  45. data/bin/commands/migration.rb +1 -0
  46. data/bin/commands/mpim.rb +1 -61
  47. data/bin/commands/oauth.rb +0 -13
  48. data/bin/commands/oauth_v2.rb +13 -1
  49. data/bin/commands/openid_connect.rb +27 -0
  50. data/bin/commands/pins.rb +2 -4
  51. data/bin/commands/reactions.rb +1 -0
  52. data/bin/commands/reminders.rb +6 -0
  53. data/bin/commands/rtm.rb +2 -2
  54. data/bin/commands/search.rb +4 -0
  55. data/bin/commands/stars.rb +7 -6
  56. data/bin/commands/team.rb +3 -0
  57. data/bin/commands/team_billing.rb +13 -0
  58. data/bin/commands/team_preferences.rb +13 -0
  59. data/bin/commands/tooling_tokens.rb +14 -0
  60. data/bin/commands/usergroups.rb +5 -0
  61. data/bin/commands/usergroups_users.rb +2 -0
  62. data/bin/commands/users.rb +4 -2
  63. data/bin/commands/users_profile.rb +5 -5
  64. data/bin/commands/views.rb +2 -2
  65. data/bin/commands/workflows.rb +38 -0
  66. data/bin/commands.rb +17 -8
  67. data/lib/slack/config.rb +1 -2
  68. data/lib/slack/events/request.rb +10 -4
  69. data/lib/slack/messages/message.rb +0 -4
  70. data/lib/slack/real_time/client.rb +6 -6
  71. data/lib/slack/real_time/concurrency/async.rb +7 -11
  72. data/lib/slack/real_time/concurrency.rb +0 -2
  73. data/lib/slack/real_time/config.rb +5 -14
  74. data/lib/slack/real_time/models/base.rb +0 -4
  75. data/lib/slack/real_time/socket.rb +3 -4
  76. data/lib/slack/real_time/stores/base.rb +4 -7
  77. data/lib/slack/real_time/stores/starter.rb +6 -3
  78. data/lib/slack/real_time/stores/store.rb +5 -0
  79. data/lib/slack/version.rb +1 -1
  80. data/lib/slack/web/api/endpoints/admin_analytics.rb +28 -0
  81. data/lib/slack/web/api/endpoints/admin_apps.rb +42 -6
  82. data/lib/slack/web/api/endpoints/admin_apps_approved.rb +2 -2
  83. data/lib/slack/web/api/endpoints/admin_apps_requests.rb +4 -2
  84. data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +2 -2
  85. data/lib/slack/web/api/endpoints/admin_auth_policy.rb +72 -0
  86. data/lib/slack/web/api/endpoints/admin_barriers.rb +82 -0
  87. data/lib/slack/web/api/endpoints/admin_conversations.rb +234 -4
  88. data/lib/slack/web/api/endpoints/admin_conversations_ekm.rb +35 -0
  89. data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +61 -0
  90. data/lib/slack/web/api/endpoints/admin_conversations_whitelist.rb +64 -0
  91. data/lib/slack/web/api/endpoints/admin_emoji.rb +10 -10
  92. data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +7 -7
  93. data/lib/slack/web/api/endpoints/admin_inviteRequests_approved.rb +3 -3
  94. data/lib/slack/web/api/endpoints/admin_inviteRequests_denied.rb +2 -2
  95. data/lib/slack/web/api/endpoints/admin_teams.rb +7 -7
  96. data/lib/slack/web/api/endpoints/admin_teams_admins.rb +2 -2
  97. data/lib/slack/web/api/endpoints/admin_teams_owners.rb +2 -2
  98. data/lib/slack/web/api/endpoints/admin_teams_settings.rb +5 -5
  99. data/lib/slack/web/api/endpoints/admin_usergroups.rb +77 -0
  100. data/lib/slack/web/api/endpoints/admin_users.rb +23 -23
  101. data/lib/slack/web/api/endpoints/admin_users_session.rb +97 -3
  102. data/lib/slack/web/api/endpoints/api.rb +1 -3
  103. data/lib/slack/web/api/endpoints/apps.rb +2 -2
  104. data/lib/slack/web/api/endpoints/apps_connections.rb +21 -0
  105. data/lib/slack/web/api/endpoints/apps_event_authorizations.rb +34 -0
  106. data/lib/slack/web/api/endpoints/apps_manifest.rb +75 -0
  107. data/lib/slack/web/api/endpoints/auth.rb +1 -1
  108. data/lib/slack/web/api/endpoints/auth_teams.rb +33 -0
  109. data/lib/slack/web/api/endpoints/bots.rb +3 -1
  110. data/lib/slack/web/api/endpoints/calls.rb +83 -0
  111. data/lib/slack/web/api/endpoints/calls_participants.rb +42 -0
  112. data/lib/slack/web/api/endpoints/channels.rb +1 -245
  113. data/lib/slack/web/api/endpoints/chat.rb +76 -66
  114. data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +5 -3
  115. data/lib/slack/web/api/endpoints/conversations.rb +149 -41
  116. data/lib/slack/web/api/endpoints/dialog.rb +2 -2
  117. data/lib/slack/web/api/endpoints/dnd.rb +6 -3
  118. data/lib/slack/web/api/endpoints/files.rb +21 -17
  119. data/lib/slack/web/api/endpoints/files_comments.rb +1 -1
  120. data/lib/slack/web/api/endpoints/files_remote.rb +23 -23
  121. data/lib/slack/web/api/endpoints/groups.rb +0 -253
  122. data/lib/slack/web/api/endpoints/im.rb +0 -101
  123. data/lib/slack/web/api/endpoints/migration.rb +4 -2
  124. data/lib/slack/web/api/endpoints/mpim.rb +0 -96
  125. data/lib/slack/web/api/endpoints/oauth.rb +5 -30
  126. data/lib/slack/web/api/endpoints/oauth_v2.rb +24 -6
  127. data/lib/slack/web/api/endpoints/openid_connect.rb +42 -0
  128. data/lib/slack/web/api/endpoints/pins.rb +7 -12
  129. data/lib/slack/web/api/endpoints/reactions.rb +16 -14
  130. data/lib/slack/web/api/endpoints/reminders.rb +17 -5
  131. data/lib/slack/web/api/endpoints/rtm.rb +10 -10
  132. data/lib/slack/web/api/endpoints/search.rb +27 -13
  133. data/lib/slack/web/api/endpoints/stars.rb +13 -11
  134. data/lib/slack/web/api/endpoints/team.rb +11 -5
  135. data/lib/slack/web/api/endpoints/team_billing.rb +21 -0
  136. data/lib/slack/web/api/endpoints/team_preferences.rb +21 -0
  137. data/lib/slack/web/api/endpoints/team_profile.rb +1 -1
  138. data/lib/slack/web/api/endpoints/tooling_tokens.rb +24 -0
  139. data/lib/slack/web/api/endpoints/usergroups.rb +26 -16
  140. data/lib/slack/web/api/endpoints/usergroups_users.rb +9 -5
  141. data/lib/slack/web/api/endpoints/users.rb +20 -18
  142. data/lib/slack/web/api/endpoints/users_profile.rb +7 -7
  143. data/lib/slack/web/api/endpoints/views.rb +13 -13
  144. data/lib/slack/web/api/endpoints/workflows.rb +61 -0
  145. data/lib/slack/web/api/endpoints.rb +35 -18
  146. data/lib/slack/web/api/errors/server_error.rb +37 -0
  147. data/lib/slack/web/api/errors/too_many_requests_error.rb +1 -4
  148. data/lib/slack/web/api/errors.rb +486 -12
  149. data/lib/slack/web/api/mixins/{channels.id.rb → conversations.id.rb} +3 -5
  150. data/lib/slack/web/api/mixins/ids.id.rb +3 -5
  151. data/lib/slack/web/api/mixins/users.id.rb +1 -3
  152. data/lib/slack/web/api/mixins.rb +1 -2
  153. data/lib/slack/web/api/patches/{chat.6.block-kit-support.patch → chat.1.patch} +25 -24
  154. data/lib/slack/web/api/templates/endpoints.erb +1 -2
  155. data/lib/slack/web/api/templates/method.erb +4 -1
  156. data/lib/slack/web/api/templates/method_spec.erb +1 -1
  157. data/lib/slack/web/config.rb +2 -0
  158. data/lib/slack/web/faraday/connection.rb +23 -20
  159. data/lib/slack/web/faraday/request.rb +2 -1
  160. data/lib/slack/web/faraday/response/raise_error.rb +12 -1
  161. data/lib/slack/web/faraday/response/wrap_error.rb +24 -0
  162. data/lib/slack/web/pagination/cursor.rb +3 -7
  163. data/lib/slack-ruby-client.rb +4 -4
  164. data/lib/tasks/web.rake +11 -3
  165. data/slack-ruby-client.gemspec +6 -7
  166. data/spec/fixtures/slack/web/429_error.yml +50 -54
  167. data/spec/fixtures/slack/web/auth_test_error.yml +51 -18
  168. data/spec/fixtures/slack/web/auth_test_success.yml +50 -26
  169. data/spec/fixtures/slack/web/conversations_info.yml +167 -0
  170. data/spec/fixtures/slack/web/conversations_setTopic.yml +84 -0
  171. data/spec/fixtures/slack/web/conversations_setTopic_one_page.yml +172 -0
  172. data/spec/fixtures/slack/web/conversations_setTopic_paginated.yml +253 -0
  173. data/spec/fixtures/slack/web/paginated_users_list.yml +501 -69
  174. data/spec/fixtures/slack/web/rtm_connect.yml +267 -30
  175. data/spec/fixtures/slack/web/rtm_start.yml +771 -60
  176. data/spec/fixtures/slack/web/users_info.yml +153 -69
  177. data/spec/fixtures/slack/web/users_list.yml +102 -41
  178. data/spec/fixtures/slack/web/views_open_error.yml +49 -42
  179. data/spec/slack/events/request_spec.rb +13 -8
  180. data/spec/slack/real_time/client_spec.rb +35 -22
  181. data/spec/slack/real_time/concurrency/with_concurrency_spec.rb +10 -0
  182. data/spec/slack/real_time/concurrency/without_concurrency_spec.rb +10 -0
  183. data/spec/slack/real_time/event_handlers/bot_spec.rb +1 -1
  184. data/spec/slack/real_time/event_handlers/channel_spec.rb +1 -1
  185. data/spec/slack/real_time/event_handlers/im_spec.rb +5 -5
  186. data/spec/slack/real_time/event_handlers/user_spec.rb +2 -2
  187. data/spec/slack/real_time/rtm_connect_spec.rb +1 -1
  188. data/spec/slack/real_time/rtm_start_spec.rb +1 -1
  189. data/spec/slack/slack_spec.rb +3 -1
  190. data/spec/slack/web/api/endpoints/admin_analytics_spec.rb +13 -0
  191. data/spec/slack/web/api/endpoints/admin_apps_spec.rb +10 -0
  192. data/spec/slack/web/api/endpoints/admin_auth_policy_spec.rb +35 -0
  193. data/spec/slack/web/api/endpoints/admin_barriers_spec.rb +38 -0
  194. data/spec/slack/web/api/endpoints/{apps_permissions_scopes_spec.rb → admin_conversations_ekm_spec.rb} +1 -1
  195. data/spec/slack/web/api/endpoints/admin_conversations_restrictAccess_spec.rb +32 -0
  196. data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +85 -0
  197. data/spec/slack/web/api/endpoints/admin_emoji_spec.rb +6 -6
  198. data/spec/slack/web/api/endpoints/admin_teams_settings_spec.rb +10 -10
  199. data/spec/slack/web/api/endpoints/admin_teams_spec.rb +2 -2
  200. data/spec/slack/web/api/endpoints/admin_usergroups_spec.rb +37 -0
  201. data/spec/slack/web/api/endpoints/admin_users_session_spec.rb +28 -0
  202. data/spec/slack/web/api/endpoints/admin_users_spec.rb +15 -23
  203. data/spec/slack/web/api/endpoints/{apps_permissions_resources_spec.rb → apps_connections_spec.rb} +1 -1
  204. data/spec/slack/web/api/endpoints/apps_event_authorizations_spec.rb +13 -0
  205. data/spec/slack/web/api/endpoints/apps_manifest_spec.rb +36 -0
  206. data/spec/slack/web/api/endpoints/apps_spec.rb +2 -2
  207. data/spec/slack/web/api/endpoints/auth_teams_spec.rb +8 -0
  208. data/spec/slack/web/api/endpoints/calls_participants_spec.rb +24 -0
  209. data/spec/slack/web/api/endpoints/calls_spec.rb +31 -0
  210. data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +4 -6
  211. data/spec/slack/web/api/endpoints/custom_specs/conversations_spec.rb +13 -0
  212. data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +2 -2
  213. data/spec/slack/web/api/endpoints/dnd_spec.rb +0 -5
  214. data/spec/slack/web/api/endpoints/files_comments_spec.rb +2 -2
  215. data/spec/slack/web/api/endpoints/files_remote_spec.rb +3 -3
  216. data/spec/slack/web/api/endpoints/files_spec.rb +4 -4
  217. data/spec/slack/web/api/endpoints/oauth_spec.rb +0 -22
  218. data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +6 -3
  219. data/spec/slack/web/api/endpoints/openid_connect_spec.rb +8 -0
  220. data/spec/slack/web/api/endpoints/pins_spec.rb +1 -4
  221. data/spec/slack/web/api/endpoints/reactions_spec.rb +3 -3
  222. data/spec/slack/web/api/endpoints/reminders_spec.rb +2 -2
  223. data/spec/slack/web/api/endpoints/team_billing_spec.rb +8 -0
  224. data/spec/slack/web/api/endpoints/team_preferences_spec.rb +8 -0
  225. data/spec/slack/web/api/endpoints/tooling_tokens_spec.rb +13 -0
  226. data/spec/slack/web/api/endpoints/usergroups_users_spec.rb +2 -2
  227. data/spec/slack/web/api/endpoints/workflows_spec.rb +26 -0
  228. data/spec/slack/web/api/error_spec.rb +5 -7
  229. data/spec/slack/web/api/errors/slack_error_spec.rb +21 -26
  230. data/spec/slack/web/api/mixins/conversations_list_spec.rb +21 -0
  231. data/spec/slack/web/api/mixins/{channels_spec.rb → conversations_spec.rb} +8 -8
  232. data/spec/slack/web/api/mixins/users_spec.rb +1 -1
  233. data/spec/slack/web/api/pagination/cursor_spec.rb +1 -3
  234. data/spec/slack/web/client_spec.rb +123 -1
  235. data/spec/slack/web/faraday/request_spec.rb +80 -0
  236. data/spec/slack/web/faraday/response/raise_error_spec.rb +8 -6
  237. data/spec/spec_helper.rb +1 -1
  238. data/spec/support/real_time/connected_client.rb +1 -7
  239. data/spec/support/vcr.rb +36 -1
  240. metadata +95 -173
  241. data/examples/hi_real_time/Gemfile +0 -6
  242. data/examples/hi_real_time/hi.gif +0 -0
  243. data/examples/hi_real_time/hi.rb +0 -41
  244. data/examples/hi_real_time_async_celluloid/Gemfile +0 -7
  245. data/examples/hi_real_time_async_celluloid/Procfile +0 -2
  246. data/examples/hi_real_time_async_celluloid/hi.rb +0 -39
  247. data/examples/hi_real_time_async_eventmachine/Gemfile +0 -7
  248. data/examples/hi_real_time_async_eventmachine/Procfile +0 -2
  249. data/examples/hi_real_time_async_eventmachine/hi.rb +0 -39
  250. data/lib/slack/real_time/concurrency/celluloid.rb +0 -142
  251. data/lib/slack/real_time/concurrency/eventmachine.rb +0 -85
  252. data/lib/slack/web/api/mixins/channels.id.json +0 -20
  253. data/lib/slack/web/api/mixins/groups.id.json +0 -20
  254. data/lib/slack/web/api/mixins/groups.id.rb +0 -27
  255. data/lib/slack/web/api/patches/chat.1.text-attachments-required.patch +0 -13
  256. data/lib/slack/web/api/patches/chat.2.attachments-json.patch +0 -17
  257. data/lib/slack/web/api/patches/chat.3.update-attachments-support.patch +0 -21
  258. data/lib/slack/web/api/patches/chat.4.postEphemeral-attachments-support.patch +0 -17
  259. data/lib/slack/web/api/patches/chat.5.postEphemeral-text-or-attachments.patch +0 -15
  260. data/spec/fixtures/slack/web/503_error.yml +0 -14
  261. data/spec/fixtures/slack/web/channels_info.yml +0 -46
  262. data/spec/fixtures/slack/web/groups_info.yml +0 -43
  263. data/spec/slack/real_time/concurrency/celluloid_spec.rb +0 -116
  264. data/spec/slack/real_time/concurrency/eventmachine_spec.rb +0 -57
  265. data/spec/slack/web/api/endpoints/apps_permissions_spec.rb +0 -16
  266. data/spec/slack/web/api/endpoints/apps_permissions_users_spec.rb +0 -19
  267. data/spec/slack/web/api/endpoints/conversations_spec.rb +0 -101
  268. data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +0 -13
  269. data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +0 -13
  270. data/spec/slack/web/api/endpoints/im_spec.rb +0 -39
  271. data/spec/slack/web/api/endpoints/mpim_spec.rb +0 -39
  272. data/spec/slack/web/api/endpoints/views_spec.rb +0 -29
  273. data/spec/slack/web/api/errors/service_unavailable_spec.rb +0 -17
  274. data/spec/slack/web/api/mixins/groups_spec.rb +0 -43
@@ -8,6 +8,8 @@ command 'reminders' do |g|
8
8
  g.command 'add' do |c|
9
9
  c.flag 'text', desc: 'The content of the reminder.'
10
10
  c.flag 'time', desc: 'When this reminder should happen: the Unix timestamp (up to five years from now), the number of seconds until the reminder (if within 24 hours), or a natural language description (Ex. "in 15 minutes," or "every Thursday").'
11
+ c.flag 'recurrence', desc: 'Specify the repeating behavior of a reminder. Available options: daily, weekly, monthly, or yearly. If weekly, may further specify the days of the week.'
12
+ c.flag 'team_id', desc: 'Encoded team id, required if org token is used.'
11
13
  c.flag 'user', desc: 'The user who will receive the reminder. If no user is specified, the reminder will go to user who created it.'
12
14
  c.action do |_global_options, options, _args|
13
15
  puts JSON.dump($client.reminders_add(options))
@@ -18,6 +20,7 @@ command 'reminders' do |g|
18
20
  g.long_desc %( Marks a reminder as complete. )
19
21
  g.command 'complete' do |c|
20
22
  c.flag 'reminder', desc: 'The ID of the reminder to be marked as complete.'
23
+ c.flag 'team_id', desc: 'Encoded team id, required if org token is used.'
21
24
  c.action do |_global_options, options, _args|
22
25
  puts JSON.dump($client.reminders_complete(options))
23
26
  end
@@ -27,6 +30,7 @@ command 'reminders' do |g|
27
30
  g.long_desc %( Deletes a reminder. )
28
31
  g.command 'delete' do |c|
29
32
  c.flag 'reminder', desc: 'The ID of the reminder.'
33
+ c.flag 'team_id', desc: 'Encoded team id, required if org token is used.'
30
34
  c.action do |_global_options, options, _args|
31
35
  puts JSON.dump($client.reminders_delete(options))
32
36
  end
@@ -36,6 +40,7 @@ command 'reminders' do |g|
36
40
  g.long_desc %( Gets information about a reminder. )
37
41
  g.command 'info' do |c|
38
42
  c.flag 'reminder', desc: 'The ID of the reminder.'
43
+ c.flag 'team_id', desc: 'Encoded team id, required if org token is passed.'
39
44
  c.action do |_global_options, options, _args|
40
45
  puts JSON.dump($client.reminders_info(options))
41
46
  end
@@ -44,6 +49,7 @@ command 'reminders' do |g|
44
49
  g.desc 'Lists all reminders created by or for a given user.'
45
50
  g.long_desc %( Lists all reminders created by or for a given user. )
46
51
  g.command 'list' do |c|
52
+ c.flag 'team_id', desc: 'Encoded team id, required if org token is passed.'
47
53
  c.action do |_global_options, options, _args|
48
54
  puts JSON.dump($client.reminders_list(options))
49
55
  end
data/bin/commands/rtm.rb CHANGED
@@ -13,8 +13,8 @@ command 'rtm' do |g|
13
13
  end
14
14
  end
15
15
 
16
- g.desc 'Starts a Real Time Messaging session.'
17
- g.long_desc %( Starts a Real Time Messaging session. )
16
+ g.desc 'Deprecated: Starts a Real Time Messaging session. Use rtm.connect instead.'
17
+ g.long_desc %( Deprecated: Starts a Real Time Messaging session. Use rtm.connect instead. )
18
18
  g.command 'start' do |c|
19
19
  c.flag 'batch_presence_aware', desc: 'Batch presence deliveries via subscription. Enabling changes the shape of presence_change events. See batch presence.'
20
20
  c.flag 'include_locale', desc: 'Set this to true to receive the locale for users and channels. Defaults to false.'
@@ -10,6 +10,7 @@ command 'search' do |g|
10
10
  c.flag 'highlight', desc: 'Pass a value of true to enable query highlight markers (see below).'
11
11
  c.flag 'sort', desc: 'Return matches sorted by either score or timestamp.'
12
12
  c.flag 'sort_dir', desc: 'Change sort direction to ascending (asc) or descending (desc).'
13
+ c.flag 'team_id', desc: 'encoded team id to search in, required if org token is used.'
13
14
  c.action do |_global_options, options, _args|
14
15
  puts JSON.dump($client.search_all(options))
15
16
  end
@@ -22,6 +23,7 @@ command 'search' do |g|
22
23
  c.flag 'highlight', desc: 'Pass a value of true to enable query highlight markers (see below).'
23
24
  c.flag 'sort', desc: 'Return matches sorted by either score or timestamp.'
24
25
  c.flag 'sort_dir', desc: 'Change sort direction to ascending (asc) or descending (desc).'
26
+ c.flag 'team_id', desc: 'encoded team id to search in, required if org token is used.'
25
27
  c.action do |_global_options, options, _args|
26
28
  puts JSON.dump($client.search_files(options))
27
29
  end
@@ -31,9 +33,11 @@ command 'search' do |g|
31
33
  g.long_desc %( Searches for messages matching a query. )
32
34
  g.command 'messages' do |c|
33
35
  c.flag 'query', desc: 'Search query.'
36
+ c.flag 'cursor', desc: "Use this when getting results with cursormark pagination. For first call send * for subsequent calls, send the value of next_cursor returned in the previous call's results."
34
37
  c.flag 'highlight', desc: 'Pass a value of true to enable query highlight markers (see below).'
35
38
  c.flag 'sort', desc: 'Return matches sorted by either score or timestamp.'
36
39
  c.flag 'sort_dir', desc: 'Change sort direction to ascending (asc) or descending (desc).'
40
+ c.flag 'team_id', desc: 'encoded team id to search in, required if org token is used.'
37
41
  c.action do |_global_options, options, _args|
38
42
  puts JSON.dump($client.search_messages(options))
39
43
  end
@@ -3,8 +3,8 @@
3
3
 
4
4
  desc 'Stars methods.'
5
5
  command 'stars' do |g|
6
- g.desc 'Adds a star to an item.'
7
- g.long_desc %( Adds a star to an item. )
6
+ g.desc 'Save an item for later. Formerly known as _adding a star_.'
7
+ g.long_desc %( Save an item for later. Formerly known as _adding a star_. )
8
8
  g.command 'add' do |c|
9
9
  c.flag 'channel', desc: 'Channel to add star to, or channel where the message to add star to was posted (used with timestamp).'
10
10
  c.flag 'file', desc: 'File to add star to.'
@@ -15,18 +15,19 @@ command 'stars' do |g|
15
15
  end
16
16
  end
17
17
 
18
- g.desc 'Lists stars for a user.'
19
- g.long_desc %( Lists stars for a user. )
18
+ g.desc "List a user's saved items, formerly known as _stars_."
19
+ g.long_desc %( List a user's saved items, formerly known as _stars_. )
20
20
  g.command 'list' do |c|
21
21
  c.flag 'cursor', desc: "Parameter for pagination. Set cursor equal to the next_cursor attribute returned by the previous request's response_metadata. This parameter is optional, but pagination is mandatory: the default value simply fetches the first 'page' of the collection. See pagination for more details."
22
22
  c.flag 'limit', desc: "The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the list hasn't been reached."
23
+ c.flag 'team_id', desc: 'encoded team id to list stars in, required if org token is used.'
23
24
  c.action do |_global_options, options, _args|
24
25
  puts JSON.dump($client.stars_list(options))
25
26
  end
26
27
  end
27
28
 
28
- g.desc 'Removes a star from an item.'
29
- g.long_desc %( Removes a star from an item. )
29
+ g.desc 'Removes a saved item (star) from an item.'
30
+ g.long_desc %( Removes a saved item (star) from an item. )
30
31
  g.command 'remove' do |c|
31
32
  c.flag 'channel', desc: 'Channel to remove star from, or channel where the message to remove star from was posted (used with timestamp).'
32
33
  c.flag 'file', desc: 'File to remove star from.'
data/bin/commands/team.rb CHANGED
@@ -7,6 +7,7 @@ command 'team' do |g|
7
7
  g.long_desc %( Gets the access logs for the current team. )
8
8
  g.command 'accessLogs' do |c|
9
9
  c.flag 'before', desc: 'End of time range of logs to include in results (inclusive).'
10
+ c.flag 'team_id', desc: 'encoded team id to get logs from, required if org token is used.'
10
11
  c.action do |_global_options, options, _args|
11
12
  puts JSON.dump($client.team_accessLogs(options))
12
13
  end
@@ -15,6 +16,7 @@ command 'team' do |g|
15
16
  g.desc 'Gets billable users information for the current team.'
16
17
  g.long_desc %( Gets billable users information for the current team. )
17
18
  g.command 'billableInfo' do |c|
19
+ c.flag 'team_id', desc: 'encoded team id to get the billable information from, required if org token is used.'
18
20
  c.flag 'user', desc: 'A user to retrieve the billable information for. Defaults to all users.'
19
21
  c.action do |_global_options, options, _args|
20
22
  puts JSON.dump($client.team_billableInfo(options))
@@ -36,6 +38,7 @@ command 'team' do |g|
36
38
  c.flag 'app_id', desc: 'Filter logs to this Slack app. Defaults to all logs.'
37
39
  c.flag 'change_type', desc: 'Filter logs with this change type. Defaults to all logs.'
38
40
  c.flag 'service_id', desc: 'Filter logs to this service. Defaults to all logs.'
41
+ c.flag 'team_id', desc: 'encoded team id to get logs from, required if org token is used.'
39
42
  c.flag 'user', desc: "Filter logs generated by this user's actions. Defaults to all logs."
40
43
  c.action do |_global_options, options, _args|
41
44
  puts JSON.dump($client.team_integrationLogs(options))
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ desc 'TeamBilling methods.'
5
+ command 'team_billing' do |g|
6
+ g.desc "Reads a workspace's billing plan information."
7
+ g.long_desc %( Reads a workspace's billing plan information. )
8
+ g.command 'info' do |c|
9
+ c.action do |_global_options, options, _args|
10
+ puts JSON.dump($client.team_billing_info(options))
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ desc 'TeamPreferences methods.'
5
+ command 'team_preferences' do |g|
6
+ g.desc "Retrieve a list of a workspace's team preferences."
7
+ g.long_desc %( Retrieve a list of a workspace's team preferences. )
8
+ g.command 'list' do |c|
9
+ c.action do |_global_options, options, _args|
10
+ puts JSON.dump($client.team_preferences_list(options))
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ desc 'ToolingTokens methods.'
5
+ command 'tooling_tokens' do |g|
6
+ g.desc 'Exchanges a refresh token for a new app configuration token.'
7
+ g.long_desc %( Exchanges a refresh token for a new app configuration token. )
8
+ g.command 'rotate' do |c|
9
+ c.flag 'refresh_token', desc: 'The xoxe refresh token that was issued along with the old app configuration token.'
10
+ c.action do |_global_options, options, _args|
11
+ puts JSON.dump($client.tooling_tokens_rotate(options))
12
+ end
13
+ end
14
+ end
@@ -11,6 +11,7 @@ command 'usergroups' do |g|
11
11
  c.flag 'description', desc: 'A short description of the User Group.'
12
12
  c.flag 'handle', desc: 'A mention handle. Must be unique among channels, users and User Groups.'
13
13
  c.flag 'include_count', desc: 'Include the number of users in each User Group.'
14
+ c.flag 'team_id', desc: 'Encoded team id where the user group has to be created, required if org token is used.'
14
15
  c.action do |_global_options, options, _args|
15
16
  puts JSON.dump($client.usergroups_create(options))
16
17
  end
@@ -21,6 +22,7 @@ command 'usergroups' do |g|
21
22
  g.command 'disable' do |c|
22
23
  c.flag 'usergroup', desc: 'The encoded ID of the User Group to disable.'
23
24
  c.flag 'include_count', desc: 'Include the number of users in the User Group.'
25
+ c.flag 'team_id', desc: 'Encoded team id where the user group is, required if org token is used.'
24
26
  c.action do |_global_options, options, _args|
25
27
  puts JSON.dump($client.usergroups_disable(options))
26
28
  end
@@ -31,6 +33,7 @@ command 'usergroups' do |g|
31
33
  g.command 'enable' do |c|
32
34
  c.flag 'usergroup', desc: 'The encoded ID of the User Group to enable.'
33
35
  c.flag 'include_count', desc: 'Include the number of users in the User Group.'
36
+ c.flag 'team_id', desc: 'Encoded team id where the user group is, required if org token is used.'
34
37
  c.action do |_global_options, options, _args|
35
38
  puts JSON.dump($client.usergroups_enable(options))
36
39
  end
@@ -42,6 +45,7 @@ command 'usergroups' do |g|
42
45
  c.flag 'include_count', desc: 'Include the number of users in each User Group.'
43
46
  c.flag 'include_disabled', desc: 'Include disabled User Groups.'
44
47
  c.flag 'include_users', desc: 'Include the list of users for each User Group.'
48
+ c.flag 'team_id', desc: 'encoded team id to list user groups in, required if org token is used.'
45
49
  c.action do |_global_options, options, _args|
46
50
  puts JSON.dump($client.usergroups_list(options))
47
51
  end
@@ -56,6 +60,7 @@ command 'usergroups' do |g|
56
60
  c.flag 'handle', desc: 'A mention handle. Must be unique among channels, users and User Groups.'
57
61
  c.flag 'include_count', desc: 'Include the number of users in the User Group.'
58
62
  c.flag 'name', desc: 'A name for the User Group. Must be unique among User Groups.'
63
+ c.flag 'team_id', desc: 'encoded team id where the user group exists, required if org token is used.'
59
64
  c.action do |_global_options, options, _args|
60
65
  puts JSON.dump($client.usergroups_update(options))
61
66
  end
@@ -8,6 +8,7 @@ command 'usergroups_users' do |g|
8
8
  g.command 'list' do |c|
9
9
  c.flag 'usergroup', desc: 'The encoded ID of the User Group to update.'
10
10
  c.flag 'include_disabled', desc: 'Allow results that involve disabled User Groups.'
11
+ c.flag 'team_id', desc: 'encoded team id where the user group exists, required if org token is used.'
11
12
  c.action do |_global_options, options, _args|
12
13
  puts JSON.dump($client.usergroups_users_list(options))
13
14
  end
@@ -19,6 +20,7 @@ command 'usergroups_users' do |g|
19
20
  c.flag 'usergroup', desc: 'The encoded ID of the User Group to update.'
20
21
  c.flag 'users', desc: 'A comma separated string of encoded user IDs that represent the entire list of users for the User Group.'
21
22
  c.flag 'include_count', desc: 'Include the number of users in the User Group.'
23
+ c.flag 'team_id', desc: 'encoded team id where the user group exists, required if org token is used.'
22
24
  c.action do |_global_options, options, _args|
23
25
  puts JSON.dump($client.usergroups_users_update(options))
24
26
  end
@@ -9,6 +9,7 @@ command 'users' do |g|
9
9
  c.flag 'cursor', desc: "Paginate through collections of data by setting the cursor parameter to a next_cursor attribute returned by a previous request's response_metadata. Default value fetches the first 'page' of the collection. See pagination for more detail."
10
10
  c.flag 'exclude_archived', desc: 'Set to true to exclude archived channels from the list.'
11
11
  c.flag 'limit', desc: "The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the list hasn't been reached. Must be an integer no larger than 1000."
12
+ c.flag 'team_id', desc: 'encoded team id to list conversations in, required if org token is used.'
12
13
  c.flag 'types', desc: 'Mix and match channel types by providing a comma-separated list of any combination of public_channel, private_channel, mpim, im.'
13
14
  c.flag 'user', desc: "Browse conversations by a specific user ID's membership. Non-public channels are restricted to those where the calling user shares membership."
14
15
  c.action do |_global_options, options, _args|
@@ -65,7 +66,8 @@ command 'users' do |g|
65
66
  g.command 'list' do |c|
66
67
  c.flag 'cursor', desc: "Paginate through collections of data by setting the cursor parameter to a next_cursor attribute returned by a previous request's response_metadata. Default value fetches the first 'page' of the collection. See pagination for more detail."
67
68
  c.flag 'include_locale', desc: 'Set this to true to receive the locale for users. Defaults to false.'
68
- c.flag 'limit', desc: "The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the users list hasn't been reached."
69
+ c.flag 'limit', desc: "The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the users list hasn't been reached. Providing no limit value will result in Slack attempting to deliver you the entire result set. If the collection is too large you may experience limit_required or HTTP 500 errors."
70
+ c.flag 'team_id', desc: 'encoded team id to list users in, required if org token is used.'
69
71
  c.action do |_global_options, options, _args|
70
72
  puts JSON.dump($client.users_list(options))
71
73
  end
@@ -100,10 +102,10 @@ command 'users' do |g|
100
102
  g.desc 'Set the user profile photo'
101
103
  g.long_desc %( Set the user profile photo )
102
104
  g.command 'setPhoto' do |c|
103
- c.flag 'image', desc: 'File contents via multipart/form-data.'
104
105
  c.flag 'crop_w', desc: 'Width/height of crop box (always square).'
105
106
  c.flag 'crop_x', desc: 'X coordinate of top-left corner of crop box.'
106
107
  c.flag 'crop_y', desc: 'Y coordinate of top-left corner of crop box.'
108
+ c.flag 'image', desc: 'File contents via multipart/form-data.'
107
109
  c.action do |_global_options, options, _args|
108
110
  puts JSON.dump($client.users_setPhoto(options))
109
111
  end
@@ -3,18 +3,18 @@
3
3
 
4
4
  desc 'UsersProfile methods.'
5
5
  command 'users_profile' do |g|
6
- g.desc "Retrieves a user's profile information."
7
- g.long_desc %( Retrieves a user's profile information. )
6
+ g.desc "Retrieve a user's profile information, including their custom status."
7
+ g.long_desc %( Retrieve a user's profile information, including their custom status. )
8
8
  g.command 'get' do |c|
9
- c.flag 'include_labels', desc: 'Include labels for each ID in custom profile fields.'
9
+ c.flag 'include_labels', desc: 'Include labels for each ID in custom profile fields. Using this parameter will heavily rate-limit your requests and is not recommended.'
10
10
  c.flag 'user', desc: 'User to retrieve profile info for.'
11
11
  c.action do |_global_options, options, _args|
12
12
  puts JSON.dump($client.users_profile_get(options))
13
13
  end
14
14
  end
15
15
 
16
- g.desc 'Set the profile information for a user.'
17
- g.long_desc %( Set the profile information for a user. )
16
+ g.desc "Set a user's profile information, including custom status."
17
+ g.long_desc %( Set a user's profile information, including custom status. )
18
18
  g.command 'set' do |c|
19
19
  c.flag 'name', desc: 'Name of a single key to set. Usable only if profile is not passed.'
20
20
  c.flag 'profile', desc: 'Collection of key:value pairs presented as a URL-encoded JSON hash. At most 50 fields may be set. Each field name is limited to 255 characters.'
@@ -37,10 +37,10 @@ command 'views' do |g|
37
37
  g.desc 'Update an existing view.'
38
38
  g.long_desc %( Update an existing view. )
39
39
  g.command 'update' do |c|
40
- c.flag 'view', desc: 'A view payload This must be a JSON-encoded string.'
40
+ c.flag 'view', desc: 'A view object. This must be a JSON-encoded string.'
41
41
  c.flag 'external_id', desc: 'A unique identifier of the view set by the developer. Must be unique for all views on a team. Max length of 255 characters. Either view_id or external_id is required.'
42
- c.flag 'hash', desc: 'A string that represents view state to protect against possible race conditions.'
43
42
  c.flag 'view_id', desc: 'A unique identifier of the view to be updated. Either view_id or external_id is required.'
43
+ c.flag 'hash', desc: 'A string that represents view state to protect against possible race conditions.'
44
44
  c.action do |_global_options, options, _args|
45
45
  puts JSON.dump($client.views_update(options))
46
46
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ desc 'Workflows methods.'
5
+ command 'workflows' do |g|
6
+ g.desc "Indicate that an app's step in a workflow completed execution."
7
+ g.long_desc %( Indicate that an app's step in a workflow completed execution. )
8
+ g.command 'stepCompleted' do |c|
9
+ c.flag 'workflow_step_execute_id', desc: 'Context identifier that maps to the correct workflow step execution.'
10
+ c.flag 'outputs', desc: 'Key-value object of outputs from your step. Keys of this object reflect the configured key properties of your outputs array from your workflow_step object.'
11
+ c.action do |_global_options, options, _args|
12
+ puts JSON.dump($client.workflows_stepCompleted(options))
13
+ end
14
+ end
15
+
16
+ g.desc "Indicate that an app's step in a workflow failed to execute."
17
+ g.long_desc %( Indicate that an app's step in a workflow failed to execute. )
18
+ g.command 'stepFailed' do |c|
19
+ c.flag 'error', desc: 'A JSON-based object with a message property that should contain a human readable error message.'
20
+ c.flag 'workflow_step_execute_id', desc: 'Context identifier that maps to the correct workflow step execution.'
21
+ c.action do |_global_options, options, _args|
22
+ puts JSON.dump($client.workflows_stepFailed(options))
23
+ end
24
+ end
25
+
26
+ g.desc 'Update the configuration for a workflow step.'
27
+ g.long_desc %( Update the configuration for a workflow step. )
28
+ g.command 'updateStep' do |c|
29
+ c.flag 'workflow_step_edit_id', desc: 'A context identifier provided with view_submission payloads used to call back to workflows.updateStep.'
30
+ c.flag 'inputs', desc: 'A JSON key-value map of inputs required from a user during configuration. This is the data your app expects to receive when the workflow step starts. Please note: the embedded variable format is set and replaced by the workflow system. You cannot create custom variables that will be replaced at runtime. Read more about variables in workflow steps here.'
31
+ c.flag 'outputs', desc: 'An JSON array of output objects used during step execution. This is the data your app agrees to provide when your workflow step was executed.'
32
+ c.flag 'step_image_url', desc: 'An optional field that can be used to override app image that is shown in the Workflow Builder.'
33
+ c.flag 'step_name', desc: 'An optional field that can be used to override the step name that is shown in the Workflow Builder.'
34
+ c.action do |_global_options, options, _args|
35
+ puts JSON.dump($client.workflows_updateStep(options))
36
+ end
37
+ end
38
+ end
data/bin/commands.rb CHANGED
@@ -1,11 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
  # This file was auto-generated by lib/tasks/web.rake
3
3
 
4
+ require 'commands/admin_analytics'
4
5
  require 'commands/admin_apps'
5
6
  require 'commands/admin_apps_approved'
6
7
  require 'commands/admin_apps_requests'
7
8
  require 'commands/admin_apps_restricted'
9
+ require 'commands/admin_auth_policy'
10
+ require 'commands/admin_barriers'
8
11
  require 'commands/admin_conversations'
12
+ require 'commands/admin_conversations_ekm'
13
+ require 'commands/admin_conversations_restrictAccess'
9
14
  require 'commands/admin_emoji'
10
15
  require 'commands/admin_inviteRequests'
11
16
  require 'commands/admin_inviteRequests_approved'
@@ -14,17 +19,19 @@ require 'commands/admin_teams'
14
19
  require 'commands/admin_teams_admins'
15
20
  require 'commands/admin_teams_owners'
16
21
  require 'commands/admin_teams_settings'
22
+ require 'commands/admin_usergroups'
17
23
  require 'commands/admin_users'
18
24
  require 'commands/admin_users_session'
19
25
  require 'commands/api'
20
26
  require 'commands/apps'
21
- require 'commands/apps_permissions'
22
- require 'commands/apps_permissions_resources'
23
- require 'commands/apps_permissions_scopes'
24
- require 'commands/apps_permissions_users'
27
+ require 'commands/apps_connections'
28
+ require 'commands/apps_event_authorizations'
29
+ require 'commands/apps_manifest'
25
30
  require 'commands/auth'
31
+ require 'commands/auth_teams'
26
32
  require 'commands/bots'
27
- require 'commands/channels'
33
+ require 'commands/calls'
34
+ require 'commands/calls_participants'
28
35
  require 'commands/chat'
29
36
  require 'commands/chat_scheduledMessages'
30
37
  require 'commands/conversations'
@@ -34,12 +41,10 @@ require 'commands/emoji'
34
41
  require 'commands/files'
35
42
  require 'commands/files_comments'
36
43
  require 'commands/files_remote'
37
- require 'commands/groups'
38
- require 'commands/im'
39
44
  require 'commands/migration'
40
- require 'commands/mpim'
41
45
  require 'commands/oauth'
42
46
  require 'commands/oauth_v2'
47
+ require 'commands/openid_connect'
43
48
  require 'commands/pins'
44
49
  require 'commands/reactions'
45
50
  require 'commands/reminders'
@@ -47,7 +52,10 @@ require 'commands/rtm'
47
52
  require 'commands/search'
48
53
  require 'commands/stars'
49
54
  require 'commands/team'
55
+ require 'commands/team_billing'
56
+ require 'commands/team_preferences'
50
57
  require 'commands/team_profile'
58
+ require 'commands/tooling_tokens'
51
59
  require 'commands/usergroups'
52
60
  require 'commands/usergroups_users'
53
61
  require 'commands/users'
@@ -55,3 +63,4 @@ require 'commands/users_admin'
55
63
  require 'commands/users_prefs'
56
64
  require 'commands/users_profile'
57
65
  require 'commands/views'
66
+ require 'commands/workflows'
data/lib/slack/config.rb CHANGED
@@ -3,8 +3,7 @@ module Slack
3
3
  module Config
4
4
  extend self
5
5
 
6
- attr_accessor :token
7
- attr_accessor :logger
6
+ attr_accessor :token, :logger
8
7
 
9
8
  def reset
10
9
  self.token = nil
@@ -3,7 +3,9 @@ module Slack
3
3
  module Events
4
4
  class Request
5
5
  class MissingSigningSecret < StandardError; end
6
+
6
7
  class TimestampExpired < StandardError; end
8
+
7
9
  class InvalidSignature < StandardError; end
8
10
 
9
11
  attr_reader :http_request,
@@ -19,13 +21,13 @@ module Slack
19
21
 
20
22
  # Request timestamp.
21
23
  def timestamp
22
- @timestamp ||= http_request.headers['X-Slack-Request-Timestamp']
24
+ @timestamp ||= http_request.get_header('HTTP_X_SLACK_REQUEST_TIMESTAMP')
23
25
  end
24
26
 
25
27
  # The signature is created by combining the signing secret with the body of the request
26
28
  # Slack is sending using a standard HMAC-SHA256 keyed hash.
27
29
  def signature
28
- @signature ||= http_request.headers['X-Slack-Signature']
30
+ @signature ||= http_request.get_header('HTTP_X_SLACK_SIGNATURE')
29
31
  end
30
32
 
31
33
  # Signature version.
@@ -35,7 +37,11 @@ module Slack
35
37
 
36
38
  # Request body.
37
39
  def body
38
- @body ||= http_request.body.read
40
+ @body ||= begin
41
+ body = http_request.body.read
42
+ http_request.body.rewind
43
+ body
44
+ end
39
45
  end
40
46
 
41
47
  # Returns true if the signature coming from Slack has expired.
@@ -47,7 +53,7 @@ module Slack
47
53
  def valid?
48
54
  raise MissingSigningSecret unless signing_secret
49
55
 
50
- digest = OpenSSL::Digest::SHA256.new
56
+ digest = OpenSSL::Digest.new('SHA256')
51
57
  signature_basestring = [version, timestamp, body].join(':')
52
58
  hex_hash = OpenSSL::HMAC.hexdigest(digest, signing_secret, signature_basestring)
53
59
  computed_signature = [version, hex_hash].join('=')
@@ -2,10 +2,6 @@
2
2
  module Slack
3
3
  module Messages
4
4
  class Message < Hashie::Mash
5
- def presence
6
- super['presence']
7
- end
8
-
9
5
  def to_s
10
6
  keys.sort_by(&:to_s).map do |key|
11
7
  "#{key}=#{self[key]}"
@@ -3,6 +3,7 @@ module Slack
3
3
  module RealTime
4
4
  class Client
5
5
  class ClientNotStartedError < StandardError; end
6
+
6
7
  class ClientAlreadyStartedError < StandardError; end
7
8
 
8
9
  include Api::MessageId
@@ -16,11 +17,7 @@ module Slack
16
17
  attr_accessor :events
17
18
  end
18
19
 
19
- attr_accessor :web_client
20
- attr_accessor :store
21
- attr_accessor :url
22
- attr_accessor(*Config::ATTRIBUTES)
23
- attr_accessor :logger
20
+ attr_accessor :web_client, :store, :url, *Config::ATTRIBUTES
24
21
 
25
22
  protected :store_class, :store_class=
26
23
 
@@ -134,7 +131,7 @@ module Slack
134
131
  rescue Slack::Web::Api::Errors::SlackError => e
135
132
  # stop pinging if bot was uninstalled
136
133
  case e.message
137
- when 'account_inactive', 'invalid_auth' then
134
+ when 'account_inactive', 'invalid_auth'
138
135
  logger.warn(to_s) { e.message }
139
136
  raise e
140
137
  end
@@ -202,6 +199,7 @@ module Slack
202
199
  end
203
200
 
204
201
  attr_reader :callbacks
202
+
205
203
  def socket_class
206
204
  concurrency::Socket
207
205
  end
@@ -251,6 +249,8 @@ module Slack
251
249
  end
252
250
 
253
251
  def run_handlers(type, data)
252
+ return unless store.class.events
253
+
254
254
  handlers = store.class.events[type.to_s]
255
255
  handlers&.each do |handler|
256
256
  store.instance_exec(data, &handler)
@@ -45,14 +45,12 @@ module Slack
45
45
  @client_task&.stop
46
46
 
47
47
  @client_task = task.async do |subtask|
48
- begin
49
- subtask.annotate "#{client} run-loop"
50
- client.run_loop
51
- rescue ::Async::Wrapper::Cancelled => e
52
- # Will get restarted by ping worker.
53
- rescue StandardError => e
54
- client.logger.error(subtask.to_s) { e.message }
55
- end
48
+ subtask.annotate "#{client} run-loop"
49
+ client.run_loop
50
+ rescue ::Async::Wrapper::Cancelled => e
51
+ # Will get restarted by ping worker.
52
+ rescue StandardError => e
53
+ client.logger.error(subtask.to_s) { e.message }
56
54
  end
57
55
 
58
56
  @restart.wait
@@ -114,9 +112,7 @@ module Slack
114
112
 
115
113
  def build_endpoint
116
114
  endpoint = ::Async::IO::Endpoint.tcp(addr, port)
117
- if secure?
118
- endpoint = ::Async::IO::SSLEndpoint.new(endpoint, ssl_context: build_ssl_context)
119
- end
115
+ endpoint = ::Async::IO::SSLEndpoint.new(endpoint, ssl_context: build_ssl_context) if secure?
120
116
  endpoint
121
117
  end
122
118
 
@@ -3,8 +3,6 @@ module Slack
3
3
  module RealTime
4
4
  module Concurrency
5
5
  autoload :Async, 'slack/real_time/concurrency/async'
6
- autoload :Eventmachine, 'slack/real_time/concurrency/eventmachine'
7
- autoload :Celluloid, 'slack/real_time/concurrency/celluloid'
8
6
  end
9
7
  end
10
8
  end
@@ -17,7 +17,8 @@ module Slack
17
17
  logger
18
18
  ].freeze
19
19
 
20
- attr_accessor(*Config::ATTRIBUTES)
20
+ attr_accessor(*Config::ATTRIBUTES - [:concurrency])
21
+ attr_writer :concurrency
21
22
 
22
23
  def reset
23
24
  self.websocket_ping = 30
@@ -37,19 +38,9 @@ module Slack
37
38
  private
38
39
 
39
40
  def detect_concurrency
40
- %i[Async Eventmachine Celluloid].each do |concurrency|
41
- begin
42
- return Slack::RealTime::Concurrency.const_get(concurrency)
43
- rescue LoadError, NameError
44
- false # could not be loaded, missing dependencies
45
- end
46
- end
47
-
48
- raise(
49
- NoConcurrencyError,
50
- 'Missing concurrency. Add async-websocket, faye-websocket ' \
51
- 'or celluloid-io to your Gemfile.'
52
- )
41
+ Slack::RealTime::Concurrency.const_get(:Async)
42
+ rescue LoadError, NameError
43
+ raise NoConcurrencyError, 'Missing concurrency. Add async-websocket to your Gemfile.'
53
44
  end
54
45
  end
55
46
 
@@ -3,10 +3,6 @@ module Slack
3
3
  module RealTime
4
4
  module Models
5
5
  class Base < Hashie::Mash
6
- def presence
7
- super['presence']
8
- end
9
-
10
6
  # see https://github.com/intridea/hashie/issues/394
11
7
  def log_built_in_message(*); end
12
8
  end