slack-ruby-client 0.13.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +1 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +29 -5
- data/.rubocop_todo.yml +124 -44
- data/.travis.yml +5 -8
- data/CHANGELOG.md +92 -2
- data/CONTRIBUTING.md +19 -8
- data/Dangerfile +2 -0
- data/Gemfile +10 -5
- data/LICENSE.md +1 -1
- data/README.md +186 -49
- data/RELEASING.md +1 -1
- data/Rakefile +2 -1
- data/UPGRADING.md +72 -2
- data/bin/commands/admin_analytics.rb +16 -0
- data/bin/commands/admin_apps.rb +51 -0
- data/bin/commands/admin_apps_approved.rb +17 -0
- data/bin/commands/admin_apps_requests.rb +17 -0
- data/bin/commands/admin_apps_restricted.rb +17 -0
- data/bin/commands/admin_auth_policy.rb +39 -0
- data/bin/commands/admin_barriers.rb +47 -0
- data/bin/commands/admin_conversations.rb +169 -0
- data/bin/commands/admin_conversations_ekm.rb +17 -0
- data/bin/commands/admin_conversations_restrictAccess.rb +37 -0
- data/bin/commands/admin_conversations_whitelist.rb +37 -0
- data/bin/commands/admin_emoji.rb +54 -0
- data/bin/commands/admin_inviteRequests.rb +36 -0
- data/bin/commands/admin_inviteRequests_approved.rb +16 -0
- data/bin/commands/admin_inviteRequests_denied.rb +16 -0
- data/bin/commands/admin_teams.rb +27 -0
- data/bin/commands/admin_teams_admins.rb +16 -0
- data/bin/commands/admin_teams_owners.rb +16 -0
- data/bin/commands/admin_teams_settings.rb +64 -0
- data/bin/commands/admin_usergroups.rb +48 -0
- data/bin/commands/admin_users.rb +98 -0
- data/bin/commands/admin_users_session.rb +78 -0
- data/bin/commands/api.rb +1 -1
- data/bin/commands/apps.rb +15 -0
- data/bin/commands/apps_connections.rb +13 -0
- data/bin/commands/apps_event_authorizations.rb +16 -0
- data/bin/commands/apps_manifest.rb +51 -0
- data/bin/commands/apps_permissions.rb +1 -0
- data/bin/commands/apps_permissions_resources.rb +1 -0
- data/bin/commands/apps_permissions_scopes.rb +1 -0
- data/bin/commands/apps_permissions_users.rb +1 -0
- data/bin/commands/auth.rb +1 -0
- data/bin/commands/auth_teams.rb +16 -0
- data/bin/commands/bots.rb +2 -0
- data/bin/commands/calls.rb +52 -0
- data/bin/commands/calls_participants.rb +25 -0
- data/bin/commands/channels.rb +1 -153
- data/bin/commands/chat.rb +56 -12
- data/bin/commands/chat_scheduledMessages.rb +19 -0
- data/bin/commands/conversations.rb +75 -5
- data/bin/commands/dialog.rb +1 -0
- data/bin/commands/dnd.rb +6 -3
- data/bin/commands/emoji.rb +1 -0
- data/bin/commands/files.rb +10 -18
- data/bin/commands/files_comments.rb +1 -21
- data/bin/commands/files_remote.rb +78 -0
- data/bin/commands/groups.rb +1 -161
- data/bin/commands/im.rb +1 -62
- data/bin/commands/migration.rb +2 -0
- data/bin/commands/mpim.rb +1 -60
- data/bin/commands/oauth.rb +2 -14
- data/bin/commands/oauth_v2.rb +29 -0
- data/bin/commands/openid_connect.rb +27 -0
- data/bin/commands/pins.rb +3 -6
- data/bin/commands/reactions.rb +3 -3
- data/bin/commands/reminders.rb +7 -0
- data/bin/commands/rtm.rb +3 -2
- data/bin/commands/search.rb +6 -1
- data/bin/commands/stars.rb +8 -6
- data/bin/commands/team.rb +5 -0
- data/bin/commands/team_billing.rb +13 -0
- data/bin/commands/team_preferences.rb +13 -0
- data/bin/commands/team_profile.rb +1 -0
- data/bin/commands/tooling_tokens.rb +14 -0
- data/bin/commands/usergroups.rb +7 -1
- data/bin/commands/usergroups_users.rb +3 -0
- data/bin/commands/users.rb +6 -4
- data/bin/commands/users_admin.rb +1 -0
- data/bin/commands/users_prefs.rb +1 -0
- data/bin/commands/users_profile.rb +6 -5
- data/bin/commands/views.rb +48 -0
- data/bin/commands/workflows.rb +38 -0
- data/bin/commands.rb +38 -8
- data/bin/slack +2 -3
- data/examples/hi_real_time_and_web/Gemfile +1 -0
- data/examples/hi_real_time_and_web/hi.rb +7 -3
- data/examples/hi_real_time_async_async/Gemfile +1 -0
- data/examples/hi_real_time_async_async/hi.rb +6 -2
- data/examples/hi_web/Gemfile +1 -0
- data/examples/hi_web/hi.rb +1 -0
- data/examples/new_ticket/Gemfile +1 -0
- data/examples/new_ticket/new_ticket.rb +1 -0
- data/lib/slack/config.rb +2 -2
- data/lib/slack/events/config.rb +32 -0
- data/lib/slack/events/request.rb +72 -0
- data/lib/slack/logger.rb +6 -5
- data/lib/slack/messages/formatting.rb +1 -0
- data/lib/slack/messages/message.rb +1 -4
- data/lib/slack/real_time/api/message.rb +3 -1
- data/lib/slack/real_time/api/message_id.rb +1 -0
- data/lib/slack/real_time/api/ping.rb +5 -2
- data/lib/slack/real_time/api/typing.rb +3 -1
- data/lib/slack/real_time/client.rb +101 -32
- data/lib/slack/real_time/concurrency/async.rb +77 -6
- data/lib/slack/real_time/concurrency.rb +1 -2
- data/lib/slack/real_time/config.rb +6 -10
- data/lib/slack/real_time/models/base.rb +1 -4
- data/lib/slack/real_time/models/bot.rb +1 -0
- data/lib/slack/real_time/models/channel.rb +1 -0
- data/lib/slack/real_time/models/group.rb +1 -0
- data/lib/slack/real_time/models/im.rb +1 -0
- data/lib/slack/real_time/models/team.rb +1 -0
- data/lib/slack/real_time/models/user.rb +1 -0
- data/lib/slack/real_time/models.rb +1 -0
- data/lib/slack/real_time/socket.rb +45 -17
- data/lib/slack/real_time/stores/base.rb +5 -7
- data/lib/slack/real_time/stores/starter.rb +17 -3
- data/lib/slack/real_time/stores/store.rb +33 -25
- data/lib/slack/real_time/stores.rb +1 -0
- data/lib/slack/version.rb +2 -1
- data/lib/slack/web/api/endpoints/admin_analytics.rb +28 -0
- data/lib/slack/web/api/endpoints/admin_apps.rb +78 -0
- data/lib/slack/web/api/endpoints/admin_apps_approved.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_apps_requests.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_auth_policy.rb +72 -0
- data/lib/slack/web/api/endpoints/admin_barriers.rb +82 -0
- data/lib/slack/web/api/endpoints/admin_conversations.rb +260 -0
- data/lib/slack/web/api/endpoints/admin_conversations_ekm.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +61 -0
- data/lib/slack/web/api/endpoints/admin_conversations_whitelist.rb +64 -0
- data/lib/slack/web/api/endpoints/admin_emoji.rb +88 -0
- data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +61 -0
- data/lib/slack/web/api/endpoints/admin_inviteRequests_approved.rb +33 -0
- data/lib/slack/web/api/endpoints/admin_inviteRequests_denied.rb +33 -0
- data/lib/slack/web/api/endpoints/admin_teams.rb +50 -0
- data/lib/slack/web/api/endpoints/admin_teams_admins.rb +34 -0
- data/lib/slack/web/api/endpoints/admin_teams_owners.rb +34 -0
- data/lib/slack/web/api/endpoints/admin_teams_settings.rb +99 -0
- data/lib/slack/web/api/endpoints/admin_usergroups.rb +77 -0
- data/lib/slack/web/api/endpoints/admin_users.rb +163 -0
- data/lib/slack/web/api/endpoints/admin_users_session.rb +122 -0
- data/lib/slack/web/api/endpoints/api.rb +2 -3
- data/lib/slack/web/api/endpoints/apps.rb +27 -0
- data/lib/slack/web/api/endpoints/apps_connections.rb +21 -0
- data/lib/slack/web/api/endpoints/apps_event_authorizations.rb +34 -0
- data/lib/slack/web/api/endpoints/apps_manifest.rb +75 -0
- data/lib/slack/web/api/endpoints/apps_permissions.rb +1 -0
- data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +1 -0
- data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +1 -0
- data/lib/slack/web/api/endpoints/apps_permissions_users.rb +1 -0
- data/lib/slack/web/api/endpoints/auth.rb +2 -1
- data/lib/slack/web/api/endpoints/auth_teams.rb +33 -0
- data/lib/slack/web/api/endpoints/bots.rb +4 -1
- data/lib/slack/web/api/endpoints/calls.rb +83 -0
- data/lib/slack/web/api/endpoints/calls_participants.rb +42 -0
- data/lib/slack/web/api/endpoints/channels.rb +2 -243
- data/lib/slack/web/api/endpoints/chat.rb +144 -47
- data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +40 -0
- data/lib/slack/web/api/endpoints/conversations.rb +152 -41
- data/lib/slack/web/api/endpoints/dialog.rb +3 -2
- data/lib/slack/web/api/endpoints/dnd.rb +9 -4
- data/lib/slack/web/api/endpoints/emoji.rb +1 -0
- data/lib/slack/web/api/endpoints/files.rb +24 -29
- data/lib/slack/web/api/endpoints/files_comments.rb +2 -34
- data/lib/slack/web/api/endpoints/files_remote.rb +127 -0
- data/lib/slack/web/api/endpoints/groups.rb +1 -253
- data/lib/slack/web/api/endpoints/im.rb +1 -101
- data/lib/slack/web/api/endpoints/migration.rb +5 -2
- data/lib/slack/web/api/endpoints/mpim.rb +1 -96
- data/lib/slack/web/api/endpoints/oauth.rb +7 -31
- data/lib/slack/web/api/endpoints/oauth_v2.rb +48 -0
- data/lib/slack/web/api/endpoints/openid_connect.rb +42 -0
- data/lib/slack/web/api/endpoints/pins.rb +8 -15
- data/lib/slack/web/api/endpoints/reactions.rb +20 -19
- data/lib/slack/web/api/endpoints/reminders.rb +18 -5
- data/lib/slack/web/api/endpoints/rtm.rb +11 -10
- data/lib/slack/web/api/endpoints/search.rb +28 -13
- data/lib/slack/web/api/endpoints/stars.rb +14 -11
- data/lib/slack/web/api/endpoints/team.rb +13 -4
- data/lib/slack/web/api/endpoints/team_billing.rb +21 -0
- data/lib/slack/web/api/endpoints/team_preferences.rb +21 -0
- data/lib/slack/web/api/endpoints/team_profile.rb +2 -1
- data/lib/slack/web/api/endpoints/tooling_tokens.rb +24 -0
- data/lib/slack/web/api/endpoints/usergroups.rb +27 -16
- data/lib/slack/web/api/endpoints/usergroups_users.rb +10 -5
- data/lib/slack/web/api/endpoints/users.rb +21 -20
- data/lib/slack/web/api/endpoints/users_admin.rb +1 -0
- data/lib/slack/web/api/endpoints/users_prefs.rb +1 -0
- data/lib/slack/web/api/endpoints/users_profile.rb +8 -7
- data/lib/slack/web/api/endpoints/views.rb +97 -0
- data/lib/slack/web/api/endpoints/workflows.rb +61 -0
- data/lib/slack/web/api/endpoints.rb +76 -18
- data/lib/slack/web/api/error.rb +1 -0
- data/lib/slack/web/api/errors/server_error.rb +37 -0
- data/lib/slack/web/api/errors/slack_error.rb +14 -1
- data/lib/slack/web/api/errors/too_many_requests_error.rb +2 -4
- data/lib/slack/web/api/errors.rb +1040 -0
- data/lib/slack/web/api/mixins/{channels.id.rb → conversations.id.rb} +4 -5
- data/lib/slack/web/api/mixins/ids.id.rb +3 -2
- data/lib/slack/web/api/mixins/users.id.rb +2 -3
- data/lib/slack/web/api/mixins/users.search.rb +1 -0
- data/lib/slack/web/api/mixins.rb +2 -2
- data/lib/slack/web/api/patches/chat.1.patch +70 -0
- data/lib/slack/web/api/patches/views.1.view-json.patch +40 -0
- data/lib/slack/web/api/patches/views.1.views-published.patch +16 -0
- data/lib/slack/web/api/templates/command.erb +1 -0
- data/lib/slack/web/api/templates/commands.erb +1 -0
- data/lib/slack/web/api/templates/endpoints.erb +2 -2
- data/lib/slack/web/api/templates/errors.erb +20 -0
- data/lib/slack/web/api/templates/method.erb +5 -1
- data/lib/slack/web/api/templates/method_spec.erb +2 -1
- data/lib/slack/web/client.rb +2 -1
- data/lib/slack/web/config.rb +3 -0
- data/lib/slack/web/faraday/connection.rb +24 -20
- data/lib/slack/web/faraday/request.rb +3 -1
- data/lib/slack/web/faraday/response/raise_error.rb +21 -6
- data/lib/slack/web/faraday/response/wrap_error.rb +24 -0
- data/lib/slack/web/pagination/cursor.rb +7 -7
- data/lib/slack-ruby-client.rb +10 -4
- data/lib/slack.rb +1 -0
- data/lib/slack_ruby_client.rb +1 -0
- data/lib/tasks/git.rake +1 -0
- data/lib/tasks/real_time.rake +15 -5
- data/lib/tasks/update.rake +1 -0
- data/lib/tasks/web.rake +39 -10
- data/screenshots/create-app.png +0 -0
- data/slack-ruby-client.gemspec +9 -6
- data/spec/fixtures/slack/web/429_error.yml +50 -54
- data/spec/fixtures/slack/web/auth_test_error.yml +51 -18
- data/spec/fixtures/slack/web/auth_test_success.yml +50 -26
- data/spec/fixtures/slack/web/conversations_info.yml +167 -0
- data/spec/fixtures/slack/web/conversations_setTopic.yml +84 -0
- data/spec/fixtures/slack/web/conversations_setTopic_one_page.yml +172 -0
- data/spec/fixtures/slack/web/conversations_setTopic_paginated.yml +253 -0
- data/spec/fixtures/slack/web/paginated_users_list.yml +501 -69
- data/spec/fixtures/slack/web/rtm_connect.yml +267 -30
- data/spec/fixtures/slack/web/rtm_start.yml +771 -60
- data/spec/fixtures/slack/web/users_info.yml +153 -69
- data/spec/fixtures/slack/web/users_list.yml +102 -41
- data/spec/fixtures/slack/web/views_open_error.yml +83 -0
- data/spec/integration/integration_spec.rb +115 -47
- data/spec/slack/config_spec.rb +2 -0
- data/spec/slack/events/config_spec.rb +33 -0
- data/spec/slack/events/request_spec.rb +184 -0
- data/spec/slack/messages/formatting_spec.rb +25 -13
- data/spec/slack/real_time/api/message_spec.rb +6 -1
- data/spec/slack/real_time/api/ping_spec.rb +2 -0
- data/spec/slack/real_time/api/typing_spec.rb +5 -1
- data/spec/slack/real_time/client_spec.rb +244 -50
- data/spec/slack/real_time/concurrency/it_behaves_like_a_realtime_socket.rb +2 -0
- data/spec/slack/real_time/concurrency/with_concurrency_spec.rb +10 -0
- data/spec/slack/real_time/concurrency/without_concurrency_spec.rb +10 -0
- data/spec/slack/real_time/event_handlers/bot_spec.rb +3 -2
- data/spec/slack/real_time/event_handlers/channel_spec.rb +10 -7
- data/spec/slack/real_time/event_handlers/event_handlers_spec.rb +2 -1
- data/spec/slack/real_time/event_handlers/group_spec.rb +5 -4
- data/spec/slack/real_time/event_handlers/im_spec.rb +9 -8
- data/spec/slack/real_time/event_handlers/team_spec.rb +3 -1
- data/spec/slack/real_time/event_handlers/user_spec.rb +3 -2
- data/spec/slack/real_time/rtm_connect_spec.rb +2 -1
- data/spec/slack/real_time/rtm_start_spec.rb +2 -1
- data/spec/slack/real_time/store_spec.rb +2 -1
- data/spec/slack/slack_spec.rb +40 -6
- data/spec/slack/version_spec.rb +2 -1
- data/spec/slack/web/api/endpoints/admin_analytics_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/admin_apps_approved_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_apps_requests_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_apps_restricted_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_apps_spec.rb +18 -0
- data/spec/slack/web/api/endpoints/admin_auth_policy_spec.rb +35 -0
- data/spec/slack/web/api/endpoints/admin_barriers_spec.rb +38 -0
- data/spec/slack/web/api/endpoints/admin_conversations_ekm_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_conversations_restrictAccess_spec.rb +32 -0
- data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +98 -0
- data/spec/slack/web/api/endpoints/admin_emoji_spec.rb +37 -0
- data/spec/slack/web/api/endpoints/admin_inviteRequests_approved_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_inviteRequests_denied_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_inviteRequests_spec.rb +18 -0
- data/spec/slack/web/api/endpoints/admin_teams_admins_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/admin_teams_owners_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/admin_teams_settings_spec.rb +53 -0
- data/spec/slack/web/api/endpoints/admin_teams_spec.rb +16 -0
- data/spec/slack/web/api/endpoints/admin_usergroups_spec.rb +37 -0
- data/spec/slack/web/api/endpoints/admin_users_session_spec.rb +41 -0
- data/spec/slack/web/api/endpoints/admin_users_spec.rb +67 -0
- data/spec/slack/web/api/endpoints/api_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/apps_connections_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/apps_event_authorizations_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/apps_manifest_spec.rb +36 -0
- data/spec/slack/web/api/endpoints/apps_spec.rb +16 -0
- data/spec/slack/web/api/endpoints/{apps_permissions_scopes_spec.rb → auth_teams_spec.rb} +2 -1
- data/spec/slack/web/api/endpoints/bots_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/calls_participants_spec.rb +24 -0
- data/spec/slack/web/api/endpoints/calls_spec.rb +31 -0
- data/spec/slack/web/api/endpoints/chat_scheduledMessages_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +9 -7
- data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +112 -36
- data/spec/slack/web/api/endpoints/custom_specs/conversations_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +12 -4
- data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +8 -3
- data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +95 -0
- data/spec/slack/web/api/endpoints/dnd_spec.rb +4 -3
- data/spec/slack/web/api/endpoints/emoji_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/files_comments_spec.rb +3 -21
- data/spec/slack/web/api/endpoints/files_remote_spec.rb +24 -0
- data/spec/slack/web/api/endpoints/files_spec.rb +5 -4
- data/spec/slack/web/api/endpoints/migration_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/oauth_spec.rb +1 -22
- data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +16 -0
- data/spec/slack/web/api/endpoints/openid_connect_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/pins_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/reactions_spec.rb +8 -1
- data/spec/slack/web/api/endpoints/reminders_spec.rb +3 -2
- data/spec/slack/web/api/endpoints/rtm_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/search_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/stars_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/{apps_permissions_resources_spec.rb → team_billing_spec.rb} +2 -1
- data/spec/slack/web/api/endpoints/team_preferences_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/team_profile_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/team_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/tooling_tokens_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/usergroups_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/usergroups_users_spec.rb +3 -2
- data/spec/slack/web/api/endpoints/users_admin_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/users_prefs_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/users_profile_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/workflows_spec.rb +26 -0
- data/spec/slack/web/api/error_spec.rb +7 -7
- data/spec/slack/web/api/errors/slack_error_spec.rb +26 -7
- data/spec/slack/web/api/mixins/conversations_list_spec.rb +21 -0
- data/spec/slack/web/api/mixins/conversations_spec.rb +43 -0
- data/spec/slack/web/api/mixins/users_spec.rb +17 -8
- data/spec/slack/web/api/pagination/cursor_spec.rb +41 -13
- data/spec/slack/web/client_spec.rb +168 -19
- data/spec/slack/web/faraday/request_spec.rb +80 -0
- data/spec/slack/web/faraday/response/raise_error_spec.rb +48 -12
- data/spec/spec_helper.rb +9 -2
- data/spec/support/queue_with_timeout.rb +5 -4
- data/spec/support/real_time/concurrency/mock.rb +1 -0
- data/spec/support/real_time/connected_client.rb +6 -6
- data/spec/support/real_time/event.rb +1 -0
- data/spec/support/token.rb +1 -0
- data/spec/support/vcr.rb +37 -1
- metadata +205 -147
- data/examples/hi_real_time/Gemfile +0 -5
- data/examples/hi_real_time/hi.gif +0 -0
- data/examples/hi_real_time/hi.rb +0 -37
- data/examples/hi_real_time_async_celluloid/Gemfile +0 -6
- data/examples/hi_real_time_async_celluloid/Procfile +0 -2
- data/examples/hi_real_time_async_celluloid/hi.rb +0 -35
- data/examples/hi_real_time_async_eventmachine/Gemfile +0 -6
- data/examples/hi_real_time_async_eventmachine/Procfile +0 -2
- data/examples/hi_real_time_async_eventmachine/hi.rb +0 -35
- data/lib/slack/real_time/concurrency/celluloid.rb +0 -118
- data/lib/slack/real_time/concurrency/eventmachine.rb +0 -66
- data/lib/slack/web/api/mixins/channels.id.json +0 -20
- data/lib/slack/web/api/mixins/groups.id.json +0 -20
- data/lib/slack/web/api/mixins/groups.id.rb +0 -26
- data/lib/slack/web/api/patches/chat.1.text-attachments-required.patch +0 -13
- data/lib/slack/web/api/patches/chat.2.attachments-json.patch +0 -17
- data/lib/slack/web/api/patches/chat.3.update-attachments-support.patch +0 -21
- data/lib/slack/web/api/patches/chat.4.postEphemeral-attachments-support.patch +0 -17
- data/lib/slack/web/api/patches/chat.5.postEphemeral-text-or-attachments.patch +0 -13
- data/screenshots/register-bot.png +0 -0
- data/spec/fixtures/slack/web/503_error.yml +0 -14
- data/spec/fixtures/slack/web/channels_info.yml +0 -46
- data/spec/fixtures/slack/web/groups_info.yml +0 -43
- data/spec/slack/real_time/concurrency/celluloid_spec.rb +0 -106
- data/spec/slack/real_time/concurrency/eventmachine_spec.rb +0 -47
- data/spec/slack/web/api/endpoints/apps_permissions_spec.rb +0 -15
- data/spec/slack/web/api/endpoints/apps_permissions_users_spec.rb +0 -18
- data/spec/slack/web/api/endpoints/conversations_spec.rb +0 -100
- data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +0 -11
- data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +0 -11
- data/spec/slack/web/api/endpoints/im_spec.rb +0 -38
- data/spec/slack/web/api/endpoints/mpim_spec.rb +0 -38
- data/spec/slack/web/api/errors/service_unavailable_spec.rb +0 -14
- data/spec/slack/web/api/mixins/channels_spec.rb +0 -33
- data/spec/slack/web/api/mixins/groups_spec.rb +0 -33
data/README.md
CHANGED
@@ -2,23 +2,75 @@ Slack Ruby Client
|
|
2
2
|
=================
|
3
3
|
|
4
4
|
[![Gem Version](https://badge.fury.io/rb/slack-ruby-client.svg)](http://badge.fury.io/rb/slack-ruby-client)
|
5
|
-
[![Build Status](https://travis-ci.
|
5
|
+
[![Build Status](https://app.travis-ci.com/slack-ruby/slack-ruby-client.svg?branch=master)](https://app.travis-ci.com/slack-ruby/slack-ruby-client)
|
6
6
|
[![Code Climate](https://codeclimate.com/github/slack-ruby/slack-ruby-client/badges/gpa.svg)](https://codeclimate.com/github/slack-ruby/slack-ruby-client)
|
7
7
|
|
8
|
-
A Ruby client for the Slack [Web](https://api.slack.com/web)
|
8
|
+
A Ruby client for the Slack [Web](https://api.slack.com/web), [RealTime Messaging](https://api.slack.com/rtm) and [Events](https://api.slack.com/events-api) APIs. Comes with a handy command-line client, too. If you are not familiar with these concepts, you might want to watch [this video](http://code.dblock.org/2016/03/11/your-first-slack-bot-service-video.html).
|
9
9
|
|
10
10
|
![](slack.png)
|
11
11
|
|
12
|
+
# Table of Contents
|
13
|
+
|
14
|
+
- [Useful to Me?](#useful-to-me)
|
15
|
+
- [Stable Release](#stable-release)
|
16
|
+
- [Installation](#installation)
|
17
|
+
- [Usage](#usage)
|
18
|
+
- [Create a New Bot Integration](#create-a-new-bot-integration)
|
19
|
+
- [OAuth Code Grant](#oauth-code-grant)
|
20
|
+
- [Using the Legacy API Token](#using-the-legacy-api-token)
|
21
|
+
- [Global Settings](#global-settings)
|
22
|
+
- [Web Client](#web-client)
|
23
|
+
- [Web Client Examples](#web-client-examples)
|
24
|
+
- [Test Auth](#test-auth)
|
25
|
+
- [Send Messages](#send-messages)
|
26
|
+
- [List Channels](#list-channels)
|
27
|
+
- [Upload a File](#upload-a-file)
|
28
|
+
- [Get Channel Info](#get-channel-info)
|
29
|
+
- [Get User Info](#get-user-info)
|
30
|
+
- [Search for a User](#search-for-a-user)
|
31
|
+
- [Other](#other)
|
32
|
+
- [Web Client Options](#web-client-options)
|
33
|
+
- [Pagination Support](#pagination-support)
|
34
|
+
- [Character Encoding](#character-encoding)
|
35
|
+
- [Error Handling](#error-handling)
|
36
|
+
- [Slack Errors](#slack-errors)
|
37
|
+
- [Rate Limiting](#rate-limiting)
|
38
|
+
- [Other Errors](#other-errors)
|
39
|
+
- [RealTime Client](#realtime-client)
|
40
|
+
- [Slack::RealTime::Stores::Store](#slackrealtimestoresstore)
|
41
|
+
- [Slack::RealTime::Stores::Starter](#slackrealtimestoresstarter)
|
42
|
+
- [Configuring Slack::RealTime::Client](#configuring-slackrealtimeclient)
|
43
|
+
- [Caveats](#caveats)
|
44
|
+
- [websocket_ping](#websocket_ping)
|
45
|
+
- [Connection Methods](#connection-methods)
|
46
|
+
- [Combining RealTime and Web Clients](#combining-realtime-and-web-clients)
|
47
|
+
- [Large Team Considerations](#large-team-considerations)
|
48
|
+
- [Concurrency](#concurrency)
|
49
|
+
- [Async](#async)
|
50
|
+
- [Events API](#events-api)
|
51
|
+
- [Configuring Slack::Events](#configuring-slackevents)
|
52
|
+
- [Verifying the Request Signature](#verifying-the-request-signature)
|
53
|
+
- [Message Parsing](#message-parsing)
|
54
|
+
- [Command-Line Client](#command-line-client)
|
55
|
+
- [Authenticate with Slack](#authenticate-with-slack)
|
56
|
+
- [Send a Message](#send-a-message)
|
57
|
+
- [Get Channel Id](#get-channel-id)
|
58
|
+
- [Get Channel Info](#get-channel-info-1)
|
59
|
+
- [List Users](#list-users)
|
60
|
+
- [History](#history)
|
61
|
+
- [Contributing](#contributing)
|
62
|
+
- [Copyright and License](#copyright-and-license)
|
63
|
+
|
12
64
|
## Useful to Me?
|
13
65
|
|
14
|
-
* This
|
15
|
-
*
|
16
|
-
*
|
17
|
-
*
|
66
|
+
* This library will let you send messages to Slack via the Web API, send and receive messages via the Real Time Messaging API and facilitate integration with the Events API.
|
67
|
+
* To respond to slash commands, interactive components or events, implement a web application using your favorite web framework and use this library to call the Slack Web API and to verify that events are coming from Slack.
|
68
|
+
* To build a bot using the Real Time Messaging API, use [slack-ruby-bot](https://github.com/slack-ruby/slack-ruby-bot), which uses this library.
|
69
|
+
* To roll out a complete service using the Real Time Messaging API with Slack button integration to multiple teams, check out [slack-ruby-bot-server](https://github.com/slack-ruby/slack-ruby-bot-server), which is built on top of slack-ruby-bot, which uses this library.
|
18
70
|
|
19
71
|
## Stable Release
|
20
72
|
|
21
|
-
You're reading the documentation for the **stable** release of slack-ruby-client, 0.
|
73
|
+
You're reading the documentation for the **stable** release of slack-ruby-client, v1.0. See [UPGRADING](UPGRADING.md) when upgrading from an older version.
|
22
74
|
|
23
75
|
## Installation
|
24
76
|
|
@@ -28,10 +80,10 @@ Add to Gemfile.
|
|
28
80
|
gem 'slack-ruby-client'
|
29
81
|
```
|
30
82
|
|
31
|
-
If you're going to be using the RealTime client, add
|
83
|
+
If you're going to be using the RealTime client, add `async-websocket`. See below for more information about concurrency.
|
32
84
|
|
33
85
|
```
|
34
|
-
gem 'async-websocket'
|
86
|
+
gem 'async-websocket', '~> 0.8.0'
|
35
87
|
```
|
36
88
|
|
37
89
|
Run `bundle install`.
|
@@ -40,11 +92,17 @@ Run `bundle install`.
|
|
40
92
|
|
41
93
|
### Create a New Bot Integration
|
42
94
|
|
43
|
-
|
95
|
+
To integrate your bot with Slack, you must first create a new [Slack App](https://api.slack.com/apps).
|
96
|
+
|
97
|
+
![](screenshots/create-app.png)
|
44
98
|
|
45
|
-
|
99
|
+
### OAuth Code Grant
|
46
100
|
|
47
|
-
|
101
|
+
Once created, go to the app's Basic Info tab and grab the Client ID and Client Secret. You'll need these in order complete an [OAuth code grant flow](https://api.slack.com/docs/oauth#flow) as described at [slack-ruby-bot-server](https://github.com/slack-ruby/slack-ruby-bot-server).
|
102
|
+
|
103
|
+
### Using the Legacy API Token
|
104
|
+
|
105
|
+
Although OAuth is recommended, you can still [generate a legacy API token](https://api.slack.com/custom-integrations/legacy-tokens) for your app and use it for some interactions.
|
48
106
|
|
49
107
|
```ruby
|
50
108
|
Slack.configure do |config|
|
@@ -67,14 +125,18 @@ logger | An optional logger, defaults to `::Logger.new(STDOUT)` at `Logger
|
|
67
125
|
|
68
126
|
The Slack Web API allows you to build applications that interact with Slack.
|
69
127
|
|
70
|
-
####
|
128
|
+
#### Web Client Examples
|
129
|
+
|
130
|
+
Here are some examples of how to use the web client with the Web API.
|
131
|
+
|
132
|
+
##### Test Auth
|
71
133
|
|
72
134
|
```ruby
|
73
135
|
client = Slack::Web::Client.new
|
74
136
|
client.auth_test
|
75
137
|
```
|
76
138
|
|
77
|
-
|
139
|
+
##### Send Messages
|
78
140
|
|
79
141
|
Send messages with [chat_PostMessage](https://api.slack.com/methods/chat.postMessage).
|
80
142
|
|
@@ -86,17 +148,17 @@ See a fully working example in [examples/hi_web](examples/hi_web/hi.rb).
|
|
86
148
|
|
87
149
|
![](examples/hi_web/hi.gif)
|
88
150
|
|
89
|
-
|
151
|
+
##### List Channels
|
90
152
|
|
91
|
-
List channels with [
|
153
|
+
List channels with [conversations_list](https://api.slack.com/methods/conversations.list).
|
92
154
|
|
93
155
|
```ruby
|
94
|
-
channels = client.
|
156
|
+
channels = client.conversations_list.channels
|
95
157
|
|
96
158
|
general_channel = channels.detect { |c| c.name == 'general' }
|
97
159
|
```
|
98
160
|
|
99
|
-
|
161
|
+
##### Upload a File
|
100
162
|
|
101
163
|
Upload a file with [files_upload](https://api.slack.com/methods/files.upload).
|
102
164
|
|
@@ -111,19 +173,19 @@ client.files_upload(
|
|
111
173
|
)
|
112
174
|
```
|
113
175
|
|
114
|
-
|
176
|
+
##### Get Channel Info
|
115
177
|
|
116
|
-
You can use a channel ID or name (prefixed with `#`) in all functions that take a `:channel` argument. Lookup by name is not supported by the Slack API and the `channels_id` method called invokes `
|
178
|
+
You can use a channel ID or name (prefixed with `#`) in all functions that take a `:channel` argument. Lookup by name is not supported by the Slack API and the `channels_id` method called invokes `conversations_list` in order to locate the channel ID.
|
117
179
|
|
118
180
|
```ruby
|
119
|
-
client.
|
181
|
+
client.conversations_info(channel: 'C04KB5X4D') # calls conversations_info
|
120
182
|
```
|
121
183
|
|
122
184
|
```ruby
|
123
|
-
client.
|
185
|
+
client.conversations_info(channel: '#general') # calls conversations_list followed by conversations_info
|
124
186
|
```
|
125
187
|
|
126
|
-
|
188
|
+
##### Get User Info
|
127
189
|
|
128
190
|
You can use a user ID or name (prefixed with `@`) in all functions that take a `:user` argument. Lookup by name is not supported by the Slack API and the `users_id` method called invokes `users_list` in order to locate the user ID.
|
129
191
|
|
@@ -135,7 +197,7 @@ client.users_info(user: 'U092BDCLV') # calls users_info
|
|
135
197
|
client.users_info(user: '@dblock') # calls users_list followed by users_info
|
136
198
|
```
|
137
199
|
|
138
|
-
|
200
|
+
##### Search for a User
|
139
201
|
|
140
202
|
Constructs an in-memory index of users and searches it. If you want to use this functionality, add the [picky](https://github.com/floere/picky) gem to your project's Gemfile.
|
141
203
|
|
@@ -143,7 +205,7 @@ Constructs an in-memory index of users and searches it. If you want to use this
|
|
143
205
|
client.users_search(user: 'dblock')
|
144
206
|
```
|
145
207
|
|
146
|
-
|
208
|
+
##### Other
|
147
209
|
|
148
210
|
Refer to the [Slack Web API Method Reference](https://api.slack.com/methods) for the list of all available functions.
|
149
211
|
|
@@ -176,11 +238,12 @@ timeout | Optional open/read timeout in seconds.
|
|
176
238
|
open_timeout | Optional connection open timeout in seconds.
|
177
239
|
default_page_size | Optional page size for paginated requests, default is _100_.
|
178
240
|
default_max_retries | Optional number of retries for paginated requests, default is _100_.
|
241
|
+
adapter | Optional HTTP adapter to use, defaults to `Faraday.default_adapter`.
|
179
242
|
|
180
243
|
You can also pass request options, including `timeout` and `open_timeout` into individual calls.
|
181
244
|
|
182
245
|
```ruby
|
183
|
-
client.
|
246
|
+
client.conversations_list(request: { timeout: 180 })
|
184
247
|
```
|
185
248
|
|
186
249
|
You can also control what proxy options are used by modifying the `http_proxy` environment variable per [Net::HTTP's documentation](https://docs.ruby-lang.org/en/2.0.0/Net/HTTP.html#class-Net::HTTP-label-Proxies).
|
@@ -213,13 +276,59 @@ end
|
|
213
276
|
all_members # many thousands of team members retrieved 10 at a time
|
214
277
|
```
|
215
278
|
|
279
|
+
#### Character Encoding
|
280
|
+
|
281
|
+
Note that Slack expects `text` to be UTF-8 encoded. If your messages appear with text such as `BAD+11` in Slack, check `text.encoding` and `.encode(Encoding::UTF_8)` your messages before sending them to Slack.
|
282
|
+
|
283
|
+
```ruby
|
284
|
+
text = 'characters such as "Ñ", "Á", "É"'
|
285
|
+
text.encoding
|
286
|
+
=> #<Encoding:UTF-8>
|
287
|
+
client.chat_postMessage(channel: '#general', text: text, as_user: true)
|
288
|
+
# renders 'characters such as "Ñ", "Á", "É"' in Slack
|
289
|
+
|
290
|
+
text = text.encode(Encoding::ISO_8859_1)
|
291
|
+
text.encoding
|
292
|
+
# => #<Encoding:ISO-8859-1>
|
293
|
+
client.chat_postMessage(channel: '#general', text: text, as_user: true)
|
294
|
+
# renders 'characters such as "BAD+11", "", "BAD+9"' in Slack
|
295
|
+
```
|
296
|
+
|
216
297
|
#### Error Handling
|
217
298
|
|
218
|
-
|
299
|
+
##### Slack Errors
|
300
|
+
|
301
|
+
If Slack returns an error for the request, then an error will be raised. The error class is specific to the type of error that Slack returns. For instance if Slack returns `account_inactive` then the error will be `Slack::Web::Api::Errors::AccountInactive`. This allows you to handle certain types of errors as needed:
|
302
|
+
|
303
|
+
```ruby
|
304
|
+
rescue Slack::Web::Api::Errors::AccountInactive => e
|
305
|
+
# deal with inactive account
|
306
|
+
end
|
307
|
+
```
|
308
|
+
|
309
|
+
All of these errors inherit from `Slack::Web::Api::Errors::SlackError`, so you can handle or silence all errors if necessary:
|
310
|
+
|
311
|
+
```ruby
|
312
|
+
rescue Slack::Web::Api::Errors::SlackError => e
|
313
|
+
# capture all Slack errors
|
314
|
+
end
|
315
|
+
```
|
219
316
|
|
220
|
-
If
|
317
|
+
If there's a new error type that is not yet known by this library, then it will raise `Slack::Web::Api::Errors::SlackError`. (Update the Web API if you find that errors are missing — see [CONTRIBUTING](CONTRIBUTING.md).)
|
221
318
|
|
222
|
-
In
|
319
|
+
In all of these cases the error message contains the error code, which is also accessible with `slack_error.error`. In case of multiple errors, the error message contains the error codes separated by commas, or they are accessible as an array with `slack_error.errors`. The original response is also accessible using the `response` attribute. The `response_metadata` is accessible with `slack_error.response_metadata`.
|
320
|
+
|
321
|
+
##### Rate Limiting
|
322
|
+
|
323
|
+
If you exceed [Slack’s rate limits](https://api.slack.com/docs/rate-limits), a `Slack::Web::Api::Errors::TooManyRequestsError` will be raised instead. (This does not inherit from `Slack::Web::Api::Errors::SlackError`.)
|
324
|
+
|
325
|
+
##### Other Errors
|
326
|
+
|
327
|
+
When Slack is temporarily unavailable a subclass of `Slack::Web::Api::Errors::ServerError` will be raised and the original `Faraday::Error` will be accesible via `exception.cause`. (Starting with 0.18.0 this is no longer a subclass of `Slack::Web::Api::Errors::SlackError`.)
|
328
|
+
|
329
|
+
Specifically `Slack::Web::Api::Errors::ParsingError` will be raised on non-json response (i.e. 200 OK with `Slack unavailable` HTML page) and `Slack::Web::Api::Errors::HttpRequestError` subclasses for connection failures (`Slack::Web::Api::Errors::TimeoutError` for read/open timeouts & `Slack::Web::Api::Errors::UnavailableError` for 5xx HTTP responses).
|
330
|
+
|
331
|
+
In any other case, a `Faraday::ClientError` will be raised.
|
223
332
|
|
224
333
|
### RealTime Client
|
225
334
|
|
@@ -235,9 +344,9 @@ end
|
|
235
344
|
client.on :message do |data|
|
236
345
|
case data.text
|
237
346
|
when 'bot hi' then
|
238
|
-
client.message
|
347
|
+
client.message(channel: data.channel, text: "Hi <@#{data.user}>!")
|
239
348
|
when /^bot/ then
|
240
|
-
client.message
|
349
|
+
client.message(channel: data.channel, text: "Sorry <@#{data.user}>, what?")
|
241
350
|
end
|
242
351
|
end
|
243
352
|
|
@@ -308,7 +417,7 @@ The following settings are supported.
|
|
308
417
|
setting | description
|
309
418
|
----------------|-----------------------------------------------------------------------------------------------------
|
310
419
|
token | Slack API token.
|
311
|
-
websocket_ping |
|
420
|
+
websocket_ping | How long the socket can be idle before sending a ping message to confirm it's still connected, default is 30.
|
312
421
|
websocket_proxy | Connect via proxy, include `:origin` and `:headers`.
|
313
422
|
store_class | Local store class name, default is an in-memory `Slack::RealTime::Stores::Store`.
|
314
423
|
start_method | Optional start method, either `:rtm_start` or `:rtm_connect`.
|
@@ -321,6 +430,17 @@ See a fully working example in [examples/hi_real_time](examples/hi_real_time/hi.
|
|
321
430
|
|
322
431
|
![](examples/hi_real_time/hi.gif)
|
323
432
|
|
433
|
+
#### Caveats
|
434
|
+
|
435
|
+
##### `websocket_ping`
|
436
|
+
This setting determines how long the socket can be idle before sending a ping message to confirm it's still connected.
|
437
|
+
|
438
|
+
It's important to note that if a ping message was sent and no response was received within the amount of time specified in `websocket_ping` the client will attempt to reestablish it's connection to the message server.
|
439
|
+
|
440
|
+
Note that the ping may take between `websocket_ping` and `websocket_ping * 3/2` seconds to actually trigger when there is no activity on the socket. This is because the timer that checks whether to ping is triggered at every `websocket_ping / 2` interval.
|
441
|
+
|
442
|
+
To disable this feature set `websocket_ping` to 0.
|
443
|
+
|
324
444
|
### Connection Methods
|
325
445
|
|
326
446
|
The RealTime client uses either [rtm.start](https://api.slack.com/methods/rtm.start) or [rtm.connect](https://api.slack.com/methods/rtm.connect) to open a connection. The former retrieves a lot of team information while the latter only serves connection purposes and is preferred. You should let the library choose the right method for you based on the `store_class` used and override this behavior with `start_method` when necessary.
|
@@ -341,9 +461,9 @@ client = Slack::RealTime::Client.new
|
|
341
461
|
client.on :message do |data|
|
342
462
|
case data.text
|
343
463
|
when 'bot hi' then
|
344
|
-
client.web_client.chat_postMessage
|
464
|
+
client.web_client.chat_postMessage(channel: data.channel, text: "Hi <@#{data.user}>!")
|
345
465
|
when /^bot/ then
|
346
|
-
client.web_client.chat_postMessage
|
466
|
+
client.web_client.chat_postMessage(channel: data.channel, text: "Sorry <@#{data.user}>, what?")
|
347
467
|
end
|
348
468
|
end
|
349
469
|
|
@@ -373,7 +493,7 @@ See [#134](https://github.com/slack-ruby/slack-ruby-client/issues/134) for a dis
|
|
373
493
|
|
374
494
|
#### Concurrency
|
375
495
|
|
376
|
-
`Slack::RealTime::Client` needs help from a concurrency library and supports [Async](https://github.com/socketry/async)
|
496
|
+
`Slack::RealTime::Client` needs help from a concurrency library and supports [Async](https://github.com/socketry/async).
|
377
497
|
|
378
498
|
```ruby
|
379
499
|
Slack::RealTime.configure do |config|
|
@@ -381,7 +501,7 @@ Slack::RealTime.configure do |config|
|
|
381
501
|
end
|
382
502
|
```
|
383
503
|
|
384
|
-
Use `client.start_async` instead of `client.start!`. A good example of such application is [slack-bot-server](https://github.com/
|
504
|
+
Use `client.start_async` instead of `client.start!`. A good example of such application is [slack-ruby-bot-server](https://github.com/slack-ruby/slack-ruby-bot-server).
|
385
505
|
|
386
506
|
```ruby
|
387
507
|
client = Slack::RealTime::Client.new
|
@@ -391,7 +511,7 @@ client.start_async
|
|
391
511
|
|
392
512
|
##### Async
|
393
513
|
|
394
|
-
|
514
|
+
Add `async-websocket` to your Gemfile.
|
395
515
|
|
396
516
|
```
|
397
517
|
gem 'async-websocket'
|
@@ -399,27 +519,44 @@ gem 'async-websocket'
|
|
399
519
|
|
400
520
|
See a fully working example in [examples/hi_real_time_async_async](examples/hi_real_time_async_async/hi.rb).
|
401
521
|
|
402
|
-
|
522
|
+
### Events API
|
403
523
|
|
404
|
-
|
524
|
+
This library provides limited support for the [Slack Events API](https://api.slack.com/events-api).
|
405
525
|
|
406
|
-
|
407
|
-
|
526
|
+
#### Configuring Slack::Events
|
527
|
+
|
528
|
+
You can configure Events support globally.
|
529
|
+
|
530
|
+
```ruby
|
531
|
+
Slack::Events.configure do |config|
|
532
|
+
config.signing_secret = 'secret'
|
533
|
+
end
|
408
534
|
```
|
409
535
|
|
410
|
-
|
536
|
+
The following settings are supported.
|
411
537
|
|
412
|
-
|
538
|
+
setting | description
|
539
|
+
----------------------|---------------------------------------------------------------------------------------------------
|
540
|
+
signing_secret | Slack signing secret, defaults is `ENV['SLACK_SIGNING_SECRET']`.
|
541
|
+
signature_expires_in | Signature expiration window in seconds, default is `300`.
|
413
542
|
|
414
|
-
|
543
|
+
#### Verifying the Request Signature
|
415
544
|
|
416
|
-
|
417
|
-
|
545
|
+
Slack signs its requests using a secret that's unique to your app. Verify incoming HTTP requests as follows.
|
546
|
+
|
547
|
+
```ruby
|
548
|
+
slack_request = Slack::Events::Request.new(http_request)
|
549
|
+
slack_request.verify!
|
418
550
|
```
|
419
551
|
|
420
|
-
|
552
|
+
To specify secrets on a per-request basis:
|
553
|
+
```ruby
|
554
|
+
Slack::Events::Request.new(http_request,
|
555
|
+
signing_secret: signing_secret,
|
556
|
+
signature_expires_in: signature_expires_in)
|
557
|
+
```
|
421
558
|
|
422
|
-
|
559
|
+
The `verify!` call may raise `Slack::Events::Request::MissingSigningSecret`, `Slack::Events::Request::InvalidSignature` or `Slack::Events::Request::TimestampExpired` errors.
|
423
560
|
|
424
561
|
### Message Parsing
|
425
562
|
|
@@ -509,6 +646,6 @@ See [CONTRIBUTING](CONTRIBUTING.md).
|
|
509
646
|
|
510
647
|
## Copyright and License
|
511
648
|
|
512
|
-
Copyright (c) 2015-
|
649
|
+
Copyright (c) 2015-2021, [Daniel Doubrovkine](https://twitter.com/dblockdotorg), [Artsy](https://www.artsy.net) and [Contributors](CHANGELOG.md).
|
513
650
|
|
514
651
|
This project is licensed under the [MIT License](LICENSE.md).
|
data/RELEASING.md
CHANGED
@@ -11,7 +11,7 @@ bundle install
|
|
11
11
|
rake
|
12
12
|
```
|
13
13
|
|
14
|
-
Check that the last build succeeded in [Travis CI](https://travis-ci.
|
14
|
+
Check that the last build succeeded in [Travis CI](https://app.travis-ci.com/github/slack-ruby/slack-ruby-client) for all supported platforms.
|
15
15
|
|
16
16
|
Change "Next" in [CHANGELOG.md](CHANGELOG.md) to the current date.
|
17
17
|
|
data/Rakefile
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'rubygems'
|
2
3
|
require 'bundler'
|
3
4
|
require 'bundler/gem_tasks'
|
@@ -14,7 +15,7 @@ end
|
|
14
15
|
require 'rubocop/rake_task'
|
15
16
|
RuboCop::RakeTask.new
|
16
17
|
|
17
|
-
task default: %i[rubocop
|
18
|
+
task default: %i[spec rubocop]
|
18
19
|
|
19
20
|
load 'tasks/git.rake'
|
20
21
|
load 'tasks/web.rake'
|
data/UPGRADING.md
CHANGED
@@ -1,6 +1,78 @@
|
|
1
1
|
Upgrading Slack-Ruby-Client
|
2
2
|
===========================
|
3
3
|
|
4
|
+
### Upgrading to >= 1.0.0
|
5
|
+
|
6
|
+
#### Deprecated Methods
|
7
|
+
|
8
|
+
Slack has deprecated all `channel` and `group` methods, which have been removed from the library.
|
9
|
+
|
10
|
+
See [this announcement from Slack](https://api.slack.com/changelog/2020-01-deprecating-antecedents-to-the-conversations-api) for details.
|
11
|
+
|
12
|
+
#### Error Handling
|
13
|
+
|
14
|
+
As of 1.0.0 `Slack::Web::Api::Errors::ServerError` and its subclasses (introduced in 0.16.0) no longer extend `Slack::Web::Api::Errors::InternalError` or its parent `Slack::Web::Api::Errors::SlackError`. If you are rescuing `SlackError` or `InternalError` with the intention of including `ServerError` and its subclasses you should adjust your code to explicitly rescue `Slack::Web::Api::Errors::ServerError`.
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
# Before
|
18
|
+
begin
|
19
|
+
client.auth_test
|
20
|
+
rescue Slack::Web::Api::Errors::SlackError
|
21
|
+
# Includes all server errors
|
22
|
+
end
|
23
|
+
|
24
|
+
# After
|
25
|
+
begin
|
26
|
+
client.auth_test
|
27
|
+
rescue Slack::Web::Api::Errors::SlackError, Slack::Web::Api::Errors::ServerError
|
28
|
+
# Need to rescue the server errors separately from SlackError
|
29
|
+
end
|
30
|
+
```
|
31
|
+
|
32
|
+
Additionally the `initialize` method for `ParsingError`, `TimeoutError`, and `UnavailableError` have changed from `new(message, response)` to `new(response)`. The `message` is now built into the definition of these classes. If you are instantiating or raising these errors in your code (perhaps in tests) you will need to update your code.
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
# Before
|
36
|
+
error = Slack::Web::Api::Errors::TimeoutError.new('timeout_error', response)
|
37
|
+
error.message
|
38
|
+
# => 'timeout_error'
|
39
|
+
|
40
|
+
# After
|
41
|
+
error = Slack::Web::Api::Errors::TimeoutError.new(response)
|
42
|
+
error.message
|
43
|
+
# => 'timeout_error'
|
44
|
+
```
|
45
|
+
|
46
|
+
### Upgrading to >= 0.16.0
|
47
|
+
|
48
|
+
#### Removed Celluloid and Faye-Websocket Concurrency Support
|
49
|
+
|
50
|
+
Concurrency support for `celluloid-io` and `faye-websocket` has been removed. If you are running a RealTime bot on Celluloid or Faye, you must upgrade to `async-websocket`. Please note that RealTime bots are deprecated by Slack, and we generally recommend you [migrate your classic, RealTime bot, to granular permissions](https://code.dblock.org/2020/11/30/migrating-classic-slack-ruby-bots-to-granular-permissions.html).
|
51
|
+
|
52
|
+
See [#338](https://github.com/slack-ruby/slack-ruby-client/issues/338) for more information.
|
53
|
+
|
54
|
+
#### Error Handling
|
55
|
+
|
56
|
+
As of 0.16.0 `Faraday::Error` exceptions sans `Faraday::ClientError` are wrapped into `Slack::Web::Api::Errors::ServerError`, so if you're rescuing `Faraday::Error` — you should adjust your code to use `Slack::Web::Api::Errors::ServerError` and use `exception.cause` if underlying `Faraday::Error` is needed.
|
57
|
+
|
58
|
+
See [README#other-errors](README.md#other-errors) and [#350](https://github.com/slack-ruby/slack-ruby-client/pull/350) for more information.
|
59
|
+
|
60
|
+
### Upgrading to >= 0.15.0
|
61
|
+
|
62
|
+
As of 0.15.0, `activesupport` is no longer required. Add `gem 'activesupport'` to your Gemfile if you required ActiveSupport via this library.
|
63
|
+
|
64
|
+
See [#325](https://github.com/slack-ruby/slack-ruby-client/pull/325) for more information.
|
65
|
+
|
66
|
+
### Upgrading to >= 0.14.0
|
67
|
+
|
68
|
+
If you are using async-websocket, lock down its version to 0.8.0 as newer versions are currently incompatible.
|
69
|
+
|
70
|
+
```
|
71
|
+
gem 'async-websocket', '~> 0.8.0'
|
72
|
+
```
|
73
|
+
|
74
|
+
See [#282](https://github.com/slack-ruby/slack-ruby-client/issues/282) for more information.
|
75
|
+
|
4
76
|
### Upgrading to >= 0.13.0
|
5
77
|
|
6
78
|
#### Recommended Async Library
|
@@ -114,5 +186,3 @@ gem 'celluloid-io'
|
|
114
186
|
When in doubt, use `faye-websocket`.
|
115
187
|
|
116
188
|
See [#5](https://github.com/slack-ruby/slack-ruby-client/issues/5) for more information.
|
117
|
-
|
118
|
-
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# This file was auto-generated by lib/tasks/web.rake
|
3
|
+
|
4
|
+
desc 'AdminAnalytics methods.'
|
5
|
+
command 'admin_analytics' do |g|
|
6
|
+
g.desc 'Retrieve analytics data for a given date, presented as a compressed JSON file'
|
7
|
+
g.long_desc %( Retrieve analytics data for a given date, presented as a compressed JSON file )
|
8
|
+
g.command 'getFile' do |c|
|
9
|
+
c.flag 'type', desc: 'The type of analytics to retrieve. The options are currently limited to member (for grid member analytics) and public_channel (for public channel analytics).'
|
10
|
+
c.flag 'date', desc: 'Date to retrieve the analytics data for, expressed as YYYY-MM-DD in UTC.'
|
11
|
+
c.flag 'metadata_only', desc: 'Retrieve metadata for the type of analytics indicated. Can be used only with type set to public_channel analytics. See detail below. Omit the date parameter when using this argument.'
|
12
|
+
c.action do |_global_options, options, _args|
|
13
|
+
puts JSON.dump($client.admin_analytics_getFile(options))
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# This file was auto-generated by lib/tasks/web.rake
|
3
|
+
|
4
|
+
desc 'AdminApps methods.'
|
5
|
+
command 'admin_apps' do |g|
|
6
|
+
g.desc 'Approve an app for installation on a workspace.'
|
7
|
+
g.long_desc %( Approve an app for installation on a workspace. )
|
8
|
+
g.command 'approve' do |c|
|
9
|
+
c.flag 'app_id', desc: 'The id of the app to approve.'
|
10
|
+
c.flag 'enterprise_id', desc: 'The ID of the enterprise to approve the app on.'
|
11
|
+
c.flag 'request_id', desc: 'The id of the request to approve.'
|
12
|
+
c.flag 'team_id', desc: 'The ID of the workspace to approve the app on.'
|
13
|
+
c.action do |_global_options, options, _args|
|
14
|
+
puts JSON.dump($client.admin_apps_approve(options))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
g.desc 'Clear an app resolution'
|
19
|
+
g.long_desc %( Clear an app resolution )
|
20
|
+
g.command 'clearResolution' do |c|
|
21
|
+
c.flag 'app_id', desc: 'The id of the app whose resolution you want to clear/undo.'
|
22
|
+
c.flag 'enterprise_id', desc: 'The enterprise to clear the app resolution from.'
|
23
|
+
c.flag 'team_id', desc: 'The workspace to clear the app resolution from.'
|
24
|
+
c.action do |_global_options, options, _args|
|
25
|
+
puts JSON.dump($client.admin_apps_clearResolution(options))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
g.desc 'Restrict an app for installation on a workspace.'
|
30
|
+
g.long_desc %( Restrict an app for installation on a workspace. )
|
31
|
+
g.command 'restrict' do |c|
|
32
|
+
c.flag 'app_id', desc: 'The id of the app to restrict.'
|
33
|
+
c.flag 'enterprise_id', desc: 'The ID of the enterprise to approve the app on.'
|
34
|
+
c.flag 'request_id', desc: 'The id of the request to restrict.'
|
35
|
+
c.flag 'team_id', desc: 'The ID of the workspace to approve the app on.'
|
36
|
+
c.action do |_global_options, options, _args|
|
37
|
+
puts JSON.dump($client.admin_apps_restrict(options))
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
g.desc 'Uninstall an app from one or many workspaces, or an entire enterprise organization.'
|
42
|
+
g.long_desc %( Uninstall an app from one or many workspaces, or an entire enterprise organization. )
|
43
|
+
g.command 'uninstall' do |c|
|
44
|
+
c.flag 'app_id', desc: 'The ID of the app to uninstall.'
|
45
|
+
c.flag 'enterprise_id', desc: 'The enterprise to completely uninstall the application from (across all workspaces). With an org-level token, this or team_ids is required.'
|
46
|
+
c.flag 'team_ids', desc: 'IDs of the teams to uninstall from (max 100). With an org-level token, this or enterprise_id is required.'
|
47
|
+
c.action do |_global_options, options, _args|
|
48
|
+
puts JSON.dump($client.admin_apps_uninstall(options))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# This file was auto-generated by lib/tasks/web.rake
|
3
|
+
|
4
|
+
desc 'AdminAppsApproved methods.'
|
5
|
+
command 'admin_apps_approved' do |g|
|
6
|
+
g.desc 'List approved apps for an org or workspace.'
|
7
|
+
g.long_desc %( List approved apps for an org or workspace. )
|
8
|
+
g.command 'list' do |c|
|
9
|
+
c.flag 'cursor', desc: 'Set cursor to next_cursor returned by the previous call to list items in the next page.'
|
10
|
+
c.flag 'enterprise_id', desc: '.'
|
11
|
+
c.flag 'limit', desc: 'The maximum number of items to return. Must be between 1 - 1000 both inclusive.'
|
12
|
+
c.flag 'team_id', desc: '.'
|
13
|
+
c.action do |_global_options, options, _args|
|
14
|
+
puts JSON.dump($client.admin_apps_approved_list(options))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# This file was auto-generated by lib/tasks/web.rake
|
3
|
+
|
4
|
+
desc 'AdminAppsRequests methods.'
|
5
|
+
command 'admin_apps_requests' do |g|
|
6
|
+
g.desc 'List app requests for a team/workspace.'
|
7
|
+
g.long_desc %( List app requests for a team/workspace. )
|
8
|
+
g.command 'list' do |c|
|
9
|
+
c.flag 'cursor', desc: 'Set cursor to next_cursor returned by the previous call to list items in the next page.'
|
10
|
+
c.flag 'enterprise_id', desc: '.'
|
11
|
+
c.flag 'limit', desc: 'The maximum number of items to return. Must be between 1 - 1000 both inclusive.'
|
12
|
+
c.flag 'team_id', desc: '.'
|
13
|
+
c.action do |_global_options, options, _args|
|
14
|
+
puts JSON.dump($client.admin_apps_requests_list(options))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# This file was auto-generated by lib/tasks/web.rake
|
3
|
+
|
4
|
+
desc 'AdminAppsRestricted methods.'
|
5
|
+
command 'admin_apps_restricted' do |g|
|
6
|
+
g.desc 'List restricted apps for an org or workspace.'
|
7
|
+
g.long_desc %( List restricted apps for an org or workspace. )
|
8
|
+
g.command 'list' do |c|
|
9
|
+
c.flag 'cursor', desc: 'Set cursor to next_cursor returned by the previous call to list items in the next page.'
|
10
|
+
c.flag 'enterprise_id', desc: '.'
|
11
|
+
c.flag 'limit', desc: 'The maximum number of items to return. Must be between 1 - 1000 both inclusive.'
|
12
|
+
c.flag 'team_id', desc: '.'
|
13
|
+
c.action do |_global_options, options, _args|
|
14
|
+
puts JSON.dump($client.admin_apps_restricted_list(options))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|