slack-ruby-client 0.13.1 → 2.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/.github/workflows/integration_test.yml +26 -0
- data/.github/workflows/lint.yml +14 -0
- data/.github/workflows/pr_lint.yml +21 -0
- data/.github/workflows/test.yml +36 -0
- data/.gitignore +5 -3
- data/.rubocop.yml +34 -5
- data/.rubocop_todo.yml +180 -46
- data/.ruby-version +1 -0
- data/CHANGELOG.md +119 -2
- data/CONTRIBUTING.md +23 -11
- data/Dangerfile +2 -0
- data/Gemfile +22 -5
- data/Gemfile.danger +6 -0
- data/LICENSE.md +1 -1
- data/README.md +236 -101
- data/RELEASING.md +2 -2
- data/Rakefile +2 -1
- data/UPGRADING.md +100 -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 +28 -0
- data/bin/commands/admin_apps_restricted.rb +17 -0
- data/bin/commands/admin_audit_anomaly_allow.rb +23 -0
- data/bin/commands/admin_auth_policy.rb +39 -0
- data/bin/commands/admin_barriers.rb +47 -0
- data/bin/commands/admin_conversations.rb +171 -0
- data/bin/commands/admin_conversations_ekm.rb +17 -0
- data/bin/commands/admin_conversations_restrictAccess.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/admin_users_unsupportedVersions.rb +15 -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 +52 -0
- data/bin/commands/auth.rb +1 -0
- data/bin/commands/auth_teams.rb +16 -0
- data/bin/commands/bookmarks.rb +53 -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/chat.rb +61 -14
- data/bin/commands/chat_scheduledMessages.rb +19 -0
- data/bin/commands/conversations.rb +82 -10
- 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 +34 -18
- data/bin/commands/files_comments.rb +1 -21
- data/bin/commands/files_remote.rb +78 -0
- data/bin/commands/migration.rb +2 -0
- 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 +1 -15
- data/bin/commands/search.rb +6 -1
- data/bin/commands/stars.rb +8 -6
- data/bin/commands/team.rb +6 -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 +50 -0
- data/bin/commands/workflows.rb +38 -0
- data/bin/commands.rb +41 -8
- data/bin/slack +3 -4
- 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 +6 -3
- 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/templates/event_handler.erb +5 -1
- data/lib/slack/real_time/api/typing.rb +5 -2
- data/lib/slack/real_time/client.rb +105 -54
- 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 +9 -13
- 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 +5 -0
- data/lib/slack/real_time/models/im.rb +1 -0
- data/lib/slack/real_time/models/{group.rb → mpim.rb} +2 -1
- 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 +3 -1
- data/lib/slack/real_time/socket.rb +45 -17
- data/lib/slack/real_time/stores/base.rb +28 -14
- data/lib/slack/real_time/stores/starter.rb +325 -297
- data/lib/slack/real_time/stores/store.rb +271 -196
- data/lib/slack/real_time/stores.rb +2 -7
- 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 +51 -0
- data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_audit_anomaly_allow.rb +34 -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 +264 -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_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/admin_users_unsupportedVersions.rb +25 -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 +77 -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/bookmarks.rb +88 -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/chat.rb +168 -65
- data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +40 -0
- data/lib/slack/web/api/endpoints/conversations.rb +182 -67
- data/lib/slack/web/api/endpoints/dialog.rb +5 -4
- 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 +69 -37
- data/lib/slack/web/api/endpoints/files_comments.rb +4 -36
- data/lib/slack/web/api/endpoints/files_remote.rb +127 -0
- data/lib/slack/web/api/endpoints/migration.rb +6 -3
- 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 +11 -18
- data/lib/slack/web/api/endpoints/reactions.rb +22 -21
- data/lib/slack/web/api/endpoints/reminders.rb +23 -10
- data/lib/slack/web/api/endpoints/rtm.rb +3 -25
- data/lib/slack/web/api/endpoints/search.rb +31 -16
- data/lib/slack/web/api/endpoints/stars.rb +14 -11
- data/lib/slack/web/api/endpoints/team.rb +15 -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 +31 -20
- data/lib/slack/web/api/endpoints/usergroups_users.rb +13 -8
- data/lib/slack/web/api/endpoints/users.rb +24 -23
- data/lib/slack/web/api/endpoints/users_admin.rb +3 -2
- 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 +102 -0
- data/lib/slack/web/api/endpoints/workflows.rb +61 -0
- data/lib/slack/web/api/endpoints.rb +82 -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 +1116 -0
- data/lib/slack/web/api/mixins/{channels.id.rb → conversations.id.rb} +5 -6
- data/lib/slack/web/api/mixins/ids.id.rb +3 -2
- data/lib/slack/web/api/mixins/users.id.rb +3 -4
- data/lib/slack/web/api/mixins/users.search.rb +3 -1
- data/lib/slack/web/api/mixins.rb +2 -2
- data/lib/slack/web/api/patches/chat.attachments-blocks.patch +69 -0
- data/lib/slack/web/api/patches/{dialog.1.open-json-support.patch → dialog.encoded-json.patch} +4 -4
- data/lib/slack/web/api/patches/views.view-json.patch +55 -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 +6 -2
- 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 +5 -2
- data/lib/slack/web/faraday/connection.rb +24 -20
- data/lib/slack/web/faraday/request.rb +5 -1
- data/lib/slack/web/faraday/response/raise_error.rb +14 -7
- 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 +12 -5
- 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 +51 -21
- data/lib/tasks/update.rake +1 -0
- data/lib/tasks/web.rake +48 -12
- data/screenshots/create-app.png +0 -0
- data/slack-ruby-client.gemspec +7 -12
- 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 +347 -26
- 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 +35 -0
- data/spec/slack/events/request_spec.rb +188 -0
- data/spec/slack/messages/formatting_spec.rb +35 -13
- data/spec/slack/real_time/api/message_spec.rb +7 -2
- data/spec/slack/real_time/api/ping_spec.rb +3 -1
- data/spec/slack/real_time/api/typing_spec.rb +6 -2
- data/spec/slack/real_time/client_spec.rb +300 -142
- 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 +20 -17
- data/spec/slack/real_time/event_handlers/event_handlers_spec.rb +3 -2
- data/spec/slack/real_time/event_handlers/im_spec.rb +31 -27
- data/spec/slack/real_time/event_handlers/{group_spec.rb → private_channel_spec.rb} +36 -27
- data/spec/slack/real_time/event_handlers/{channel_spec.rb → public_channel_spec.rb} +31 -24
- data/spec/slack/real_time/event_handlers/team_spec.rb +8 -7
- data/spec/slack/real_time/event_handlers/user_spec.rb +7 -5
- data/spec/slack/real_time/rtm_connect_spec.rb +2 -1
- data/spec/slack/real_time/stores/store_spec.rb +50 -0
- data/spec/slack/slack_spec.rb +41 -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 +13 -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_audit_anomaly_allow_spec.rb +8 -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/admin_users_unsupportedVersions_spec.rb +8 -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_resources_spec.rb → auth_teams_spec.rb} +2 -1
- data/spec/slack/web/api/endpoints/bookmarks_spec.rb +40 -0
- 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 +144 -40
- data/spec/slack/web/api/endpoints/custom_specs/conversations_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +18 -6
- data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +8 -3
- data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +112 -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 +18 -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_scopes_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 +45 -0
- data/spec/slack/web/api/mixins/users_spec.rb +19 -8
- data/spec/slack/web/api/pagination/cursor_spec.rb +47 -15
- data/spec/slack/web/client_spec.rb +199 -22
- 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/real_time/loaded_client.rb +120 -0
- data/spec/support/token.rb +1 -0
- data/spec/support/vcr.rb +37 -1
- metadata +174 -262
- data/.travis.yml +0 -32
- data/bin/commands/apps_permissions.rb +0 -22
- data/bin/commands/apps_permissions_resources.rb +0 -14
- data/bin/commands/apps_permissions_scopes.rb +0 -12
- data/bin/commands/apps_permissions_users.rb +0 -25
- data/bin/commands/channels.rb +0 -175
- data/bin/commands/groups.rb +0 -174
- data/bin/commands/im.rb +0 -67
- data/bin/commands/mpim.rb +0 -65
- 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/endpoints/apps_permissions.rb +0 -35
- data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +0 -30
- data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +0 -20
- data/lib/slack/web/api/endpoints/apps_permissions_users.rb +0 -49
- data/lib/slack/web/api/endpoints/channels.rb +0 -266
- data/lib/slack/web/api/endpoints/groups.rb +0 -265
- data/lib/slack/web/api/endpoints/im.rb +0 -113
- data/lib/slack/web/api/endpoints/mpim.rb +0 -108
- data/lib/slack/web/api/endpoints/presence.rb +0 -23
- 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/fixtures/slack/web/rtm_start.yml +0 -104
- 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/real_time/rtm_start_spec.rb +0 -13
- data/spec/slack/real_time/store_spec.rb +0 -11
- 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
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# This file was auto-generated by lib/tasks/web.rake
|
3
|
+
|
4
|
+
desc 'Views methods.'
|
5
|
+
command 'views' do |g|
|
6
|
+
g.desc 'Open a view for a user.'
|
7
|
+
g.long_desc %( Open a view for a user. )
|
8
|
+
g.command 'open' do |c|
|
9
|
+
c.flag 'view', desc: 'A view payload. This must be a JSON-encoded string.'
|
10
|
+
c.flag 'trigger_id', desc: 'Exchange a trigger to post to the user.'
|
11
|
+
c.flag 'interactivity_pointer', desc: 'Exchange an interactivity pointer to post to the user.'
|
12
|
+
c.action do |_global_options, options, _args|
|
13
|
+
puts JSON.dump($client.views_open(options))
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
g.desc 'Publish a static view for a User.'
|
18
|
+
g.long_desc %( Publish a static view for a User. )
|
19
|
+
g.command 'publish' do |c|
|
20
|
+
c.flag 'user_id', desc: 'id of the user you want publish a view to.'
|
21
|
+
c.flag 'view', desc: 'A view payload. This must be a JSON-encoded string.'
|
22
|
+
c.flag 'hash', desc: 'A string that represents view state to protect against possible race conditions.'
|
23
|
+
c.action do |_global_options, options, _args|
|
24
|
+
puts JSON.dump($client.views_publish(options))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
g.desc 'Push a view onto the stack of a root view.'
|
29
|
+
g.long_desc %( Push a view onto the stack of a root view. )
|
30
|
+
g.command 'push' do |c|
|
31
|
+
c.flag 'view', desc: 'A view payload. This must be a JSON-encoded string.'
|
32
|
+
c.flag 'trigger_id', desc: 'Exchange a trigger to post to the user.'
|
33
|
+
c.flag 'interactivity_pointer', desc: 'Exchange an interactivity pointer to post to the user.'
|
34
|
+
c.action do |_global_options, options, _args|
|
35
|
+
puts JSON.dump($client.views_push(options))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
g.desc 'Update an existing view.'
|
40
|
+
g.long_desc %( Update an existing view. )
|
41
|
+
g.command 'update' do |c|
|
42
|
+
c.flag 'view', desc: 'A view object. This must be a JSON-encoded string.'
|
43
|
+
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.'
|
44
|
+
c.flag 'view_id', desc: 'A unique identifier of the view to be updated. Either view_id or external_id is required.'
|
45
|
+
c.flag 'hash', desc: 'A string that represents view state to protect against possible race conditions.'
|
46
|
+
c.action do |_global_options, options, _args|
|
47
|
+
puts JSON.dump($client.views_update(options))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
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,25 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# This file was auto-generated by lib/tasks/web.rake
|
2
3
|
|
4
|
+
require 'commands/admin_analytics'
|
5
|
+
require 'commands/admin_apps'
|
6
|
+
require 'commands/admin_apps_approved'
|
7
|
+
require 'commands/admin_apps_requests'
|
8
|
+
require 'commands/admin_apps_restricted'
|
9
|
+
require 'commands/admin_audit_anomaly_allow'
|
10
|
+
require 'commands/admin_auth_policy'
|
11
|
+
require 'commands/admin_barriers'
|
12
|
+
require 'commands/admin_conversations'
|
13
|
+
require 'commands/admin_conversations_ekm'
|
14
|
+
require 'commands/admin_conversations_restrictAccess'
|
15
|
+
require 'commands/admin_emoji'
|
16
|
+
require 'commands/admin_inviteRequests'
|
17
|
+
require 'commands/admin_inviteRequests_approved'
|
18
|
+
require 'commands/admin_inviteRequests_denied'
|
19
|
+
require 'commands/admin_teams'
|
20
|
+
require 'commands/admin_teams_admins'
|
21
|
+
require 'commands/admin_teams_owners'
|
22
|
+
require 'commands/admin_teams_settings'
|
23
|
+
require 'commands/admin_usergroups'
|
24
|
+
require 'commands/admin_users'
|
25
|
+
require 'commands/admin_users_session'
|
26
|
+
require 'commands/admin_users_unsupportedVersions'
|
3
27
|
require 'commands/api'
|
4
|
-
require 'commands/
|
5
|
-
require 'commands/
|
6
|
-
require 'commands/
|
7
|
-
require 'commands/
|
28
|
+
require 'commands/apps'
|
29
|
+
require 'commands/apps_connections'
|
30
|
+
require 'commands/apps_event_authorizations'
|
31
|
+
require 'commands/apps_manifest'
|
8
32
|
require 'commands/auth'
|
33
|
+
require 'commands/auth_teams'
|
34
|
+
require 'commands/bookmarks'
|
9
35
|
require 'commands/bots'
|
10
|
-
require 'commands/
|
36
|
+
require 'commands/calls'
|
37
|
+
require 'commands/calls_participants'
|
11
38
|
require 'commands/chat'
|
39
|
+
require 'commands/chat_scheduledMessages'
|
12
40
|
require 'commands/conversations'
|
13
41
|
require 'commands/dialog'
|
14
42
|
require 'commands/dnd'
|
15
43
|
require 'commands/emoji'
|
16
44
|
require 'commands/files'
|
17
45
|
require 'commands/files_comments'
|
18
|
-
require 'commands/
|
19
|
-
require 'commands/im'
|
46
|
+
require 'commands/files_remote'
|
20
47
|
require 'commands/migration'
|
21
|
-
require 'commands/mpim'
|
22
48
|
require 'commands/oauth'
|
49
|
+
require 'commands/oauth_v2'
|
50
|
+
require 'commands/openid_connect'
|
23
51
|
require 'commands/pins'
|
24
52
|
require 'commands/reactions'
|
25
53
|
require 'commands/reminders'
|
@@ -27,10 +55,15 @@ require 'commands/rtm'
|
|
27
55
|
require 'commands/search'
|
28
56
|
require 'commands/stars'
|
29
57
|
require 'commands/team'
|
58
|
+
require 'commands/team_billing'
|
59
|
+
require 'commands/team_preferences'
|
30
60
|
require 'commands/team_profile'
|
61
|
+
require 'commands/tooling_tokens'
|
31
62
|
require 'commands/usergroups'
|
32
63
|
require 'commands/usergroups_users'
|
33
64
|
require 'commands/users'
|
34
65
|
require 'commands/users_admin'
|
35
66
|
require 'commands/users_prefs'
|
36
67
|
require 'commands/users_profile'
|
68
|
+
require 'commands/views'
|
69
|
+
require 'commands/workflows'
|
data/bin/slack
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
2
|
require 'gli'
|
4
|
-
require '
|
3
|
+
require 'slack_ruby_client'
|
5
4
|
|
6
5
|
include GLI::App
|
7
6
|
|
@@ -41,12 +40,12 @@ pre do |global_options, _command, options, _args|
|
|
41
40
|
end
|
42
41
|
|
43
42
|
# remove any nil values from options
|
44
|
-
options.
|
43
|
+
options.compact!
|
45
44
|
|
46
45
|
true
|
47
46
|
end
|
48
47
|
|
49
|
-
$LOAD_PATH.push File.expand_path(
|
48
|
+
$LOAD_PATH.push File.expand_path(__dir__)
|
50
49
|
require 'commands'
|
51
50
|
|
52
51
|
exit run(ARGV)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'slack-ruby-client'
|
2
3
|
|
3
4
|
Slack.configure do |config|
|
@@ -8,15 +9,18 @@ end
|
|
8
9
|
client = Slack::RealTime::Client.new
|
9
10
|
|
10
11
|
client.on :hello do
|
11
|
-
puts
|
12
|
+
puts(
|
13
|
+
"Successfully connected, welcome '#{client.self.name}' " \
|
14
|
+
"to the '#{client.team.name}' team at https://#{client.team.domain}.slack.com."
|
15
|
+
)
|
12
16
|
end
|
13
17
|
|
14
18
|
client.on :message do |data|
|
15
19
|
puts data
|
16
20
|
case data.text
|
17
|
-
when 'bot hi'
|
21
|
+
when 'bot hi'
|
18
22
|
client.web_client.chat_postMessage channel: data.channel, text: "Hi <@#{data.user}>!"
|
19
|
-
when /^bot/
|
23
|
+
when /^bot/
|
20
24
|
client.web_client.chat_postMessage channel: data.channel, text: "Sorry <@#{data.user}>, what?"
|
21
25
|
end
|
22
26
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'slack-ruby-client'
|
2
3
|
require 'async'
|
3
4
|
|
@@ -15,7 +16,10 @@ ENV['SLACK_API_TOKENS'].split.each do |token|
|
|
15
16
|
client = Slack::RealTime::Client.new(token: token)
|
16
17
|
|
17
18
|
client.on :hello do
|
18
|
-
logger.info
|
19
|
+
logger.info(
|
20
|
+
"Successfully connected, welcome '#{client.self.name}' to " \
|
21
|
+
"the '#{client.team.name}' team at https://#{client.team.domain}.slack.com."
|
22
|
+
)
|
19
23
|
end
|
20
24
|
|
21
25
|
client.on :message do |data|
|
@@ -24,7 +28,7 @@ ENV['SLACK_API_TOKENS'].split.each do |token|
|
|
24
28
|
client.typing channel: data.channel
|
25
29
|
|
26
30
|
case data.text
|
27
|
-
when /hi/
|
31
|
+
when /hi/
|
28
32
|
client.message channel: data.channel, text: "Hi <@#{data.user}>!"
|
29
33
|
else
|
30
34
|
client.message channel: data.channel, text: "Sorry <@#{data.user}>, what?"
|
data/examples/hi_web/Gemfile
CHANGED
data/examples/hi_web/hi.rb
CHANGED
data/examples/new_ticket/Gemfile
CHANGED
data/lib/slack/config.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Slack
|
3
|
+
module Events
|
4
|
+
module Config
|
5
|
+
extend self
|
6
|
+
|
7
|
+
ATTRIBUTES = %i[
|
8
|
+
signing_secret
|
9
|
+
signature_expires_in
|
10
|
+
].freeze
|
11
|
+
|
12
|
+
attr_accessor(*Config::ATTRIBUTES)
|
13
|
+
|
14
|
+
def reset
|
15
|
+
self.signing_secret = ENV['SLACK_SIGNING_SECRET']
|
16
|
+
self.signature_expires_in = 5 * 60
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class << self
|
21
|
+
def configure
|
22
|
+
block_given? ? yield(Config) : Config
|
23
|
+
end
|
24
|
+
|
25
|
+
def config
|
26
|
+
Config
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
Slack::Events::Config.reset
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Slack
|
3
|
+
module Events
|
4
|
+
class Request
|
5
|
+
class MissingSigningSecret < StandardError; end
|
6
|
+
|
7
|
+
class TimestampExpired < StandardError; end
|
8
|
+
|
9
|
+
class InvalidSignature < StandardError; end
|
10
|
+
|
11
|
+
attr_reader :http_request,
|
12
|
+
:signing_secret,
|
13
|
+
:signature_expires_in
|
14
|
+
|
15
|
+
def initialize(http_request, options = {})
|
16
|
+
@http_request = http_request
|
17
|
+
@signing_secret = options[:signing_secret] || Slack::Events.config.signing_secret
|
18
|
+
@signature_expires_in =
|
19
|
+
options[:signature_expires_in] || Slack::Events.config.signature_expires_in
|
20
|
+
end
|
21
|
+
|
22
|
+
# Request timestamp.
|
23
|
+
def timestamp
|
24
|
+
@timestamp ||= http_request.get_header('HTTP_X_SLACK_REQUEST_TIMESTAMP')
|
25
|
+
end
|
26
|
+
|
27
|
+
# The signature is created by combining the signing secret with the body of the request
|
28
|
+
# Slack is sending using a standard HMAC-SHA256 keyed hash.
|
29
|
+
def signature
|
30
|
+
@signature ||= http_request.get_header('HTTP_X_SLACK_SIGNATURE')
|
31
|
+
end
|
32
|
+
|
33
|
+
# Signature version.
|
34
|
+
def version
|
35
|
+
'v0'
|
36
|
+
end
|
37
|
+
|
38
|
+
# Request body.
|
39
|
+
def body
|
40
|
+
@body ||= begin
|
41
|
+
body = http_request.body.read
|
42
|
+
http_request.body.rewind
|
43
|
+
body
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Returns true if the signature coming from Slack has expired.
|
48
|
+
def expired?
|
49
|
+
timestamp.nil? || (Time.now.to_i - timestamp.to_i).abs > signature_expires_in
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns true if the signature coming from Slack is valid.
|
53
|
+
def valid?
|
54
|
+
raise MissingSigningSecret unless signing_secret
|
55
|
+
|
56
|
+
digest = OpenSSL::Digest.new('SHA256')
|
57
|
+
signature_basestring = [version, timestamp, body].join(':')
|
58
|
+
hex_hash = OpenSSL::HMAC.hexdigest(digest, signing_secret, signature_basestring)
|
59
|
+
computed_signature = [version, hex_hash].join('=')
|
60
|
+
computed_signature == signature
|
61
|
+
end
|
62
|
+
|
63
|
+
# Validates the request signature and its expiration.
|
64
|
+
def verify!
|
65
|
+
raise TimestampExpired if expired?
|
66
|
+
raise InvalidSignature unless valid?
|
67
|
+
|
68
|
+
true
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/slack/logger.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'logger'
|
2
3
|
|
3
4
|
module Slack
|
4
5
|
class Logger < ::Logger
|
5
6
|
def self.default
|
6
|
-
@
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
return @default if @default
|
8
|
+
|
9
|
+
logger = new STDOUT
|
10
|
+
logger.level = Logger::WARN
|
11
|
+
@default = logger
|
11
12
|
end
|
12
13
|
end
|
13
14
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Slack
|
2
3
|
module RealTime
|
3
4
|
module Api
|
@@ -6,12 +7,14 @@ module Slack
|
|
6
7
|
# Sends a message to a channel.
|
7
8
|
#
|
8
9
|
# @option options [channel] :channel
|
9
|
-
# Channel to send message to. Can be a public channel, private group or IM channel.
|
10
|
+
# Channel to send message to. Can be a public channel, private group or IM channel.
|
11
|
+
# Can be an encoded ID, or a name.
|
10
12
|
# @option options [Object] :text
|
11
13
|
# Text of the message to send. See below for an explanation of formatting.
|
12
14
|
def message(options = {})
|
13
|
-
|
14
|
-
|
15
|
+
raise ArgumentError, 'Required arguments :channel missing' if options[:channel].nil?
|
16
|
+
raise ArgumentError, 'Required arguments :text missing' if options[:text].nil?
|
17
|
+
|
15
18
|
send_json({ type: 'message', id: next_id }.merge(options))
|
16
19
|
end
|
17
20
|
end
|
@@ -1,10 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Slack
|
2
3
|
module RealTime
|
3
4
|
module Api
|
4
5
|
module Ping
|
5
6
|
#
|
6
|
-
# Clients should try to quickly detect disconnections, even in idle periods, so that users
|
7
|
-
#
|
7
|
+
# Clients should try to quickly detect disconnections, even in idle periods, so that users
|
8
|
+
# can easily tell the
|
9
|
+
# difference between being disconnected and everyone being quiet. Not all web browsers
|
10
|
+
# support the WebSocket
|
8
11
|
# ping spec, so the RTM protocol also supports ping/pong messages.
|
9
12
|
#
|
10
13
|
def ping(options = {})
|
@@ -1,4 +1,8 @@
|
|
1
1
|
# <%= desc %>
|
2
2
|
# @see https://api.slack.com/events/<%= name %>
|
3
3
|
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/<%= name %>.json
|
4
|
-
|
4
|
+
<% if hook %>
|
5
|
+
<%= hook %>
|
6
|
+
<% else %>
|
7
|
+
# on :<%= name %> do |data|
|
8
|
+
<% end %>
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Slack
|
2
3
|
module RealTime
|
3
4
|
module Api
|
@@ -6,9 +7,11 @@ module Slack
|
|
6
7
|
# Send a typing indicator to indicate that the user is currently writing a message.
|
7
8
|
#
|
8
9
|
# @option options [channel] :channel
|
9
|
-
# Channel to send message to. Can be a public channel, private group or IM channel.
|
10
|
+
# Channel to send message to. Can be a public channel, private group or IM channel.
|
11
|
+
# Can be an encoded ID, or a name.
|
10
12
|
def typing(options = {})
|
11
|
-
|
13
|
+
raise ArgumentError, 'Required arguments :channel missing' if options[:channel].nil?
|
14
|
+
|
12
15
|
send_json({ type: 'typing', id: next_id }.merge(options))
|
13
16
|
end
|
14
17
|
end
|