class Discordrb::Events::MessageEventHandler

Event handler for MessageEvent

Public Instance Methods

after_call(event) click to toggle source

@see EventHandler#after_call

# File lib/discordrb/events/message.rb, line 221
def after_call(event)
  if event.file.nil?
    event.send_message(event.saved_message) unless event.saved_message.empty?
  else
    event.send_file(event.file, caption: event.saved_message)
  end
end
matches?(event) click to toggle source
# File lib/discordrb/events/message.rb, line 159
def matches?(event)
  # Check for the proper event type
  return false unless event.is_a? MessageEvent

  [
    matches_all(@attributes[:starting_with] || @attributes[:start_with], event.content) do |a, e|
      if a.is_a? String
        e.start_with? a
      elsif a.is_a? Regexp
        (e =~ a)&.zero?
      end
    end,
    matches_all(@attributes[:ending_with] || @attributes[:end_with], event.content) do |a, e|
      if a.is_a? String
        e.end_with? a
      elsif a.is_a? Regexp
        !(e =~ Regexp.new("#{a}$")).nil?
      end
    end,
    matches_all(@attributes[:containing] || @attributes[:contains], event.content) do |a, e|
      if a.is_a? String
        e.include? a
      elsif a.is_a? Regexp
        (e =~ a)
      end
    end,
    matches_all(@attributes[:in], event.channel) do |a, e|
      if a.is_a? String
        # Make sure to remove the "#" from channel names in case it was specified
        a.delete('#') == e.name
      elsif a.is_a? Integer
        a == e.id
      else
        a == e
      end
    end,
    matches_all(@attributes[:from], event.author) do |a, e|
      if a.is_a? String
        a == e.name
      elsif a.is_a? Integer
        a == e.id
      elsif a == :bot
        e.current_bot?
      else
        a == e
      end
    end,
    matches_all(@attributes[:with_text] || @attributes[:content] || @attributes[:exact_text], event.content) do |a, e|
      if a.is_a? String
        e == a
      elsif a.is_a? Regexp
        match = a.match(e)
        match ? (e == match[0]) : false
      end
    end,
    matches_all(@attributes[:after], event.timestamp) { |a, e| a > e },
    matches_all(@attributes[:before], event.timestamp) { |a, e| a < e },
    matches_all(@attributes[:private], event.channel.private?) { |a, e| !e == !a }
  ].reduce(true, &:&)
end