slack-ruby-client 0.14.4 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +1 -0
- data/.rubocop.yml +23 -7
- data/.rubocop_todo.yml +104 -47
- data/.travis.yml +1 -5
- data/CHANGELOG.md +41 -2
- data/CONTRIBUTING.md +17 -6
- data/Dangerfile +2 -1
- data/Gemfile +2 -2
- data/README.md +94 -53
- data/Rakefile +1 -0
- data/UPGRADING.md +20 -2
- data/bin/commands.rb +30 -0
- data/bin/commands/admin_analytics.rb +15 -0
- data/bin/commands/admin_apps.rb +40 -0
- data/bin/commands/admin_apps_approved.rb +17 -0
- data/bin/commands/admin_apps_requests.rb +16 -0
- data/bin/commands/admin_apps_restricted.rb +17 -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 +97 -0
- data/bin/commands/admin_users_session.rb +25 -2
- data/bin/commands/api.rb +3 -3
- data/bin/commands/apps.rb +3 -2
- data/bin/commands/apps_connections.rb +13 -0
- data/bin/commands/apps_event_authorizations.rb +16 -0
- data/bin/commands/apps_permissions.rb +5 -4
- data/bin/commands/apps_permissions_resources.rb +3 -2
- data/bin/commands/apps_permissions_scopes.rb +3 -2
- data/bin/commands/apps_permissions_users.rb +5 -4
- data/bin/commands/auth.rb +5 -4
- data/bin/commands/auth_teams.rb +16 -0
- data/bin/commands/bots.rb +4 -2
- data/bin/commands/calls.rb +52 -0
- data/bin/commands/calls_participants.rb +25 -0
- data/bin/commands/channels.rb +37 -33
- data/bin/commands/chat.rb +34 -33
- data/bin/commands/chat_scheduledMessages.rb +4 -2
- data/bin/commands/conversations.rb +50 -38
- data/bin/commands/dialog.rb +3 -2
- data/bin/commands/dnd.rb +10 -9
- data/bin/commands/emoji.rb +3 -2
- data/bin/commands/files.rb +16 -13
- data/bin/commands/files_comments.rb +3 -2
- data/bin/commands/files_remote.rb +78 -0
- data/bin/commands/groups.rb +38 -35
- data/bin/commands/im.rb +14 -13
- data/bin/commands/migration.rb +4 -2
- data/bin/commands/mpim.rb +14 -13
- data/bin/commands/oauth.rb +6 -5
- data/bin/commands/oauth_v2.rb +17 -0
- data/bin/commands/pins.rb +7 -10
- data/bin/commands/reactions.rb +11 -11
- data/bin/commands/reminders.rb +11 -10
- data/bin/commands/rtm.rb +5 -4
- data/bin/commands/search.rb +11 -7
- data/bin/commands/stars.rb +7 -6
- data/bin/commands/team.rb +12 -8
- data/bin/commands/team_profile.rb +3 -2
- data/bin/commands/usergroups.rb +17 -11
- data/bin/commands/usergroups_users.rb +7 -4
- data/bin/commands/users.rb +26 -23
- 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/slack +1 -2
- 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-ruby-client.rb +6 -4
- data/lib/slack.rb +1 -0
- data/lib/slack/config.rb +1 -0
- data/lib/slack/events/config.rb +1 -0
- data/lib/slack/events/request.rb +8 -2
- 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 +21 -13
- data/lib/slack/real_time/concurrency.rb +1 -2
- data/lib/slack/real_time/concurrency/async.rb +12 -6
- data/lib/slack/real_time/config.rb +9 -3
- data/lib/slack/real_time/models.rb +1 -0
- 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/socket.rb +16 -13
- data/lib/slack/real_time/stores.rb +1 -0
- data/lib/slack/real_time/stores/base.rb +4 -1
- data/lib/slack/real_time/stores/starter.rb +1 -0
- data/lib/slack/real_time/stores/store.rb +16 -25
- data/lib/slack/version.rb +2 -1
- data/lib/slack/web/api/endpoints.rb +60 -0
- data/lib/slack/web/api/endpoints/admin_analytics.rb +26 -0
- data/lib/slack/web/api/endpoints/admin_apps.rb +62 -0
- data/lib/slack/web/api/endpoints/admin_apps_approved.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_apps_requests.rb +33 -0
- data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +35 -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 +161 -0
- data/lib/slack/web/api/endpoints/admin_users_session.rb +40 -1
- data/lib/slack/web/api/endpoints/api.rb +2 -3
- data/lib/slack/web/api/endpoints/apps.rb +2 -1
- 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_permissions.rb +3 -2
- data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +2 -1
- data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +2 -1
- data/lib/slack/web/api/endpoints/apps_permissions_users.rb +3 -2
- data/lib/slack/web/api/endpoints/auth.rb +3 -2
- 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 +52 -31
- data/lib/slack/web/api/endpoints/chat.rb +31 -30
- data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +5 -2
- data/lib/slack/web/api/endpoints/conversations.rb +55 -36
- data/lib/slack/web/api/endpoints/dialog.rb +2 -1
- data/lib/slack/web/api/endpoints/dnd.rb +5 -4
- data/lib/slack/web/api/endpoints/emoji.rb +2 -1
- data/lib/slack/web/api/endpoints/files.rb +13 -8
- data/lib/slack/web/api/endpoints/files_comments.rb +2 -1
- data/lib/slack/web/api/endpoints/files_remote.rb +127 -0
- data/lib/slack/web/api/endpoints/groups.rb +39 -24
- data/lib/slack/web/api/endpoints/im.rb +17 -12
- data/lib/slack/web/api/endpoints/migration.rb +4 -1
- data/lib/slack/web/api/endpoints/mpim.rb +18 -13
- data/lib/slack/web/api/endpoints/oauth.rb +4 -6
- data/lib/slack/web/api/endpoints/oauth_v2.rb +30 -0
- data/lib/slack/web/api/endpoints/pins.rb +7 -16
- data/lib/slack/web/api/endpoints/reactions.rb +14 -15
- data/lib/slack/web/api/endpoints/reminders.rb +6 -5
- data/lib/slack/web/api/endpoints/rtm.rb +3 -2
- data/lib/slack/web/api/endpoints/search.rb +10 -3
- data/lib/slack/web/api/endpoints/stars.rb +6 -7
- data/lib/slack/web/api/endpoints/team.rb +11 -5
- data/lib/slack/web/api/endpoints/team_profile.rb +2 -1
- data/lib/slack/web/api/endpoints/usergroups.rb +16 -5
- data/lib/slack/web/api/endpoints/usergroups_users.rb +7 -2
- data/lib/slack/web/api/endpoints/users.rb +18 -21
- 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 +4 -3
- 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/error.rb +1 -0
- data/lib/slack/web/api/errors.rb +850 -0
- data/lib/slack/web/api/errors/internal_error.rb +14 -0
- data/lib/slack/web/api/errors/slack_error.rb +14 -1
- data/lib/slack/web/api/errors/too_many_requests_error.rb +1 -0
- data/lib/slack/web/api/mixins.rb +2 -0
- data/lib/slack/web/api/mixins/channels.id.rb +2 -3
- data/lib/slack/web/api/mixins/conversations.id.rb +25 -0
- data/lib/slack/web/api/mixins/groups.id.rb +2 -3
- 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/patches/{chat.6.block-kit-support.patch → chat.1.patch} +29 -26
- 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 -0
- 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 +1 -0
- data/lib/slack/web/faraday/response/raise_error.rb +25 -6
- data/lib/slack/web/faraday/response/wrap_error.rb +18 -0
- data/lib/slack/web/pagination/cursor.rb +3 -2
- data/lib/slack_ruby_client.rb +1 -0
- data/lib/tasks/git.rake +1 -0
- data/lib/tasks/real_time.rake +13 -5
- data/lib/tasks/update.rake +1 -0
- data/lib/tasks/web.rake +34 -10
- data/screenshots/create-app.png +0 -0
- data/slack-ruby-client.gemspec +6 -3
- data/spec/fixtures/slack/web/channels_info.yml +108 -15
- data/spec/fixtures/slack/web/conversations_setTopic.yml +69 -0
- data/spec/fixtures/slack/web/conversations_setTopic_one_page.yml +142 -0
- data/spec/fixtures/slack/web/conversations_setTopic_paginated.yml +208 -0
- data/spec/fixtures/slack/web/views_open_error.yml +76 -0
- data/spec/integration/integration_spec.rb +16 -17
- data/spec/slack/config_spec.rb +2 -0
- data/spec/slack/events/config_spec.rb +8 -4
- data/spec/slack/events/request_spec.rb +74 -40
- 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 +153 -38
- data/spec/slack/real_time/concurrency/it_behaves_like_a_realtime_socket.rb +2 -0
- data/spec/slack/real_time/event_handlers/bot_spec.rb +2 -1
- data/spec/slack/real_time/event_handlers/channel_spec.rb +9 -6
- 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 +4 -3
- data/spec/slack/real_time/event_handlers/team_spec.rb +3 -1
- data/spec/slack/real_time/event_handlers/user_spec.rb +1 -0
- data/spec/slack/real_time/rtm_connect_spec.rb +1 -0
- data/spec/slack/real_time/rtm_start_spec.rb +1 -0
- data/spec/slack/real_time/store_spec.rb +2 -1
- data/spec/slack/slack_spec.rb +37 -5
- 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 +13 -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_conversations_whitelist_spec.rb +32 -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 +9 -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_permissions_resources_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/apps_permissions_scopes_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/apps_permissions_spec.rb +3 -2
- data/spec/slack/web/api/endpoints/apps_permissions_users_spec.rb +4 -3
- data/spec/slack/web/api/endpoints/apps_spec.rb +3 -2
- data/spec/slack/web/api/endpoints/auth_teams_spec.rb +8 -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 +1 -0
- data/spec/slack/web/api/endpoints/conversations_spec.rb +21 -12
- data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +5 -1
- data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +5 -3
- data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +80 -25
- data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +12 -4
- data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +2 -0
- data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +6 -1
- data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +95 -0
- data/spec/slack/web/api/endpoints/dnd_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/emoji_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/files_comments_spec.rb +3 -2
- 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/im_spec.rb +5 -4
- data/spec/slack/web/api/endpoints/migration_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/mpim_spec.rb +5 -4
- data/spec/slack/web/api/endpoints/oauth_spec.rb +4 -14
- data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +13 -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/team_profile_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/team_spec.rb +1 -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/views_spec.rb +29 -0
- data/spec/slack/web/api/endpoints/workflows_spec.rb +26 -0
- data/spec/slack/web/api/error_spec.rb +4 -2
- data/spec/slack/web/api/errors/slack_error_spec.rb +26 -2
- data/spec/slack/web/api/mixins/channels_spec.rb +17 -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/groups_spec.rb +17 -7
- data/spec/slack/web/api/mixins/users_spec.rb +17 -8
- data/spec/slack/web/api/pagination/cursor_spec.rb +40 -10
- data/spec/slack/web/client_spec.rb +171 -18
- data/spec/slack/web/faraday/response/raise_error_spec.rb +47 -12
- data/spec/spec_helper.rb +2 -1
- data/spec/support/queue_with_timeout.rb +1 -0
- data/spec/support/real_time/concurrency/mock.rb +1 -0
- data/spec/support/real_time/connected_client.rb +9 -3
- data/spec/support/real_time/event.rb +1 -0
- data/spec/support/token.rb +1 -0
- data/spec/support/vcr.rb +5 -0
- metadata +190 -46
- 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 -136
- data/lib/slack/real_time/concurrency/eventmachine.rb +0 -82
- 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 -15
- data/screenshots/register-bot.png +0 -0
- data/spec/slack/real_time/concurrency/celluloid_spec.rb +0 -111
- data/spec/slack/real_time/concurrency/eventmachine_spec.rb +0 -49
- data/spec/slack/web/api/errors/service_unavailable_spec.rb +0 -14
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,7 +7,8 @@ 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 = {})
|
|
@@ -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,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Slack
|
|
2
3
|
module RealTime
|
|
3
4
|
module Api
|
|
@@ -6,7 +7,8 @@ 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
|
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
|
12
14
|
send_json({ type: 'typing', id: next_id }.merge(options))
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Slack
|
|
2
3
|
module RealTime
|
|
3
4
|
class Client
|
|
@@ -19,7 +20,6 @@ module Slack
|
|
|
19
20
|
attr_accessor :store
|
|
20
21
|
attr_accessor :url
|
|
21
22
|
attr_accessor(*Config::ATTRIBUTES)
|
|
22
|
-
attr_accessor :logger
|
|
23
23
|
|
|
24
24
|
protected :store_class, :store_class=
|
|
25
25
|
|
|
@@ -35,7 +35,7 @@ module Slack
|
|
|
35
35
|
|
|
36
36
|
%i[users self channels team teams groups ims bots].each do |store_method|
|
|
37
37
|
define_method store_method do
|
|
38
|
-
store
|
|
38
|
+
store&.send(store_method)
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
|
|
@@ -62,11 +62,11 @@ module Slack
|
|
|
62
62
|
def stop!
|
|
63
63
|
raise ClientNotStartedError unless started?
|
|
64
64
|
|
|
65
|
-
@socket
|
|
65
|
+
@socket&.disconnect!
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
def started?
|
|
69
|
-
@socket
|
|
69
|
+
@socket&.connected?
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
class << self
|
|
@@ -83,7 +83,7 @@ module Slack
|
|
|
83
83
|
@socket.connect! do |driver|
|
|
84
84
|
driver.on :open do |event|
|
|
85
85
|
logger.debug("#{self}##{__method__}") { event.class.name }
|
|
86
|
-
|
|
86
|
+
open_event(event)
|
|
87
87
|
callback(event, :open)
|
|
88
88
|
end
|
|
89
89
|
|
|
@@ -100,7 +100,7 @@ module Slack
|
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
# This must be called last to ensure any events are registered before invoking user code.
|
|
103
|
-
@callback
|
|
103
|
+
@callback&.call(driver)
|
|
104
104
|
end
|
|
105
105
|
end
|
|
106
106
|
|
|
@@ -130,13 +130,21 @@ module Slack
|
|
|
130
130
|
logger.warn(to_s) { 'is offline' }
|
|
131
131
|
|
|
132
132
|
restart_async
|
|
133
|
+
rescue Slack::Web::Api::Errors::SlackError => e
|
|
134
|
+
# stop pinging if bot was uninstalled
|
|
135
|
+
case e.message
|
|
136
|
+
when 'account_inactive', 'invalid_auth' then
|
|
137
|
+
logger.warn(to_s) { e.message }
|
|
138
|
+
raise e
|
|
139
|
+
end
|
|
140
|
+
logger.debug("#{self}##{__method__}") { e }
|
|
133
141
|
rescue StandardError => e
|
|
134
142
|
# disregard all ping worker failures, keep pinging
|
|
135
143
|
logger.debug("#{self}##{__method__}") { e }
|
|
136
144
|
end
|
|
137
145
|
|
|
138
146
|
def run_ping?
|
|
139
|
-
!websocket_ping.nil? && websocket_ping
|
|
147
|
+
!websocket_ping.nil? && websocket_ping.positive?
|
|
140
148
|
end
|
|
141
149
|
|
|
142
150
|
def websocket_ping_timer
|
|
@@ -144,7 +152,7 @@ module Slack
|
|
|
144
152
|
end
|
|
145
153
|
|
|
146
154
|
def to_s
|
|
147
|
-
if store
|
|
155
|
+
if store&.team
|
|
148
156
|
"id=#{store.team.id}, name=#{store.team.name}, domain=#{store.team.domain}"
|
|
149
157
|
else
|
|
150
158
|
super
|
|
@@ -204,7 +212,7 @@ module Slack
|
|
|
204
212
|
@socket.send_data(data.to_json)
|
|
205
213
|
end
|
|
206
214
|
|
|
207
|
-
def
|
|
215
|
+
def open_event(_event); end
|
|
208
216
|
|
|
209
217
|
def close(_event)
|
|
210
218
|
[@socket, socket_class].each do |s|
|
|
@@ -242,11 +250,11 @@ module Slack
|
|
|
242
250
|
end
|
|
243
251
|
|
|
244
252
|
def run_handlers(type, data)
|
|
253
|
+
return unless store.class.events
|
|
254
|
+
|
|
245
255
|
handlers = store.class.events[type.to_s]
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
store.instance_exec(data, &handler)
|
|
249
|
-
end
|
|
256
|
+
handlers&.each do |handler|
|
|
257
|
+
store.instance_exec(data, &handler)
|
|
250
258
|
end
|
|
251
259
|
rescue StandardError => e
|
|
252
260
|
logger.error("#{self}##{__method__}") { e }
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Slack
|
|
2
3
|
module RealTime
|
|
3
4
|
module Concurrency
|
|
4
5
|
autoload :Async, 'slack/real_time/concurrency/async'
|
|
5
|
-
autoload :Eventmachine, 'slack/real_time/concurrency/eventmachine'
|
|
6
|
-
autoload :Celluloid, 'slack/real_time/concurrency/celluloid'
|
|
7
6
|
end
|
|
8
7
|
end
|
|
9
8
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'async/websocket'
|
|
2
3
|
require 'async/notification'
|
|
3
4
|
require 'async/clock'
|
|
@@ -41,7 +42,7 @@ module Slack
|
|
|
41
42
|
end
|
|
42
43
|
|
|
43
44
|
while @restart
|
|
44
|
-
@client_task
|
|
45
|
+
@client_task&.stop
|
|
45
46
|
|
|
46
47
|
@client_task = task.async do |subtask|
|
|
47
48
|
begin
|
|
@@ -57,7 +58,7 @@ module Slack
|
|
|
57
58
|
@restart.wait
|
|
58
59
|
end
|
|
59
60
|
|
|
60
|
-
@ping_task
|
|
61
|
+
@ping_task&.stop
|
|
61
62
|
end
|
|
62
63
|
end
|
|
63
64
|
|
|
@@ -65,7 +66,7 @@ module Slack
|
|
|
65
66
|
@url = new_url
|
|
66
67
|
@last_message_at = current_time
|
|
67
68
|
|
|
68
|
-
@restart
|
|
69
|
+
@restart&.signal
|
|
69
70
|
end
|
|
70
71
|
|
|
71
72
|
def current_time
|
|
@@ -81,7 +82,7 @@ module Slack
|
|
|
81
82
|
def disconnect!
|
|
82
83
|
super
|
|
83
84
|
ensure
|
|
84
|
-
if restart = @restart
|
|
85
|
+
if (restart = @restart)
|
|
85
86
|
@restart = nil
|
|
86
87
|
restart.signal
|
|
87
88
|
end
|
|
@@ -98,7 +99,7 @@ module Slack
|
|
|
98
99
|
end
|
|
99
100
|
|
|
100
101
|
def run_loop
|
|
101
|
-
while @driver
|
|
102
|
+
while @driver&.next_event
|
|
102
103
|
# $stderr.puts event.inspect
|
|
103
104
|
end
|
|
104
105
|
end
|
|
@@ -131,4 +132,9 @@ module Slack
|
|
|
131
132
|
end
|
|
132
133
|
end
|
|
133
134
|
|
|
134
|
-
|
|
135
|
+
if Gem::Version.new(Async::WebSocket::VERSION) >= Gem::Version.new('0.9.0')
|
|
136
|
+
raise(
|
|
137
|
+
"Incompatible version of async-websocket, #{Async::WebSocket::VERSION}, " \
|
|
138
|
+
"use \"gem 'async-websocket', '~> 0.8.0'\"."
|
|
139
|
+
)
|
|
140
|
+
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Slack
|
|
2
3
|
module RealTime
|
|
3
4
|
module Config
|
|
@@ -16,7 +17,8 @@ module Slack
|
|
|
16
17
|
logger
|
|
17
18
|
].freeze
|
|
18
19
|
|
|
19
|
-
attr_accessor(*Config::ATTRIBUTES)
|
|
20
|
+
attr_accessor(*Config::ATTRIBUTES - [:concurrency])
|
|
21
|
+
attr_writer :concurrency
|
|
20
22
|
|
|
21
23
|
def reset
|
|
22
24
|
self.websocket_ping = 30
|
|
@@ -36,7 +38,7 @@ module Slack
|
|
|
36
38
|
private
|
|
37
39
|
|
|
38
40
|
def detect_concurrency
|
|
39
|
-
%i[Async
|
|
41
|
+
%i[Async].each do |concurrency|
|
|
40
42
|
begin
|
|
41
43
|
return Slack::RealTime::Concurrency.const_get(concurrency)
|
|
42
44
|
rescue LoadError, NameError
|
|
@@ -44,7 +46,11 @@ module Slack
|
|
|
44
46
|
end
|
|
45
47
|
end
|
|
46
48
|
|
|
47
|
-
raise
|
|
49
|
+
raise(
|
|
50
|
+
NoConcurrencyError,
|
|
51
|
+
'Missing concurrency. Add async-websocket or faye-websocket ' \
|
|
52
|
+
'to your Gemfile.'
|
|
53
|
+
)
|
|
48
54
|
end
|
|
49
55
|
end
|
|
50
56
|
|
|
@@ -1,17 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Slack
|
|
2
3
|
module RealTime
|
|
3
4
|
class Socket
|
|
4
5
|
attr_accessor :url
|
|
5
6
|
attr_accessor :options
|
|
6
7
|
attr_reader :driver
|
|
7
|
-
attr_reader :logger
|
|
8
|
-
protected :logger
|
|
9
8
|
|
|
10
9
|
def initialize(url, options = {})
|
|
11
10
|
@url = url
|
|
12
|
-
@options = options
|
|
11
|
+
@options = options.dup
|
|
13
12
|
@driver = nil
|
|
14
|
-
@logger = options.delete(:logger) || Slack::RealTime::Config.logger || Slack::Config.logger
|
|
13
|
+
@logger = @options.delete(:logger) || Slack::RealTime::Config.logger || Slack::Config.logger
|
|
15
14
|
@last_message_at = nil
|
|
16
15
|
end
|
|
17
16
|
|
|
@@ -51,9 +50,9 @@ module Slack
|
|
|
51
50
|
|
|
52
51
|
def start_sync(client)
|
|
53
52
|
thread = start_async(client)
|
|
54
|
-
thread
|
|
53
|
+
thread&.join
|
|
55
54
|
rescue Interrupt
|
|
56
|
-
thread
|
|
55
|
+
thread&.exit
|
|
57
56
|
end
|
|
58
57
|
|
|
59
58
|
# @return [#join]
|
|
@@ -76,15 +75,19 @@ module Slack
|
|
|
76
75
|
end
|
|
77
76
|
|
|
78
77
|
def close
|
|
79
|
-
# When you call `driver.emit(:close)`, it will typically end up calling `client.close`
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
78
|
+
# When you call `driver.emit(:close)`, it will typically end up calling `client.close`
|
|
79
|
+
# which will call `@socket.close` and end up back here. In order to break this infinite
|
|
80
|
+
# recursion, we check and set `@driver = nil` before invoking `client.close`.
|
|
81
|
+
return unless (driver = @driver)
|
|
82
|
+
|
|
83
|
+
@driver = nil
|
|
84
|
+
driver.emit(:close)
|
|
84
85
|
end
|
|
85
86
|
|
|
86
87
|
protected
|
|
87
88
|
|
|
89
|
+
attr_reader :logger
|
|
90
|
+
|
|
88
91
|
def addr
|
|
89
92
|
URI(url).host
|
|
90
93
|
end
|
|
@@ -95,9 +98,9 @@ module Slack
|
|
|
95
98
|
|
|
96
99
|
def port
|
|
97
100
|
case (uri = URI(url)).scheme
|
|
98
|
-
when 'wss'
|
|
101
|
+
when 'wss', 'https'
|
|
99
102
|
URI::HTTPS::DEFAULT_PORT
|
|
100
|
-
when 'ws', 'http'
|
|
103
|
+
when 'ws', 'http'
|
|
101
104
|
URI::HTTP::DEFAULT_PORT
|
|
102
105
|
else
|
|
103
106
|
uri.port
|