GIF, Giphy and other animated GIF support has been removed. Remove gif
options from all client.say(gif: 'keyword')
method calls, the GIPHY_API_KEY
ENV var, gem 'giphy'
or gem 'GiphyClient'
, and any references to send_gifs
. The previously deprecated SlackRubyBot::Commands::Base#send_message
, send_message_with_gif
and send_gif
methods have also been removed.
See #261 for details.
The previously deprecated SlackRubyBot::Server#hooks
has been removed.
See #266 for details.
Requiring slack-ruby-bot/rspec
will no longer set up VCR anymore. If your spec suite implicitly relies on this you would need to set up VCR explicitly in your spec suite. Just follow standard VCR documentation.
See #258 for more information.
By default bots will no longer respond to other bots. This caused confusing "I don't understand this command." errors when DMing the bot and rendering URLs that were being sent back as DMs. If you wish to restore the old behavior, set allow_bot_messages
to true
.
SlackRubyBot.configure do |config|
config.allow_bot_messages = true
end
See #250 for more information.
Ruby 2.3 or later is now required.
See #246 for more information.
We have removed SlackRubyBot::Server#restart!
since the slack-ruby-client
now restarts any connection that was not intentionally stopped via SlackRubyBot::Server#stop!
.
We have deprecated SlackRubyBot::Server#hooks
in favor of SlackRubyBot::Server#on
instance method. All users using SlackRubyBot::Server#hooks
method should
change their codebase and use the new method instead. Method signature is not affected.
Example:
# Given server is an instance of SlackRubyBot::Server
#
# Before
server.hooks.add :hello, Greet.new
# After
server.on :hello, Greet.new
The dependency on the giphy
gem was dropped and GIFs don't appear by default. If you want GIF support, add gem 'giphy'
to your Gemfile.
You should not need to make any changes if you had already disabled GIFs for your bot.
See #89 for more information.
The faye-websocket
library is no longer required by default. Add either faye-websocket
or celluiloid-io
to your Gemfile
depending on which concurrency implementation you'd like to use. We recommend celluloid-io
moving forward.
Hook classes are now handled differently, namely they are explicitly registered into SlackRubyBot::Server
via a configuration option (hook_handlers
) or by passing a similar hash later on through the add_hook_handlers
method. Including Hook classes directly into the server class is no longer needed.
A hook is actioned via a call
message onto the handler object (this can be anything that responds to that), so you'll need to rename your method.
Finally, you can now register multiple hooks for the same event, so if you had any code to remove default hooks, you'll need to change it so you pass a configuration hash into Server
The regular expression parser for commands will now include a nil
value for expression
when an expression is not present. You can therefore no longer rely on checking match.names.include?('expression')
, instead check match['expression']
.
SlackRubyBot 0.6.x versions invoked a method called auth!
, which caused a pre-flight authentication via Slack Web API auth_test
method and collected a number of properties, such as client and team ID or name. This method has been removed in favor of using data available in the Slack::RealTime::Client
local store introduced in slack-ruby-client#54. Remove any explicit calls to this method.
While entirely compatible with the 0.5.x series, a number of methods have been deprecated and will be removed in the next release.
Prefer command
, operator
or match
with a block instead of implementing a self.call
method.
Before:
require 'slack-ruby-bot'
class Bot < SlackRubyBot::Bot
command 'ping'
def self.call(client, data, match)
...
end
end
After:
require 'slack-ruby-bot'
class Bot < SlackRubyBot::Bot
command 'ping' do |client, data, match|
...
end
end
Use client.say
instead of send_message
, send_message_with_gif
and send_gif
in commands.
Before:
class Bot < SlackRubyBot::Bot
command 'one' do |client, data, match|
send_message client, data.channel, 'Text.'
end
command 'two' do |client, data, match|
send_message_with_gif client, data.channel, "Text.", 'keyword'
end
command 'three' do |client, data, match|
send_gif client, data.channel, 'keyword'
end
end
After:
class Bot < SlackRubyBot::Bot
command 'one' do |client, data, match|
client.say(channel: data.channel, text: 'Text.')
end
command 'two' do |client, data, match|
client.say(channel: data.channel, text: 'Text.', gif: 'keyword')
end
command 'three' do |client, data, match|
client.say(channel: data.channel, gif: 'keyword')
end
end
Before:
module PongBot
class App < SlackRubyBot::App
end
class Ping < SlackRubyBot::Commands::Base
command 'ping' do |client, data, _match|
client.message(text: 'pong', channel: data.channel)
end
end
end
PongBot::App.instance.run
After:
class Bot < SlackRubyBot::Bot
command 'ping' do |client, data, _match|
client.say(text: 'pong', channel: data.channel)
end
end
Bot.run
This version uses slack-ruby-client instead of slack-ruby-gem.
The command interface now takes a client
parameter, which is the RealTime Messaging API instance. Add the new parameter to all call
calls in classes that inherit from SlackRubyBot::Commands::Base
.
Before:
def self.call(data, match)
...
end
After:
def self.call(client, data, match)
...
end
This also applies to command
, operator
and match
blocks.
Before:
command 'ping' do |data, match|
...
end
After:
command 'ping' do |client, data, match|
...
end
You can now send messages directly via the RealTime Messaging API.
client.message text: 'text', channel: 'channel'
Otherwise you must now pass the client
parameter to send_message
and send_message_with_gif
.
def self.call(client, data, match)
send_message client, data.channel, 'hello'
end
def self.call(client, data, match)
send_message_with_gif client, data.channel, 'hello', 'hi'
end