defmodule LineMessage.Message do def text(messages \\ [], txt) do messages ++ [%{ type: "text", text: txt }] end def image(messages \\ [], %{original_content_url: original_url, preview_image_url: preview_url}) do messages ++ [%{ type: "image", originalContentUrl: original_url, previewImageUrl: preview_url }] end def video(messages \\ [], %{original_content_url: original_url, preview_image_url: preview_url}) do messages ++ [%{ type: "video", originalContentUrl: original_url, previewImageUrl: preview_url }] end def audio(messages \\ [], %{original_content_url: original_url, duration: duration}) do messages ++ [%{ type: "audio", originalContentUrl: original_url, duration: duration }] end def location(messages \\ [], %{title: title, address: address, latitude: latitude, longitude: longitude}) do messages ++ [%{ type: "location", title: title, address: address, latitude: latitude, longitude: longitude }] end def sticker(messages \\ [], %{package_id: package_id, sticker_id: sticker_id}) do messages ++ [%{ type: "sticker", packageId: package_id, stickerId: sticker_id }] end def imagemap(messages \\ [], %{base_url: base_url, alt_text: alt_text, base_size: %{height: base_height, width: base_width}, actions: actions}) when is_list(actions) do messages ++ [%{ type: "imagemap", baseUrl: base_url, altText: alt_text, baseSize: %{ height: base_height, width: base_width }, actions: parse_imagemap_actions(actions) }] end defp parse_imagemap_actions(actions) do actions |> Enum.map(fn %{type: type, link_url: link_url, area: %{x: x, y: y, width: width, height: height}} -> %{type: type, linkUrl: link_url, area: %{x: x, y: y, width: width, height: height}} end) end defmodule Template do def button(alt_text, content = %{image: _, title: _, text: _, actions: _}) do button([], alt_text, content) end def button(messages, alt_text, %{image: image, title: title, text: text, actions: actions}) do template(messages, alt_text, %{ type: "buttons", thumbnailImageUrl: image, title: title, text: text, actions: actions }) end def confirm(alt_text, content = %{text: _, actions: _}) do confirm([], alt_text, content) end def confirm(messages, alt_text, %{text: text, actions: actions}) do template(messages, alt_text, %{ type: "confirm", text: text, actions: actions }) end defp template(messages, alt_text, temp) do messages ++ [%{ type: "template", altText: alt_text, template: temp }] end end end