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