module SlackRubyBot
|
|
module Hooks
|
|
module Message
|
|
extend Base
|
|
|
|
def message(client, data)
|
|
data = Hashie::Mash.new(data)
|
|
data.text.strip! if data.text
|
|
result = child_command_classes.detect { |d| d.invoke(client, data) }
|
|
result ||= built_in_command_classes.detect { |d| d.invoke(client, data) }
|
|
result ||= SlackRubyBot::Commands::Unknown.tap { |d| d.invoke(client, data) }
|
|
result
|
|
end
|
|
|
|
private
|
|
|
|
#
|
|
# All commands.
|
|
#
|
|
# @return [Array] Descendants of SlackRubyBot::Commands::Base.
|
|
#
|
|
def command_classes
|
|
SlackRubyBot::Commands::Base.descendants
|
|
end
|
|
|
|
#
|
|
# All non-built-in, ie. custom commands.
|
|
#
|
|
# @return [Array] Non-built-in descendants of SlackRubyBot::Commands::Base.
|
|
#
|
|
def child_command_classes
|
|
command_classes.reject do |k|
|
|
k.name && k.name.starts_with?('SlackRubyBot::Commands::')
|
|
end
|
|
end
|
|
|
|
#
|
|
# All built-in commands.
|
|
#
|
|
# @return [Array] Built-in descendants of SlackRubyBot::Commands::Base.
|
|
#
|
|
def built_in_command_classes
|
|
command_classes.select do |k|
|
|
k.name && k.name.starts_with?('SlackRubyBot::Commands::') && k != SlackRubyBot::Commands::Unknown
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|