slack-ruby-bot 0.12.0 → 0.13.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/.gitignore +3 -2
- data/.rubocop.yml +14 -1
- data/.rubocop_todo.yml +13 -36
- data/.travis.yml +7 -5
- data/CHANGELOG.md +9 -0
- data/DEPLOYMENT.md +61 -5
- data/Dangerfile +2 -0
- data/Gemfile +10 -3
- data/LICENSE.md +1 -1
- data/README.md +78 -10
- data/Rakefile +2 -0
- data/TUTORIAL.md +23 -0
- data/UPGRADING.md +8 -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 +2 -0
- 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/initializers/giphy.rb +2 -0
- data/lib/initializers/giphy_client.rb +2 -0
- data/lib/slack-ruby-bot.rb +3 -1
- data/lib/slack-ruby-bot/about.rb +3 -1
- data/lib/slack-ruby-bot/app.rb +2 -0
- data/lib/slack-ruby-bot/bot.rb +2 -0
- data/lib/slack-ruby-bot/client.rb +7 -4
- data/lib/slack-ruby-bot/commands.rb +2 -0
- data/lib/slack-ruby-bot/commands/about.rb +2 -0
- data/lib/slack-ruby-bot/commands/base.rb +12 -1
- data/lib/slack-ruby-bot/commands/help.rb +9 -7
- data/lib/slack-ruby-bot/commands/hi.rb +2 -0
- 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 +2 -0
- data/lib/slack-ruby-bot/config.rb +3 -0
- 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 -0
- data/lib/slack-ruby-bot/hooks/message.rb +5 -2
- 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 +2 -0
- 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 -5
- data/lib/slack-ruby-bot/rspec/support/slack-ruby-bot/respond_with_slack_message.rb +16 -13
- data/lib/slack-ruby-bot/rspec/support/slack-ruby-bot/respond_with_slack_messages.rb +27 -18
- 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 +2 -0
- 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/rspec/support/vcr.rb +2 -0
- data/lib/slack-ruby-bot/server.rb +2 -0
- 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-app.png +0 -0
- data/slack-ruby-bot.gemspec +5 -2
- data/spec/slack-ruby-bot/app_spec.rb +2 -0
- data/spec/slack-ruby-bot/client_spec.rb +2 -0
- 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_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/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_gif_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/send_message_spec.rb +2 -0
- data/spec/slack-ruby-bot/commands/send_message_with_gif_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 -0
- data/spec/slack-ruby-bot/hooks/hello_spec.rb +51 -0
- data/spec/slack-ruby-bot/hooks/hook_support_spec.rb +2 -0
- data/spec/slack-ruby-bot/hooks/message_spec.rb +3 -1
- data/spec/slack-ruby-bot/hooks/set_spec.rb +2 -0
- data/spec/slack-ruby-bot/initializers/giphy_client_spec.rb +2 -0
- data/spec/slack-ruby-bot/initializers/giphy_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 +2 -0
- 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 +2 -0
- metadata +12 -8
- data/screenshots/register-bot.png +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f7cdc662d2370824e2b531aecde4c20b1f55e895e8e10d9c1804ca44a160b884
|
|
4
|
+
data.tar.gz: 3b5e9e13786df070f3d400c96e4752b4a6e2608472ab889d30e20e3ba95df6d1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1018f35fb9be750feaf55a420b7ed6faa305e3e3ff6ea6e271db16951e898893b1a96ad184103e37a47e24f28adef7cecee02788821c37ac34e0f7f916620d5a
|
|
7
|
+
data.tar.gz: a838815a6d65920fe1e1602e606e3bb73ab55c0176c9f565166f87d8cc643b42e37ab785f672ea651d2a156e93de68bf0eeff16b5237da0e6a75b7a98d7c2490
|
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,29 @@
|
|
|
1
1
|
# This configuration was generated by
|
|
2
2
|
# `rubocop --auto-gen-config`
|
|
3
|
-
# on
|
|
3
|
+
# on 2020-03-28 18:37:09 -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
14
|
# Offense count: 2
|
|
24
|
-
|
|
15
|
+
# Configuration parameters: AllowComments.
|
|
16
|
+
Lint/SuppressedException:
|
|
25
17
|
Exclude:
|
|
26
18
|
- 'lib/initializers/giphy.rb'
|
|
27
19
|
- 'lib/initializers/giphy_client.rb'
|
|
28
20
|
|
|
29
21
|
# Offense count: 1
|
|
30
|
-
#
|
|
31
|
-
|
|
22
|
+
# Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
|
|
23
|
+
# 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
|
|
24
|
+
Naming/FileName:
|
|
32
25
|
Exclude:
|
|
33
|
-
- '
|
|
26
|
+
- 'lib/slack-ruby-bot.rb'
|
|
34
27
|
|
|
35
28
|
# Offense count: 2
|
|
36
29
|
# Configuration parameters: EnforcedStyle.
|
|
@@ -51,27 +44,11 @@ Style/DoubleNegation:
|
|
|
51
44
|
Exclude:
|
|
52
45
|
- 'lib/slack-ruby-bot/commands/base.rb'
|
|
53
46
|
|
|
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
|
|
47
|
+
# Offense count: 1
|
|
71
48
|
# Cop supports --auto-correct.
|
|
72
|
-
# Configuration parameters: EnforcedStyle.
|
|
73
|
-
# SupportedStyles:
|
|
74
|
-
Style/
|
|
49
|
+
# Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods.
|
|
50
|
+
# SupportedStyles: predicate, comparison
|
|
51
|
+
Style/NumericPredicate:
|
|
75
52
|
Exclude:
|
|
76
|
-
- '
|
|
77
|
-
- '
|
|
53
|
+
- 'spec/**/*'
|
|
54
|
+
- 'examples/market/marketbot.rb'
|
data/.travis.yml
CHANGED
|
@@ -4,7 +4,7 @@ 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
10
|
- rvm: 2.3.0
|
|
@@ -12,14 +12,16 @@ matrix:
|
|
|
12
12
|
- rvm: 2.3.0
|
|
13
13
|
env: CONCURRENCY=faye-websocket
|
|
14
14
|
- rvm: 2.3.0
|
|
15
|
+
env: CONCURRENCY=async-websocket
|
|
16
|
+
- rvm: 2.6.5
|
|
15
17
|
env: CONCURRENCY=celluloid-io WITH_GIPHY=true
|
|
16
|
-
- rvm: 2.
|
|
18
|
+
- rvm: 2.6.5
|
|
17
19
|
env: CONCURRENCY=faye-websocket WITH_GIPHY=true
|
|
18
|
-
- rvm: 2.
|
|
20
|
+
- rvm: 2.6.5
|
|
19
21
|
env: CONCURRENCY=celluloid-io WITH_GIPHY_CLIENT=true
|
|
20
|
-
- rvm: 2.
|
|
22
|
+
- rvm: 2.6.5
|
|
21
23
|
env: CONCURRENCY=faye-websocket WITH_GIPHY_CLIENT=true
|
|
22
|
-
- rvm: 2.5
|
|
24
|
+
- rvm: 2.6.5
|
|
23
25
|
env: CONCURRENCY=async-websocket WITH_GIPHY_CLIENT=true
|
|
24
26
|
- rvm: ruby-head
|
|
25
27
|
- rvm: jruby-head
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
### 0.13.0 (2020/3/28)
|
|
2
|
+
|
|
3
|
+
* [#244](https://github.com/slack-ruby/slack-ruby-bot/pull/244): Change log message when the bot is reconnected - [@wasabigeek](https://github.com/wasabigeek).
|
|
4
|
+
* [#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).
|
|
5
|
+
* [#216](https://github.com/slack-ruby/slack-ruby-bot/pull/216): Added `start_typing` RSpec matcher - [@dblock](https://github.com/dblock).
|
|
6
|
+
* [#214](https://github.com/slack-ruby/slack-ruby-bot/pull/214): Add passenger deployment documentation - [@cybercrediators](https://github.com/cybercrediators).
|
|
7
|
+
* [#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).
|
|
8
|
+
* [#246](https://github.com/slack-ruby/slack-ruby-bot/pull/246): Drop support for Ruby 2.2 - [@dblock](https://github.com/dblock).
|
|
9
|
+
|
|
1
10
|
### 0.12.0 (2019/2/25)
|
|
2
11
|
|
|
3
12
|
* [#203](https://github.com/slack-ruby/slack-ruby-bot/pull/203): Removing restart logic - [@RodneyU215](https://github.com/RodneyU215).
|
data/DEPLOYMENT.md
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
## Installation
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
To integrate your bot with Slack, you must first create a new [Slack App](https://api.slack.com/apps).
|
|
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
|
+
|
|
11
15
|
#### SLACK_API_TOKEN
|
|
12
16
|
|
|
13
|
-
Set SLACK_API_TOKEN
|
|
17
|
+
Set the SLACK_API_TOKEN environment variable using the token received above.
|
|
14
18
|
|
|
15
19
|
```
|
|
16
20
|
heroku config:add SLACK_API_TOKEN=...
|
|
@@ -31,3 +35,55 @@ heroku config:add SLACK_RUBY_BOT_ALIASES=":pong: table-tennis ping-pong"
|
|
|
31
35
|
### Heroku Idling
|
|
32
36
|
|
|
33
37
|
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.
|
|
38
|
+
|
|
39
|
+
### Passenger Deployment
|
|
40
|
+
|
|
41
|
+
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.
|
|
42
|
+
|
|
43
|
+
+ Change or add the `gem 'puma'` entry in your `Gemfile` to `gem 'passenger'` and `bundle` it
|
|
44
|
+
+ 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/))
|
|
45
|
+
+ 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.
|
|
46
|
+
+ 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.
|
|
47
|
+
+ 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))
|
|
48
|
+
+ Edit the web-server configuration according to the examples below
|
|
49
|
+
+ `PassengerMaxPreloaderIdleTime 0` or `passenger_max_preloader_idle_time 0;` makes sure to not automatically shut down the process after 5 minutes
|
|
50
|
+
+ `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
|
|
51
|
+
+ To get the `/path/to/ruby` run `passenger-config about ruby-command` and copy the displayed path
|
|
52
|
+
+ Check the config (`nginx -t`) and restart the server with `service nginx restart`
|
|
53
|
+
+ Execute `passenger-status --verbose` to check if your app is working correctly
|
|
54
|
+
+ Optional: restart the passenger app via `passenger-config restart-app /var/www/bot`
|
|
55
|
+
|
|
56
|
+
#### Nginx
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
server {
|
|
60
|
+
listen 80;
|
|
61
|
+
server_name example.com;
|
|
62
|
+
root /var/www/bot/public;
|
|
63
|
+
passenger_enabled on;
|
|
64
|
+
passenger_ruby /path/to/ruby
|
|
65
|
+
passenger_max_preloader_idle_time 0;
|
|
66
|
+
passenger_app_type rack;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
passenger_pre_start http://example.com:80/;
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
#### Apache
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
<VirtualHost *:80>
|
|
76
|
+
ServerName example.com
|
|
77
|
+
DocumentRoot /var/www/bot/public
|
|
78
|
+
PassengerRuby /path/to/ruby
|
|
79
|
+
PassengerMaxPreloaderIdleTime 0
|
|
80
|
+
|
|
81
|
+
<Directory /var/www/bot/public>
|
|
82
|
+
Allow from all
|
|
83
|
+
Options -MultiViews
|
|
84
|
+
Require all granted
|
|
85
|
+
</Directory>
|
|
86
|
+
</VirtualHost>
|
|
87
|
+
|
|
88
|
+
PassengerPreStart http://example.com:80/
|
|
89
|
+
```
|
data/Dangerfile
CHANGED
data/Gemfile
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
source 'http://rubygems.org'
|
|
2
4
|
|
|
3
5
|
gemspec
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
|
8
15
|
|
|
9
16
|
gem 'giphy', require: false if ENV.key?('WITH_GIPHY')
|
|
10
17
|
gem 'GiphyClient', require: false if ENV.key?('WITH_GIPHY_CLIENT')
|
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/README.md
CHANGED
|
@@ -19,8 +19,7 @@ If you are not familiar with Slack bots or Slack API concepts, you might want to
|
|
|
19
19
|
|
|
20
20
|
## Stable Release
|
|
21
21
|
|
|
22
|
-
You're reading the documentation for the **stable** release of slack-ruby-bot, v0.
|
|
23
|
-
See [CHANGELOG](CHANGELOG.md) for a history of changes and [UPGRADING](UPGRADING.md) for how to upgrade to more recent versions.
|
|
22
|
+
You're reading the documentation for the **stable** release of slack-ruby-bot, v0.13.0. See [CHANGELOG](CHANGELOG.md) for a history of changes and [UPGRADING](UPGRADING.md) for how to upgrade to more recent versions.
|
|
24
23
|
|
|
25
24
|
## Usage
|
|
26
25
|
|
|
@@ -32,7 +31,7 @@ See [CHANGELOG](CHANGELOG.md) for a history of changes and [UPGRADING](UPGRADING
|
|
|
32
31
|
source 'https://rubygems.org'
|
|
33
32
|
|
|
34
33
|
gem 'slack-ruby-bot'
|
|
35
|
-
gem 'async-websocket'
|
|
34
|
+
gem 'async-websocket', '~>0.8.0'
|
|
36
35
|
```
|
|
37
36
|
|
|
38
37
|
#### pongbot.rb
|
|
@@ -269,7 +268,7 @@ class Market < SlackRubyBot::Bot
|
|
|
269
268
|
command 'help' do |client, data, match|
|
|
270
269
|
user_command = match[:expression]
|
|
271
270
|
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}"
|
|
271
|
+
client.say(channel: data.channel, text: "#{help_attrs.command_desc}\n\n#{help_attrs.command_long_desc}")
|
|
273
272
|
end
|
|
274
273
|
end
|
|
275
274
|
```
|
|
@@ -381,7 +380,7 @@ Get help.
|
|
|
381
380
|
|
|
382
381
|
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
382
|
|
|
384
|
-
####
|
|
383
|
+
#### Implementing and registering a Hook Handler
|
|
385
384
|
|
|
386
385
|
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
386
|
|
|
@@ -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).
|