lib/slack-ruby-bot/commands/base.rb in slack-ruby-bot-0.4.5 vs lib/slack-ruby-bot/commands/base.rb in slack-ruby-bot-0.5.0
- old
+ new
@@ -45,24 +45,25 @@
end
end
def self.command(*values, &block)
values.each do |value|
- match Regexp.new("^(?<bot>[\\w[:punct:]@<>]*)[\\s]+(?<command>#{value})$", Regexp::IGNORECASE), &block
- match Regexp.new("^(?<bot>[\\w[:punct:]@<>]*)[\\s]+(?<command>#{value})[\\s]+(?<expression>.*)$", Regexp::IGNORECASE), &block
+ escaped = Regexp.escape(value)
+ match Regexp.new("^(?<bot>[\\w[:punct:]@<>]*)[\\s]+(?<command>#{escaped})$", Regexp::IGNORECASE), &block
+ match Regexp.new("^(?<bot>[\\w[:punct:]@<>]*)[\\s]+(?<command>#{escaped})[\\s]+(?<expression>.*)$", Regexp::IGNORECASE), &block
end
end
def self.invoke(client, data)
self.finalize_routes!
- expression, text = parse(data)
+ expression, text = parse(client, data)
called = false
routes.each_pair do |route, method|
match = route.match(expression)
match ||= route.match(text) if text
next unless match
- next if match.names.include?('bot') && !SlackRubyBot.config.name?(match['bot'])
+ next if match.names.include?('bot') && !client.name?(match['bot'])
called = true
if method
method.call(client, data, match)
elsif self.respond_to?(:call)
send(:call, client, data, match)
@@ -79,34 +80,34 @@
self.routes[match] = block
end
private
- def self.parse(data)
+ def self.parse(client, data)
text = data.text
return text unless data.channel && data.channel[0] == 'D' && data.user && data.user != SlackRubyBot.config.user_id
- SlackRubyBot.config.names.each do |name|
+ client.names.each do |name|
text.downcase.tap do |td|
return text if td == name || td.starts_with?("#{name} ")
end
end
- ["#{SlackRubyBot.config.user} #{text}", text]
+ ["#{client.name} #{text}", text]
end
def self.finalize_routes!
return if self.routes && self.routes.any?
command default_command_name
end
def self.get_gif_and_send(options = {})
options = options.dup
+ keywords = options.delete(:keywords)
gif = begin
- keywords = options.delete(:keywords)
Giphy.random(keywords)
rescue StandardError => e
logger.warn "Giphy.random: #{e.message}"
nil
- end
+ end if SlackRubyBot::Config.send_gifs?
client = options.delete(:client)
text = options.delete(:text)
text = [text, gif && gif.image_url.to_s].compact.join("\n")
send_client_message(client, { text: text }.merge(options))
end