slack-ruby-bot 0.12.0 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
![](screenshots/
|
6
|
-
|
7
|
-
On the next screen, note the API token.
|
5
|
+
![](screenshots/create-app.png)
|
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).
|