class Kamigo::EventParsers::LineEventParser

Public Instance Methods

get_profile(line_event) click to toggle source
# File lib/kamigo/event_parsers/line_event_parser.rb, line 29
def get_profile(line_event)
  case line_event.source_type
  when 'group'
    response = client.get_group_member_profile(
      line_event.source_group_id,
      line_event.source_user_id
    )
  when 'room'
    response = client.get_room_member_profile(
      line_event.source_group_id,
      line_event.source_user_id
    )
  else
    response = client.get_profile(line_event.source_user_id)
  end
  JSON.parse(response.body)
end
parse(event) click to toggle source
# File lib/kamigo/event_parsers/line_event_parser.rb, line 14
def parse(event)
  event_hash = JSON.parse(event.to_json, symbolize_names: true)
  payload = event_hash[:src] || event_hash
  line_event = Kamigo::Events::LineEvent.new
  line_event.payload = payload
  line_event.reply_token = event['replyToken']
  line_event.source_type = payload.dig(:source, :type)
  line_event.source_group_id = payload.dig(:source, :groupId) || payload.dig(:source, :roomId) || payload.dig(:source, :userId)
  line_event.source_user_id = payload.dig(:source, :userId) || payload.dig(:source, :groupId) || payload.dig(:source, :roomId)
  line_event.message_type = payload.dig(:message, :type) || payload.dig(:type)
  line_event.message = payload.dig(:message, :text) || payload.dig(:postback, :data) || payload.dig(:message, :address) || line_event.message_type
  line_event.profile = get_profile(line_event)
  line_event
end
parse_events(request) click to toggle source
# File lib/kamigo/event_parsers/line_event_parser.rb, line 6
def parse_events(request)
  body = request.body.read
  events = client.parse_events_from(body)
  events.map do |event|
    parse(event)
  end
end