slack-ruby-bot 0.11.2 → 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/.gitignore +3 -2
- data/.rubocop.yml +14 -1
- data/.rubocop_todo.yml +14 -42
- data/.travis.yml +11 -13
- data/CHANGELOG.md +39 -6
- data/CONTRIBUTING.md +5 -1
- data/DEPLOYMENT.md +63 -9
- data/Dangerfile +4 -0
- data/Gemfile +11 -7
- data/LICENSE.md +1 -1
- data/MIGRATION.md +13 -0
- data/README.md +133 -65
- data/Rakefile +2 -0
- data/TUTORIAL.md +23 -0
- data/UPGRADING.md +50 -0
- data/examples/inventory/Gemfile +2 -0
- data/examples/inventory/inventorybot.rb +5 -1
- data/examples/market/Gemfile +4 -3
- data/examples/market/marketbot.rb +22 -15
- data/examples/minimal/Gemfile +3 -1
- data/examples/minimal/pongbot.rb +2 -0
- data/examples/weather/Gemfile +2 -0
- data/examples/weather/weatherbot.rb +2 -0
- data/lib/config/application.rb +4 -2
- data/lib/config/boot.rb +2 -0
- data/lib/config/environment.rb +3 -1
- data/lib/slack-ruby-bot.rb +3 -1
- data/lib/slack-ruby-bot/about.rb +3 -1
- data/lib/slack-ruby-bot/app.rb +18 -12
- data/lib/slack-ruby-bot/bot.rb +3 -1
- data/lib/slack-ruby-bot/client.rb +25 -23
- data/lib/slack-ruby-bot/commands.rb +2 -0
- data/lib/slack-ruby-bot/commands/about.rb +3 -1
- data/lib/slack-ruby-bot/commands/base.rb +13 -21
- data/lib/slack-ruby-bot/commands/help.rb +10 -8
- data/lib/slack-ruby-bot/commands/hi.rb +3 -1
- data/lib/slack-ruby-bot/commands/support/attrs.rb +2 -0
- data/lib/slack-ruby-bot/commands/support/help.rb +4 -0
- data/lib/slack-ruby-bot/commands/support/match.rb +4 -3
- data/lib/slack-ruby-bot/commands/unknown.rb +3 -1
- data/lib/slack-ruby-bot/config.rb +7 -7
- data/lib/slack-ruby-bot/hooks.rb +2 -0
- data/lib/slack-ruby-bot/hooks/hello.rb +22 -3
- data/lib/slack-ruby-bot/hooks/hook_support.rb +2 -6
- data/lib/slack-ruby-bot/hooks/message.rb +11 -10
- data/lib/slack-ruby-bot/hooks/set.rb +3 -1
- data/lib/slack-ruby-bot/mvc.rb +2 -0
- data/lib/slack-ruby-bot/mvc/controller/base.rb +4 -3
- data/lib/slack-ruby-bot/mvc/model/base.rb +2 -0
- data/lib/slack-ruby-bot/mvc/mvc.rb +2 -0
- data/lib/slack-ruby-bot/mvc/view/base.rb +2 -0
- data/lib/slack-ruby-bot/rspec.rb +3 -1
- data/lib/slack-ruby-bot/rspec/support/bots_for_tests.rb +2 -0
- data/lib/slack-ruby-bot/rspec/support/slack-ruby-bot/it_behaves_like_a_slack_bot.rb +4 -1
- data/lib/slack-ruby-bot/rspec/support/slack-ruby-bot/not_respond.rb +3 -5
- data/lib/slack-ruby-bot/rspec/support/slack-ruby-bot/respond_with_error.rb +3 -7
- data/lib/slack-ruby-bot/rspec/support/slack-ruby-bot/respond_with_slack_message.rb +15 -14
- data/lib/slack-ruby-bot/rspec/support/slack-ruby-bot/respond_with_slack_messages.rb +26 -19
- data/lib/slack-ruby-bot/rspec/support/slack-ruby-bot/start_typing.rb +32 -0
- data/lib/slack-ruby-bot/rspec/support/slack_api_key.rb +3 -1
- data/lib/slack-ruby-bot/rspec/support/slack_ruby_bot_configure.rb +2 -0
- data/lib/slack-ruby-bot/rspec/support/spec_helpers.rb +2 -0
- data/lib/slack-ruby-bot/server.rb +5 -28
- data/lib/slack-ruby-bot/support/loggable.rb +2 -0
- data/lib/slack-ruby-bot/version.rb +3 -1
- data/lib/slack_ruby_bot.rb +2 -0
- data/screenshots/create-classic-app.png +0 -0
- data/slack-ruby-bot.gemspec +6 -3
- data/spec/slack-ruby-bot/app_spec.rb +64 -1
- data/spec/slack-ruby-bot/client_spec.rb +103 -28
- data/spec/slack-ruby-bot/commands/about_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/aliases_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/attachment_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/bot_message_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/bot_messages_spec.rb +26 -0
- data/spec/slack-ruby-bot/commands/bot_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_command_classes_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_permitted_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_precedence_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_regexp_escape_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_regexp_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_spaces_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_with_block_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/commands_with_expression_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/direct_messages_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/empty_text_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/help_spec.rb +15 -13
- data/spec/slack-ruby-bot/commands/hi_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/match_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/message_loop_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/nil_message_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/non_breaking_space_spec.rb +29 -0
- data/spec/slack-ruby-bot/commands/not_implemented_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/operators_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/operators_with_block_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/scan_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/send_message_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/support/attrs_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/support/help_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/support/match_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/unknown_spec.rb +2 -0
- data/spec/slack-ruby-bot/config_spec.rb +2 -57
- data/spec/slack-ruby-bot/hooks/hello_spec.rb +51 -0
- data/spec/slack-ruby-bot/hooks/hook_support_spec.rb +2 -5
- data/spec/slack-ruby-bot/hooks/message_spec.rb +8 -35
- data/spec/slack-ruby-bot/hooks/set_spec.rb +2 -0
- data/spec/slack-ruby-bot/mvc/controller/controller_to_command_spec.rb +2 -0
- data/spec/slack-ruby-bot/rspec/respond_with_error_spec.rb +2 -0
- data/spec/slack-ruby-bot/rspec/respond_with_slack_message_spec.rb +20 -0
- data/spec/slack-ruby-bot/rspec/respond_with_slack_messages_spec.rb +36 -0
- data/spec/slack-ruby-bot/rspec/start_typing_spec.rb +36 -0
- data/spec/slack-ruby-bot/server_spec.rb +6 -33
- data/spec/slack-ruby-bot/support/loggable_spec.rb +2 -0
- data/spec/slack-ruby-bot/version_spec.rb +2 -0
- data/spec/spec_helper.rb +3 -6
- data/{lib/slack-ruby-bot/rspec → spec}/support/fixtures/slack/migration_in_progress.yml +0 -0
- data/{lib/slack-ruby-bot/rspec → spec}/support/vcr.rb +2 -0
- metadata +28 -29
- data/lib/initializers/giphy.rb +0 -8
- data/lib/initializers/giphy_client.rb +0 -39
- data/lib/slack-ruby-bot/rspec/support/fixtures/slack/giphy_burrito.yml +0 -69
- data/lib/slack-ruby-bot/rspec/support/fixtures/slack/giphy_client_burrito.yml +0 -71
- data/lib/slack-ruby-bot/rspec/support/fixtures/slack/giphy_client_burrito_rated_y.yml +0 -71
- data/screenshots/register-bot.png +0 -0
- data/spec/slack-ruby-bot/commands/send_gif_spec.rb +0 -25
- data/spec/slack-ruby-bot/commands/send_message_with_gif_spec.rb +0 -38
- data/spec/slack-ruby-bot/initializers/giphy_client_spec.rb +0 -28
- data/spec/slack-ruby-bot/initializers/giphy_spec.rb +0 -18
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9684c9f89d4dfb8fa0b6d57c65392979f40a6371bac3021d427f662e0a4c64db
|
|
4
|
+
data.tar.gz: 67d12056a667d6670b9f3f90c1df15f9e437a87b11a5aa438616bb3774d27b89
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a702d1e2016adf8903fa0283201e51e572663e0bafa8fd2b4ffa255764ce99779022bc653ed8dbc5888490521c6d9ebe8b24774084afb056526c62d9c4b3507c
|
|
7
|
+
data.tar.gz: d05e13f9c714eb5c97e1257e775126a42579cd5f41181e285aa79df54ceb0175f6138a056c4c7a89160e5ff53fa13fa53fff02a7d2f507c9c05fea0d9ef958f2
|
data/.github/FUNDING.yml
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
github: [dblock]
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
AllCops:
|
|
2
|
+
TargetRubyVersion: 2.3
|
|
2
3
|
Exclude:
|
|
3
4
|
- vendor/**/*
|
|
4
5
|
- examples/**/vendor/**/*
|
|
@@ -7,10 +8,22 @@ AllCops:
|
|
|
7
8
|
Metrics:
|
|
8
9
|
Enabled: false
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
Layout/LineLength:
|
|
11
12
|
Max: 512
|
|
12
13
|
|
|
13
14
|
Style/Documentation:
|
|
14
15
|
Enabled: false
|
|
15
16
|
|
|
17
|
+
Style/HashEachMethods:
|
|
18
|
+
Enabled: true
|
|
19
|
+
|
|
20
|
+
Style/HashTransformKeys:
|
|
21
|
+
Enabled: true
|
|
22
|
+
|
|
23
|
+
Style/HashTransformValues:
|
|
24
|
+
Enabled: true
|
|
25
|
+
|
|
26
|
+
Style/ModuleFunction:
|
|
27
|
+
Enabled: false
|
|
28
|
+
|
|
16
29
|
inherit_from: .rubocop_todo.yml
|
data/.rubocop_todo.yml
CHANGED
|
@@ -1,36 +1,22 @@
|
|
|
1
1
|
# This configuration was generated by
|
|
2
2
|
# `rubocop --auto-gen-config`
|
|
3
|
-
# on
|
|
3
|
+
# on 2020-06-27 10:38:47 -0400 using RuboCop version 0.80.1.
|
|
4
4
|
# The point is for the user to remove these configuration records
|
|
5
5
|
# one by one as the offenses are removed from the code base.
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
|
8
8
|
|
|
9
|
-
# Offense count: 2
|
|
10
|
-
# Cop supports --auto-correct.
|
|
11
|
-
# Configuration parameters: EnforcedStyle.
|
|
12
|
-
# SupportedStyles: auto_detection, squiggly, active_support, powerpack, unindent
|
|
13
|
-
Layout/IndentHeredoc:
|
|
14
|
-
Exclude:
|
|
15
|
-
- 'lib/slack-ruby-bot/commands/help.rb'
|
|
16
|
-
- 'spec/slack-ruby-bot/commands/help_spec.rb'
|
|
17
|
-
|
|
18
9
|
# Offense count: 1
|
|
19
10
|
Lint/DuplicateMethods:
|
|
20
11
|
Exclude:
|
|
21
12
|
- 'lib/slack-ruby-bot/hooks/set.rb'
|
|
22
13
|
|
|
23
|
-
# Offense count: 2
|
|
24
|
-
Lint/HandleExceptions:
|
|
25
|
-
Exclude:
|
|
26
|
-
- 'lib/initializers/giphy.rb'
|
|
27
|
-
- 'lib/initializers/giphy_client.rb'
|
|
28
|
-
|
|
29
14
|
# Offense count: 1
|
|
30
|
-
#
|
|
31
|
-
|
|
15
|
+
# Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
|
|
16
|
+
# AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
|
|
17
|
+
Naming/FileName:
|
|
32
18
|
Exclude:
|
|
33
|
-
- '
|
|
19
|
+
- 'lib/slack-ruby-bot.rb'
|
|
34
20
|
|
|
35
21
|
# Offense count: 2
|
|
36
22
|
# Configuration parameters: EnforcedStyle.
|
|
@@ -46,32 +32,18 @@ Style/AccessModifierDeclarations:
|
|
|
46
32
|
Exclude:
|
|
47
33
|
- 'lib/slack-ruby-bot/hooks/hook_support.rb'
|
|
48
34
|
|
|
49
|
-
# Offense count:
|
|
35
|
+
# Offense count: 5
|
|
50
36
|
Style/DoubleNegation:
|
|
51
37
|
Exclude:
|
|
38
|
+
- 'lib/slack-ruby-bot/client.rb'
|
|
52
39
|
- 'lib/slack-ruby-bot/commands/base.rb'
|
|
40
|
+
- 'lib/slack-ruby-bot/config.rb'
|
|
53
41
|
|
|
54
|
-
# Offense count:
|
|
55
|
-
# Cop supports --auto-correct.
|
|
56
|
-
Style/ExpandPathArguments:
|
|
57
|
-
Exclude:
|
|
58
|
-
- 'lib/config/application.rb'
|
|
59
|
-
- 'lib/config/environment.rb'
|
|
60
|
-
- 'lib/slack-ruby-bot.rb'
|
|
61
|
-
- 'slack-ruby-bot.gemspec'
|
|
62
|
-
|
|
63
|
-
# Offense count: 2
|
|
64
|
-
# Cop supports --auto-correct.
|
|
65
|
-
Style/IfUnlessModifier:
|
|
66
|
-
Exclude:
|
|
67
|
-
- 'lib/slack-ruby-bot/commands/support/match.rb'
|
|
68
|
-
- 'lib/slack-ruby-bot/mvc/controller/base.rb'
|
|
69
|
-
|
|
70
|
-
# Offense count: 2
|
|
42
|
+
# Offense count: 1
|
|
71
43
|
# Cop supports --auto-correct.
|
|
72
|
-
# Configuration parameters: EnforcedStyle.
|
|
73
|
-
# SupportedStyles:
|
|
74
|
-
Style/
|
|
44
|
+
# Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods.
|
|
45
|
+
# SupportedStyles: predicate, comparison
|
|
46
|
+
Style/NumericPredicate:
|
|
75
47
|
Exclude:
|
|
76
|
-
- '
|
|
77
|
-
- '
|
|
48
|
+
- 'spec/**/*'
|
|
49
|
+
- 'examples/market/marketbot.rb'
|
data/.travis.yml
CHANGED
|
@@ -4,23 +4,21 @@ cache: bundler
|
|
|
4
4
|
|
|
5
5
|
matrix:
|
|
6
6
|
include:
|
|
7
|
-
- rvm: 2.
|
|
7
|
+
- rvm: 2.6.5
|
|
8
8
|
script:
|
|
9
9
|
- bundle exec danger
|
|
10
|
-
- rvm: 2.
|
|
10
|
+
- rvm: 2.4.0
|
|
11
11
|
env: CONCURRENCY=celluloid-io
|
|
12
|
-
- rvm: 2.
|
|
12
|
+
- rvm: 2.4.0
|
|
13
13
|
env: CONCURRENCY=faye-websocket
|
|
14
|
-
- rvm: 2.
|
|
15
|
-
env: CONCURRENCY=
|
|
16
|
-
- rvm: 2.
|
|
17
|
-
env: CONCURRENCY=
|
|
18
|
-
- rvm: 2.
|
|
19
|
-
env: CONCURRENCY=
|
|
20
|
-
- rvm: 2.
|
|
21
|
-
env: CONCURRENCY=
|
|
22
|
-
- rvm: 2.5
|
|
23
|
-
env: CONCURRENCY=async-websocket WITH_GIPHY_CLIENT=true
|
|
14
|
+
- rvm: 2.4.0
|
|
15
|
+
env: CONCURRENCY=async-websocket
|
|
16
|
+
- rvm: 2.6.5
|
|
17
|
+
env: CONCURRENCY=celluloid-io
|
|
18
|
+
- rvm: 2.6.5
|
|
19
|
+
env: CONCURRENCY=faye-websocket
|
|
20
|
+
- rvm: 2.6.5
|
|
21
|
+
env: CONCURRENCY=async-websocket
|
|
24
22
|
- rvm: ruby-head
|
|
25
23
|
- rvm: jruby-head
|
|
26
24
|
allow_failures:
|
data/CHANGELOG.md
CHANGED
|
@@ -1,14 +1,47 @@
|
|
|
1
|
-
### 0.
|
|
1
|
+
### 0.16.0 (2020/7/26)
|
|
2
|
+
|
|
3
|
+
* [#263](https://github.com/slack-ruby/slack-ruby-bot/pull/263): Removed Giphy support - [@dblock](https://github.com/dblock).
|
|
4
|
+
* [#260](https://github.com/slack-ruby/slack-ruby-bot/pull/260): Added a brief migration guide - [@wasabigeek](https://github.com/wasabigeek).
|
|
5
|
+
* [#264](https://github.com/slack-ruby/slack-ruby-bot/pull/264): Added TOC to README - [@dblock](https://github.com/dblock).
|
|
6
|
+
* [#265](https://github.com/slack-ruby/slack-ruby-bot/pull/265): Made `allow_bot_messages` and `allow_message_loops` available in `SlackRubyBot::Client` - [@dblock](https://github.com/dblock).
|
|
7
|
+
* [#266](https://github.com/slack-ruby/slack-ruby-bot/pull/266): Removed deprecated `Server#hooks` - [@dblock](https://github.com/dblock).
|
|
8
|
+
* [#267](https://github.com/slack-ruby/slack-ruby-bot/pull/267): Require Faraday >= 1.0 - [@dblock](https://github.com/dblock).
|
|
9
|
+
|
|
10
|
+
### 0.15.0 (2020/5/8)
|
|
11
|
+
|
|
12
|
+
* [#258](https://github.com/slack-ruby/slack-ruby-bot/pull/258): Extract development dependencies (VCR) from shared rspec configuraion - [@dikond](https://github.com/dikond).
|
|
13
|
+
* [#256](https://github.com/slack-ruby/slack-ruby-bot/pull/256): Allow command matcher to receive no-break spaces as regular spaces - [@MichaelM-Shopify](https://github.com/MichaelM-Shopify), [@dblock](https://github.com/dblock).
|
|
14
|
+
* [#254](https://github.com/slack-ruby/slack-ruby-bot/pull/254): Allow setting of `config.token` and `config.aliases` in initializer - [@wasabigeek](https://github.com/wasabigeek).
|
|
15
|
+
* [#253](https://github.com/slack-ruby/slack-ruby-bot/pull/253): Remove reference to unsupported Giphy content rating - [@wasabigeek](https://github.com/wasabigeek).
|
|
16
|
+
|
|
17
|
+
### 0.14.0 (2020/4/2)
|
|
18
|
+
|
|
19
|
+
* [#250](https://github.com/slack-ruby/slack-ruby-bot/pull/250): Added `config.allow_bot_messages`, defaults to `false` - [@dblock](https://github.com/dblock).
|
|
20
|
+
|
|
21
|
+
### 0.13.0 (2020/3/28)
|
|
22
|
+
|
|
23
|
+
* [#244](https://github.com/slack-ruby/slack-ruby-bot/pull/244): Change log message when the bot is reconnected - [@wasabigeek](https://github.com/wasabigeek).
|
|
24
|
+
* [#209](https://github.com/slack-ruby/slack-ruby-bot/pull/209): Allow `respond_to_slack_message` and `respond_to_slack_messages` without arguments - [@dblock](https://github.com/dblock).
|
|
25
|
+
* [#216](https://github.com/slack-ruby/slack-ruby-bot/pull/216): Added `start_typing` RSpec matcher - [@dblock](https://github.com/dblock).
|
|
26
|
+
* [#214](https://github.com/slack-ruby/slack-ruby-bot/pull/214): Add passenger deployment documentation - [@cybercrediators](https://github.com/cybercrediators).
|
|
27
|
+
* [#220](https://github.com/slack-ruby/slack-ruby-bot/pull/220): Updated examples/market to pull from IEX instead of defunct yahoo service - [@corprew](https://github.com/corprew).
|
|
28
|
+
* [#246](https://github.com/slack-ruby/slack-ruby-bot/pull/246): Drop support for Ruby 2.2 - [@dblock](https://github.com/dblock).
|
|
29
|
+
|
|
30
|
+
### 0.12.0 (2019/2/25)
|
|
31
|
+
|
|
32
|
+
* [#203](https://github.com/slack-ruby/slack-ruby-bot/pull/203): Removing restart logic - [@RodneyU215](https://github.com/RodneyU215).
|
|
33
|
+
|
|
34
|
+
### 0.11.2 (2018/12/1)
|
|
2
35
|
|
|
3
36
|
* [#198](https://github.com/slack-ruby/slack-ruby-bot/pull/198): Recommend using `async-websocket` instead of `celluloid-io` - [@dblock](https://github.com/dblock).
|
|
4
37
|
* [#202](https://github.com/slack-ruby/slack-ruby-bot/pull/202): Allow frozen string in Hooks::Message - [@jonosenior](https://github.com/jonosenior).
|
|
5
38
|
|
|
6
|
-
### 0.11.1 (2018/
|
|
39
|
+
### 0.11.1 (2018/5/6)
|
|
7
40
|
|
|
8
41
|
* [#187](https://github.com/slack-ruby/slack-ruby-bot/pull/187): Added support for the [official Giphy SDK](https://github.com/Giphy/giphy-ruby-client) - [@dblock](https://github.com/dblock).
|
|
9
42
|
* [#185](https://github.com/slack-ruby/slack-ruby-bot/pull/185): Log backtrace of exceptions - [@dblock](https://github.com/dblock).
|
|
10
43
|
|
|
11
|
-
### 0.11.0 (2018/
|
|
44
|
+
### 0.11.0 (2018/4/2)
|
|
12
45
|
|
|
13
46
|
* [#182](https://github.com/slack-ruby/slack-ruby-bot/pull/182): Refactor CommandsHelper class and Help module - [@mdudzinski](https://github.com/mdudzinski).
|
|
14
47
|
* [#180](https://github.com/slack-ruby/slack-ruby-bot/pull/180): Allow to respond to text in attachments #177 - [@mdudzinski](https://github.com/mdudzinski).
|
|
@@ -24,18 +57,18 @@
|
|
|
24
57
|
* [#163](https://github.com/slack-ruby/slack-ruby-bot/pull/163): Allow `command` to accept regular expressions - [@kstole](https://github.com/kstole).
|
|
25
58
|
* [#166](https://github.com/slack-ruby/slack-ruby-bot/pull/166): Allow special characters and capitals in bot aliases - [@kstole](https://github.com/kstole).
|
|
26
59
|
|
|
27
|
-
### 0.10.4 (2017/
|
|
60
|
+
### 0.10.4 (2017/7/5)
|
|
28
61
|
|
|
29
62
|
* [#149](https://github.com/slack-ruby/slack-ruby-bot/pull/149): Add `logger` configuration to set a custom logger - [@upscent](https://github.com/upscent).
|
|
30
63
|
* [#147](https://github.com/slack-ruby/slack-ruby-bot/pull/147): Adds `server.on` as a shortcut for `hooks.add` and deprecate `hooks` method - [@laertispappas](https://github.com/laertispappas).
|
|
31
64
|
* [#143](https://github.com/slack-ruby/slack-ruby-bot/pull/143): Provide `permitted?` method to allow for simple authorization extensions - [@chuckremes](https://github.com/chuckremes).
|
|
32
65
|
|
|
33
|
-
### 0.10.3 (2017/
|
|
66
|
+
### 0.10.3 (2017/6/15)
|
|
34
67
|
|
|
35
68
|
* [#145](https://github.com/slack-ruby/slack-ruby-bot/pull/145): Map multiple command strings to same controller method - [@chuckremes](https://github.com/chuckremes).
|
|
36
69
|
* [#144](https://github.com/slack-ruby/slack-ruby-bot/pull/144): Support usage of commands with embedded spaces when using Controller methods - [@chuckremes](https://github.com/chuckremes).
|
|
37
70
|
|
|
38
|
-
### 0.10.2 (2017/
|
|
71
|
+
### 0.10.2 (2017/6/3)
|
|
39
72
|
|
|
40
73
|
* [#137](https://github.com/slack-ruby/slack-ruby-bot/pull/137): Add Model-View-Controller classes to allow for more explicit control over how `command`s are designed - [@chuckremes](https://github.com/chuckremes).
|
|
41
74
|
* [#130](https://github.com/slack-ruby/slack-ruby-bot/issues/130): Added test dependencies in TUTORIAL.md - [@jbristow](https://github.com/jbristow).
|
data/CONTRIBUTING.md
CHANGED
|
@@ -18,13 +18,17 @@ git remote add upstream https://github.com/slack-ruby/slack-ruby-bot.git
|
|
|
18
18
|
|
|
19
19
|
## Bundle Install and Test
|
|
20
20
|
|
|
21
|
-
Ensure that you can build the project and run tests.
|
|
21
|
+
Ensure that you can build the project and run tests. Make sure you have set `CONCURRENCY` env variable to one of the following: `celluloid-io`, `faye-websocket` or `async-websocket`.
|
|
22
22
|
|
|
23
23
|
```
|
|
24
|
+
export CONCURRENCY=async-websocket
|
|
24
25
|
bundle install
|
|
25
26
|
bundle exec rake
|
|
26
27
|
```
|
|
27
28
|
|
|
29
|
+
Take a look at the [travis configuration](https://github.com/slack-ruby/slack-ruby-bot/blob/master/.travis.yml) for more details.
|
|
30
|
+
|
|
31
|
+
|
|
28
32
|
## Run SlackRubyBot in Development
|
|
29
33
|
|
|
30
34
|
Create a private slack group for yourself.
|
data/DEPLOYMENT.md
CHANGED
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
## Installation
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
To integrate your bot with Slack, you must first create a new [Classic Slack App](https://api.slack.com/authentication/migration#classic) and a [legacy bot](https://api.slack.com/legacy/custom-integrations/bot-users).
|
|
4
4
|
|
|
5
|
-

|
|
8
6
|
|
|
9
7
|
### Environment
|
|
10
8
|
|
|
9
|
+
#### OAuth Code Grant
|
|
10
|
+
|
|
11
|
+
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). A successful flow will result in the receipt of an API token for the specific team that is granting access.
|
|
12
|
+
|
|
13
|
+
Alternatively, 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.
|
|
14
|
+
|
|
15
|
+
If you have a legacy API token, and would like to migrate to [slack-ruby-bot-server](https://github.com/slack-ruby/slack-ruby-bot-server), a brief [migration guide](MIGRATION.md) is provided.
|
|
16
|
+
|
|
11
17
|
#### SLACK_API_TOKEN
|
|
12
18
|
|
|
13
|
-
Set SLACK_API_TOKEN
|
|
19
|
+
Set the SLACK_API_TOKEN environment variable using the token received above.
|
|
14
20
|
|
|
15
21
|
```
|
|
16
22
|
heroku config:add SLACK_API_TOKEN=...
|
|
17
23
|
```
|
|
18
24
|
|
|
19
|
-
#### GIPHY_API_KEY
|
|
20
|
-
|
|
21
|
-
The bot replies with animated GIFs. While it's currently not necessary, you may need to set GIPHY_API_KEY in the future, see [github.com/Giphy/GiphyAPI](https://github.com/Giphy/GiphyAPI) for details.
|
|
22
|
-
|
|
23
25
|
#### SLACK_RUBY_BOT_ALIASES
|
|
24
26
|
|
|
25
27
|
Optional names for this bot.
|
|
@@ -31,3 +33,55 @@ heroku config:add SLACK_RUBY_BOT_ALIASES=":pong: table-tennis ping-pong"
|
|
|
31
33
|
### Heroku Idling
|
|
32
34
|
|
|
33
35
|
Heroku free tier applications will idle. Either pay 7$ a month for the hobby dyno or use [UptimeRobot](http://uptimerobot.com) or similar to prevent your instance from sleeping or pay for a production dyno.
|
|
36
|
+
|
|
37
|
+
### Passenger Deployment
|
|
38
|
+
|
|
39
|
+
Deploying on your self-hosted server is fairly easy, it's pretty much following the [tutorial](https://www.phusionpassenger.com/library/walkthroughs/deploy/ruby), but there are some configuration details to pay attention to.
|
|
40
|
+
|
|
41
|
+
+ Change or add the `gem 'puma'` entry in your `Gemfile` to `gem 'passenger'` and `bundle` it
|
|
42
|
+
+ OPTIONAL: To use passenger for developing too, change the `Procfile` to `web: bundle exec passenger start`, to configure the local passenger you could provide an optional `Passenger.json` file ([configuration options](https://www.phusionpassenger.com/library/config/standalone/reference/))
|
|
43
|
+
+ If you want to keep your logs etc. in the correct folders, you could add empty `public/`, `tmp/` and `log` directories. Passenger e.g. will automatically use them for local log files.
|
|
44
|
+
+ Make sure, the right ruby version is [installed](https://www.phusionpassenger.com/library/walkthroughs/deploy/ruby/ownserver/nginx/oss/install_language_runtime.html) and your passenger is [ready](https://www.phusionpassenger.com/library/walkthroughs/deploy/ruby/ownserver/nginx/oss/install_passenger_main.html) to go.
|
|
45
|
+
+ Clone the repository on your server (You could create a separate user for this) and install the dependencies, by running `bundle install` ([More information](https://www.phusionpassenger.com/library/walkthroughs/deploy/ruby/ownserver/nginx/oss/xenial/deploy_app.html))
|
|
46
|
+
+ Edit the web-server configuration according to the examples below
|
|
47
|
+
+ `PassengerMaxPreloaderIdleTime 0` or `passenger_max_preloader_idle_time 0;` makes sure to not automatically shut down the process after 5 minutes
|
|
48
|
+
+ `PassengerPreStart http://url:port` or `passenger_pre_start http://url:port` will startup the application instantly, without the first HTTP GET-request needed for passenger
|
|
49
|
+
+ To get the `/path/to/ruby` run `passenger-config about ruby-command` and copy the displayed path
|
|
50
|
+
+ Check the config (`nginx -t`) and restart the server with `service nginx restart`
|
|
51
|
+
+ Execute `passenger-status --verbose` to check if your app is working correctly
|
|
52
|
+
+ Optional: restart the passenger app via `passenger-config restart-app /var/www/bot`
|
|
53
|
+
|
|
54
|
+
#### Nginx
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
server {
|
|
58
|
+
listen 80;
|
|
59
|
+
server_name example.com;
|
|
60
|
+
root /var/www/bot/public;
|
|
61
|
+
passenger_enabled on;
|
|
62
|
+
passenger_ruby /path/to/ruby
|
|
63
|
+
passenger_max_preloader_idle_time 0;
|
|
64
|
+
passenger_app_type rack;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
passenger_pre_start http://example.com:80/;
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
#### Apache
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
<VirtualHost *:80>
|
|
74
|
+
ServerName example.com
|
|
75
|
+
DocumentRoot /var/www/bot/public
|
|
76
|
+
PassengerRuby /path/to/ruby
|
|
77
|
+
PassengerMaxPreloaderIdleTime 0
|
|
78
|
+
|
|
79
|
+
<Directory /var/www/bot/public>
|
|
80
|
+
Allow from all
|
|
81
|
+
Options -MultiViews
|
|
82
|
+
Require all granted
|
|
83
|
+
</Directory>
|
|
84
|
+
</VirtualHost>
|
|
85
|
+
|
|
86
|
+
PassengerPreStart http://example.com:80/
|
|
87
|
+
```
|
data/Dangerfile
CHANGED
data/Gemfile
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
source 'http://rubygems.org'
|
|
2
4
|
|
|
3
5
|
gemspec
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
gem '
|
|
7
|
+
if ENV.key?('CONCURRENCY')
|
|
8
|
+
case ENV['CONCURRENCY']
|
|
9
|
+
when 'async-websocket'
|
|
10
|
+
gem 'async-websocket', '~> 0.8.0', require: false
|
|
11
|
+
else
|
|
12
|
+
gem ENV['CONCURRENCY'], require: false
|
|
13
|
+
end
|
|
14
|
+
end
|
|
11
15
|
|
|
12
16
|
group :test do
|
|
13
|
-
gem 'slack-ruby-danger', '~> 0.
|
|
17
|
+
gem 'slack-ruby-danger', '~> 0.2.0', require: false
|
|
14
18
|
end
|
data/LICENSE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2015-
|
|
3
|
+
Copyright (c) 2015-2020 Daniel Doubrovkine, Artsy and Contributors
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
6
|
a copy of this software and associated documentation files (the
|
data/MIGRATION.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Migrating from Legacy API Tokens
|
|
2
|
+
|
|
3
|
+
New Slack Apps require authentication via OAuth, returning an access token that should be a drop-in replacement for `SLACK_API_TOKEN`. As of the time of writing, the tokens never expire, so you could potentially write your own OAuth flow to retrieve the access token separately.
|
|
4
|
+
|
|
5
|
+
Alternatively, you could migrate to [slack-ruby-bot-server](https://github.com/slack-ruby/slack-ruby-bot-server). Note that this requires more infrastructure to support the OAuth flow.
|
|
6
|
+
|
|
7
|
+
## Migrating to slack-ruby-bot-server
|
|
8
|
+
1. Setup a new `slack-ruby-bot-server` project, following the [guidelines](https://github.com/slack-ruby/slack-ruby-bot-server#run-your-own).
|
|
9
|
+
2. Copy over the `SlackRubyBot::Commands::Base` or `SlackRubyBot::Bot` concrete classes from your `slack-ruby-bot` project into the new project. If you used a [sample app](https://github.com/slack-ruby/slack-ruby-bot-server/tree/master/sample_apps), copy them into the [`commands` folder](https://github.com/slack-ruby/slack-ruby-bot-server/tree/master/sample_apps/sample_app_activerecord/commands) and require it in `commands.rb`.
|
|
10
|
+
3. Create a [Slack Button](https://api.slack.com/docs/slack-button), setting the redirect URL to your OAuth grant endpoint. In the sample app, this would be `<ROOT_URL>/api/teams`.
|
|
11
|
+
4. Run your app and authenticate with the Slack button.
|
|
12
|
+
|
|
13
|
+
**NOTE**: By default, other teams would be able to authenticate and connect their workspaces using the same Slack button. If this is not what you want, you would need to prevent it.
|
data/README.md
CHANGED
|
@@ -11,6 +11,51 @@ If you are not familiar with Slack bots or Slack API concepts, you might want to
|
|
|
11
11
|
|
|
12
12
|

|
|
13
13
|
|
|
14
|
+
# Table of Contents
|
|
15
|
+
|
|
16
|
+
- [Useful to Me?](#useful-to-me)
|
|
17
|
+
- [Stable Release](#stable-release)
|
|
18
|
+
- [Usage](#usage)
|
|
19
|
+
- [A Minimal Bot](#a-minimal-bot)
|
|
20
|
+
- [Gemfile](#gemfile)
|
|
21
|
+
- [pongbot.rb](#pongbotrb)
|
|
22
|
+
- [A Production Bot](#a-production-bot)
|
|
23
|
+
- [More Involved Examples](#more-involved-examples)
|
|
24
|
+
- [Commands and Operators](#commands-and-operators)
|
|
25
|
+
- [Threaded Messages](#threaded-messages)
|
|
26
|
+
- [Bot Aliases](#bot-aliases)
|
|
27
|
+
- [Generic Routing](#generic-routing)
|
|
28
|
+
- [Matching text in message attachments](#matching-text-in-message-attachments)
|
|
29
|
+
- [Providing description for your bot and commands](#providing-description-for-your-bot-and-commands)
|
|
30
|
+
- [Customize your command help output](#customize-your-command-help-output)
|
|
31
|
+
- [SlackRubyBot::Commands::Base](#slackrubybotcommandsbase)
|
|
32
|
+
- [Authorization](#authorization)
|
|
33
|
+
- [Built-In Commands](#built-in-commands)
|
|
34
|
+
- [[bot name]](#bot-name)
|
|
35
|
+
- [[bot name] hi](#bot-name-hi)
|
|
36
|
+
- [[bot name] help](#bot-name-help)
|
|
37
|
+
- [Hooks](#hooks)
|
|
38
|
+
- [Implementing and registering a Hook Handler](#implementing-and-registering-a-hook-handler)
|
|
39
|
+
- [Hooks registration on SlackRubyBot::Server initialization](#hooks-registration-on-slackrubybotserver-initialization)
|
|
40
|
+
- [Hooks registration on a SlackRubyBot::Server instance](#hooks-registration-on-a-slackrubybotserver-instance)
|
|
41
|
+
- [Hooks registration on SlackRubyBot::Server class](#hooks-registration-on-slackrubybotserver-class)
|
|
42
|
+
- [Bot Message Protection](#bot-message-protection)
|
|
43
|
+
- [Message Loop Protection](#message-loop-protection)
|
|
44
|
+
- [Logging](#logging)
|
|
45
|
+
- [Advanced Integration](#advanced-integration)
|
|
46
|
+
- [Proxy Configuration](#proxy-configuration)
|
|
47
|
+
- [Model-View-Controller Design](#model-view-controller-design)
|
|
48
|
+
- [Controller](#controller)
|
|
49
|
+
- [Model](#model)
|
|
50
|
+
- [View](#view)
|
|
51
|
+
- [Testing](#testing)
|
|
52
|
+
- [RSpec Shared Behaviors](#rspec-shared-behaviors)
|
|
53
|
+
- [Testing Lower Level Messages](#testing-lower-level-messages)
|
|
54
|
+
- [Useful Libraries](#useful-libraries)
|
|
55
|
+
- [Contributing](#contributing)
|
|
56
|
+
- [Upgrading](#upgrading)
|
|
57
|
+
- [Copyright and License](#copyright-and-license)
|
|
58
|
+
|
|
14
59
|
## Useful to Me?
|
|
15
60
|
|
|
16
61
|
* If you are just trying to send messages to Slack, use [slack-ruby-client](https://github.com/slack-ruby/slack-ruby-client), which this library is built on top of.
|
|
@@ -19,7 +64,7 @@ If you are not familiar with Slack bots or Slack API concepts, you might want to
|
|
|
19
64
|
|
|
20
65
|
## Stable Release
|
|
21
66
|
|
|
22
|
-
You're reading the documentation for the **stable** release of slack-ruby-bot, v0.
|
|
67
|
+
You're reading the documentation for the **stable** release of slack-ruby-bot, v0.16.0.
|
|
23
68
|
See [CHANGELOG](CHANGELOG.md) for a history of changes and [UPGRADING](UPGRADING.md) for how to upgrade to more recent versions.
|
|
24
69
|
|
|
25
70
|
## Usage
|
|
@@ -32,7 +77,7 @@ See [CHANGELOG](CHANGELOG.md) for a history of changes and [UPGRADING](UPGRADING
|
|
|
32
77
|
source 'https://rubygems.org'
|
|
33
78
|
|
|
34
79
|
gem 'slack-ruby-bot'
|
|
35
|
-
gem '
|
|
80
|
+
gem 'async-websocket', '~>0.8.0'
|
|
36
81
|
```
|
|
37
82
|
|
|
38
83
|
#### pongbot.rb
|
|
@@ -83,7 +128,7 @@ end
|
|
|
83
128
|
|
|
84
129
|
Command match data includes `match['bot']`, `match['command']` and `match['expression']`. The `bot` match always checks against the `SlackRubyBot::Config.user` and `SlackRubyBot::Config.user_id` values obtained when the bot starts.
|
|
85
130
|
|
|
86
|
-
The `command` method can take strings, which will have be escaped with `Regexp.escape`, and regular expressions.
|
|
131
|
+
The `command` method can take strings, which will have to be escaped with `Regexp.escape`, and regular expressions.
|
|
87
132
|
|
|
88
133
|
```ruby
|
|
89
134
|
class CallBot < SlackRubyBot::Bot
|
|
@@ -141,11 +186,9 @@ SlackRubyBot.configure do |config|
|
|
|
141
186
|
end
|
|
142
187
|
```
|
|
143
188
|
|
|
144
|
-
This is particularly fun with emoji.
|
|
145
|
-
|
|
146
189
|

|
|
147
190
|
|
|
148
|
-
Bots also
|
|
191
|
+
Bots will also respond to a direct message, with or without the bot name in the message itself.
|
|
149
192
|
|
|
150
193
|

|
|
151
194
|
|
|
@@ -269,7 +312,7 @@ class Market < SlackRubyBot::Bot
|
|
|
269
312
|
command 'help' do |client, data, match|
|
|
270
313
|
user_command = match[:expression]
|
|
271
314
|
help_attrs = SlackRubyBot::Commands::Support::Help.instance.find_command_help_attrs(user_command)
|
|
272
|
-
client.say(channel: data.channel, text: "#{help_attrs.command_desc}\n\n#{help_attrs.command_long_desc}"
|
|
315
|
+
client.say(channel: data.channel, text: "#{help_attrs.command_desc}\n\n#{help_attrs.command_long_desc}")
|
|
273
316
|
end
|
|
274
317
|
end
|
|
275
318
|
```
|
|
@@ -320,47 +363,6 @@ class AuthorizedBot < SlackRubyBot::Commands::Base
|
|
|
320
363
|
end
|
|
321
364
|
```
|
|
322
365
|
|
|
323
|
-
### Animated GIFs
|
|
324
|
-
|
|
325
|
-
The `SlackRubyBot::Client` implementation comes with GIF support. To enable it add `gem GiphyClient` (official Giphy SDK) or `gem giphy` (older SDK, deprecated) to your **Gemfile** and set a Giphy key via `ENV['GIPHY_API_KEY']`. Obtain one from [developers.giphy.com](https://developers.giphy.com).
|
|
326
|
-
|
|
327
|
-
**Note:** Bots send animated GIFs in default commands and errors.
|
|
328
|
-
|
|
329
|
-
```ruby
|
|
330
|
-
class Phone < SlackRubyBot::Commands::Base
|
|
331
|
-
command 'call'
|
|
332
|
-
|
|
333
|
-
def self.call(client, data, match)
|
|
334
|
-
client.say(channel: data.channel, text: 'called', gif: 'phone')
|
|
335
|
-
# Sends the text 'called' and a random GIF that matches the keyword 'phone'.
|
|
336
|
-
end
|
|
337
|
-
end
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
Giphy API key is set automatically via `ENV['GIPHY_API_KEY']`. You can override this manually.
|
|
341
|
-
|
|
342
|
-
```ruby
|
|
343
|
-
Giphy.configure do |config|
|
|
344
|
-
config.api_key = 'key'
|
|
345
|
-
end
|
|
346
|
-
```
|
|
347
|
-
|
|
348
|
-
With `GiphyClient` you can configure the default GIF rating, which supports Y, G, PG, PG-13, and R. The default value is `G`.
|
|
349
|
-
|
|
350
|
-
```ruby
|
|
351
|
-
Giphy.configure do |config|
|
|
352
|
-
config.rating = 'Y' # illustrated content only, i.e. cartoons
|
|
353
|
-
end
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
If you use giphy for something else but don't want your bots to send GIFs you can set `ENV['SLACK_RUBY_BOT_SEND_GIFS']` or `SlackRubyBot::Config.send_gifs` to `false`. The latter takes precedence.
|
|
357
|
-
|
|
358
|
-
```ruby
|
|
359
|
-
SlackRubyBot.configure do |config|
|
|
360
|
-
config.send_gifs = false
|
|
361
|
-
end
|
|
362
|
-
```
|
|
363
|
-
|
|
364
366
|
### Built-In Commands
|
|
365
367
|
|
|
366
368
|
Slack-ruby-bot comes with several built-in commands. You can re-define built-in commands, normally, as described above.
|
|
@@ -381,7 +383,7 @@ Get help.
|
|
|
381
383
|
|
|
382
384
|
Hooks are event handlers and respond to Slack RTM API [events](https://api.slack.com/events), such as [hello](lib/slack-ruby-bot/hooks/hello.rb) or [message](lib/slack-ruby-bot/hooks/message.rb). You can implement your own in a couple of ways:
|
|
383
385
|
|
|
384
|
-
####
|
|
386
|
+
#### Implementing and registering a Hook Handler
|
|
385
387
|
|
|
386
388
|
A Hook Handler is any object that respond to a `call` message, like a proc, instance of an object, class with a `call` class method, etc.
|
|
387
389
|
|
|
@@ -458,22 +460,19 @@ These will get pushed into the hook set on initialization.
|
|
|
458
460
|
|
|
459
461
|
Either by configuration, explicit assignment or hook blocks, multiple handlers can exist for the same event type.
|
|
460
462
|
|
|
463
|
+
### Bot Message Protection
|
|
461
464
|
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
Registering a hook method using `hooks.add` is considered deprecated and
|
|
465
|
-
will be removed on future versions.
|
|
465
|
+
By default bots do not respond to self or other bots. If you wish to change that behavior globally, set `allow_bot_messages` to `true`.
|
|
466
466
|
|
|
467
467
|
```ruby
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
468
|
+
SlackRubyBot.configure do |config|
|
|
469
|
+
config.allow_bot_messages = true
|
|
470
|
+
end
|
|
472
471
|
```
|
|
473
472
|
|
|
474
473
|
### Message Loop Protection
|
|
475
474
|
|
|
476
|
-
By default bots do not respond to their own messages. If you wish to change that behavior, set `allow_message_loops` to `true`.
|
|
475
|
+
By default bots do not respond to their own messages. If you wish to change that behavior globally, set `allow_message_loops` to `true`.
|
|
477
476
|
|
|
478
477
|
```ruby
|
|
479
478
|
SlackRubyBot.configure do |config|
|
|
@@ -501,14 +500,14 @@ end
|
|
|
501
500
|
|
|
502
501
|
### Advanced Integration
|
|
503
502
|
|
|
504
|
-
You may want to integrate a bot or multiple bots into other systems, in which case a globally configured bot may not work for you. You may create instances of [SlackRubyBot::Server](lib/slack-ruby-bot/server.rb) which accepts `token
|
|
503
|
+
You may want to integrate a bot or multiple bots into other systems, in which case a globally configured bot may not work for you. You may create instances of [SlackRubyBot::Server](lib/slack-ruby-bot/server.rb) which accepts `token` and `aliases`.
|
|
505
504
|
|
|
506
505
|
```ruby
|
|
507
506
|
EM.run do
|
|
508
507
|
bot1 = SlackRubyBot::Server.new(token: token1, aliases: ['bot1'])
|
|
509
508
|
bot1.start_async
|
|
510
509
|
|
|
511
|
-
bot2 = SlackRubyBot::Server.new(token: token2,
|
|
510
|
+
bot2 = SlackRubyBot::Server.new(token: token2, aliases: ['bot2'])
|
|
512
511
|
bot2.start_async
|
|
513
512
|
end
|
|
514
513
|
```
|
|
@@ -625,7 +624,7 @@ class MyView < SlackRubyBot::MVC::View::Base
|
|
|
625
624
|
|
|
626
625
|
def react_thumbsup
|
|
627
626
|
client.web_client.reactions_add(
|
|
628
|
-
name: :
|
|
627
|
+
name: :thumbsup,
|
|
629
628
|
channel: data.channel,
|
|
630
629
|
timestamp: data.ts,
|
|
631
630
|
as_user: true)
|
|
@@ -633,7 +632,7 @@ class MyView < SlackRubyBot::MVC::View::Base
|
|
|
633
632
|
|
|
634
633
|
def react_thumbsdown
|
|
635
634
|
client.web_client.reactions_remove(
|
|
636
|
-
name: :
|
|
635
|
+
name: :thumbsup,
|
|
637
636
|
channel: data.channel,
|
|
638
637
|
timestamp: data.ts,
|
|
639
638
|
as_user: true)
|
|
@@ -652,14 +651,17 @@ Again, the View will have access to the most up to date `client`, `data`, and `m
|
|
|
652
651
|
|
|
653
652
|
View methods are not matched to routes, so there is no restriction on how to name methods as there is in Controllers.
|
|
654
653
|
|
|
655
|
-
###
|
|
654
|
+
### Testing
|
|
655
|
+
|
|
656
|
+
#### RSpec Shared Behaviors
|
|
656
657
|
|
|
657
|
-
Slack-ruby-bot
|
|
658
|
+
Slack-ruby-bot comes with a number of shared RSpec behaviors that can be used in your RSpec tests.
|
|
658
659
|
|
|
659
660
|
* [behaves like a slack bot](lib/slack-ruby-bot/rspec/support/slack-ruby-bot/it_behaves_like_a_slack_bot.rb): A bot quacks like a Slack Ruby bot.
|
|
660
661
|
* [respond with slack message](lib/slack-ruby-bot/rspec/support/slack-ruby-bot/respond_with_slack_message.rb): The bot responds with a message.
|
|
661
662
|
* [respond with slack messages](lib/slack-ruby-bot/rspec/support/slack-ruby-bot/respond_with_slack_messages.rb): The bot responds with a multiple messages.
|
|
662
663
|
* [respond with error](lib/slack-ruby-bot/rspec/support/slack-ruby-bot/respond_with_error.rb): An exception is raised inside a bot command.
|
|
664
|
+
* [start typing](lib/slack-ruby-bot/rspec/support/slack-ruby-bot/start_typing.rb): The bot calls `client.start_typing`.
|
|
663
665
|
|
|
664
666
|
Require `slack-ruby-bot/rspec` in your `spec_helper.rb` along with the following dependencies in Gemfile.
|
|
665
667
|
|
|
@@ -672,6 +674,72 @@ group :development, :test do
|
|
|
672
674
|
end
|
|
673
675
|
```
|
|
674
676
|
|
|
677
|
+
Use the `respond_with_slack_message` matcher.
|
|
678
|
+
|
|
679
|
+
```ruby
|
|
680
|
+
describe SlackRubyBot::Commands do
|
|
681
|
+
it 'responds with any message' do
|
|
682
|
+
expect(message: "#{SlackRubyBot.config.user} hi").to respond_with_slack_message
|
|
683
|
+
end
|
|
684
|
+
it 'says hi' do
|
|
685
|
+
expect(message: "#{SlackRubyBot.config.user} hi").to respond_with_slack_message('hi')
|
|
686
|
+
end
|
|
687
|
+
end
|
|
688
|
+
```
|
|
689
|
+
|
|
690
|
+
Use the `respond_with_slack_messages` matcher for multiple messages.
|
|
691
|
+
|
|
692
|
+
```ruby
|
|
693
|
+
describe SlackRubyBot::Commands do
|
|
694
|
+
it 'responds with more than one message' do
|
|
695
|
+
expect(message: "#{SlackRubyBot.config.user} count").to respond_with_slack_messages
|
|
696
|
+
end
|
|
697
|
+
it 'says one and two' do
|
|
698
|
+
expect(message: "#{SlackRubyBot.config.user} count").to respond_with_slack_messages(['one', 'two'])
|
|
699
|
+
end
|
|
700
|
+
end
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
Message matchers support regular expressions.
|
|
704
|
+
|
|
705
|
+
```ruby
|
|
706
|
+
describe SlackRubyBot::Commands do
|
|
707
|
+
it 'says hi' do
|
|
708
|
+
expect(message: "#{SlackRubyBot.config.user} hi").to respond_with_slack_message(/hi/)
|
|
709
|
+
end
|
|
710
|
+
end
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
Check that the bot called `client.start_typing(channel: 'channel')`.
|
|
714
|
+
|
|
715
|
+
```ruby
|
|
716
|
+
describe SlackRubyBot::Commands do
|
|
717
|
+
it 'starts typing on channel' do
|
|
718
|
+
expect(message: "#{SlackRubyBot.config.user} hi").to start_typing(channel: 'channel')
|
|
719
|
+
end
|
|
720
|
+
end
|
|
721
|
+
```
|
|
722
|
+
|
|
723
|
+
#### Testing Lower Level Messages
|
|
724
|
+
|
|
725
|
+
You can test client behavior at a lower level by fetching the message hook. The following example expects a bot command to call `client.typing(channel: data.channel)`.
|
|
726
|
+
|
|
727
|
+
```ruby
|
|
728
|
+
describe SlackRubyBot::Commands do
|
|
729
|
+
let(:app) { Server.new }
|
|
730
|
+
let(:client) { app.send(:client) }
|
|
731
|
+
let(:message_hook) { SlackRubyBot::Hooks::Message.new }
|
|
732
|
+
it 'receives a typing event' do
|
|
733
|
+
expect(client).to receive(:typing)
|
|
734
|
+
message_hook.call(
|
|
735
|
+
client,
|
|
736
|
+
Hashie::Mash.new(text: "#{SlackRubyBot.config.user} type something", channel: 'channel')
|
|
737
|
+
)
|
|
738
|
+
end
|
|
739
|
+
end
|
|
740
|
+
end
|
|
741
|
+
```
|
|
742
|
+
|
|
675
743
|
### Useful Libraries
|
|
676
744
|
|
|
677
745
|
* [newrelic-slack-ruby-bot](https://github.com/dblock/newrelic-slack-ruby-bot): NewRelic instrumentation for slack-ruby-bot.
|
|
@@ -686,6 +754,6 @@ See [CHANGELOG](CHANGELOG.md) for a history of changes and [UPGRADING](UPGRADING
|
|
|
686
754
|
|
|
687
755
|
## Copyright and License
|
|
688
756
|
|
|
689
|
-
Copyright (c) 2015-
|
|
757
|
+
Copyright (c) 2015-2020, [Daniel Doubrovkine](https://twitter.com/dblockdotorg), [Artsy](https://www.artsy.net) and [Contributors](CHANGELOG.md).
|
|
690
758
|
|
|
691
759
|
This project is licensed under the [MIT License](LICENSE.md).
|