class Ruboty::Handlers::SQS

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/ruboty/handlers/sqs.rb, line 9
def initialize(*args)
  super

  polling
end

Public Instance Methods

send_message(message) click to toggle source
# File lib/ruboty/handlers/sqs.rb, line 15
def send_message(message)
  channel = (message[:message_attributes] || {})['channel']
  channel = channel ? channel[:string_value] : ENV['SQS_ROOM']

  robot.say(
    body: message[:body],
    to: channel
  )
end

Private Instance Methods

polling() click to toggle source
# File lib/ruboty/handlers/sqs.rb, line 31
def polling
  @polling_thread ||= begin
    th = Thread.new(self, sqs) do |robot, sqs|
      loop do
        begin
          resp = sqs.receive_message(
            queue_url: ENV['SQS_URL'],
            attribute_names: %w(All),
            message_attribute_names: [],
            max_number_of_messages: 3,
            wait_time_seconds: 10
          )

          messages = resp[:messages]

          messages.each do |message|
            robot.send_message(message)
          end

          sqs.delete_message_batch(
            queue_url: ENV['SQS_URL'],
            entries: messages.map { |m| { id: m[:message_id], receipt_handle: m[:receipt_handle] } }
          ) unless messages.empty?
        rescue Aws::SQS::Errors::ServiceError => e
          p e
        rescue => e
          p e
        end
      end
    end
    th.run
    th
  end
end
sqs() click to toggle source
# File lib/ruboty/handlers/sqs.rb, line 27
def sqs
  @sqs = ::Aws::SQS::Client.new()
end