# -*- coding: utf-8 -*-
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""linebot.models.template module."""
from abc import ABCMeta
from future.utils import with_metaclass
from .actions import get_action, get_actions
from .base import Base
from .send_messages import SendMessage
[docs]class TemplateSendMessage(SendMessage):
"""TemplateSendMessage.
https://developers.line.biz/en/reference/messaging-api/#template-messages
Template messages are messages with predefined layouts which you can customize.
There are three types of templates available
that can be used to interact with users through your bot.
"""
[docs] def __init__(self, alt_text=None, template=None, **kwargs):
"""__init__ method.
:param str alt_text: Alternative text for unsupported devices.
:param template: Object with the contents of the template.
:type template: T <= :py:class:`linebot.models.template.Template`
:param kwargs:
"""
super(TemplateSendMessage, self).__init__(**kwargs)
self.type = 'template'
self.alt_text = alt_text
self.template = self.get_or_new_from_json_dict_with_types(
template, {
'buttons': ButtonsTemplate,
'confirm': ConfirmTemplate,
'carousel': CarouselTemplate,
'image_carousel': ImageCarouselTemplate
}
)
[docs]class Template(with_metaclass(ABCMeta, Base)):
"""Abstract Base Class of Template."""
[docs] def __init__(self, **kwargs):
"""__init__ method.
:param kwargs:
"""
super(Template, self).__init__(**kwargs)
self.type = None
[docs]class ConfirmTemplate(Template):
"""ConfirmTemplate.
https://developers.line.biz/en/reference/messaging-api/#confirm
Template message with two action buttons.
"""
[docs] def __init__(self, text=None, actions=None, **kwargs):
"""__init__ method.
:param str text: Message text.
Max: 240 characters
:param actions: Action when tapped.
Max: 2
:type actions: list[T <= :py:class:`linebot.models.actions.Action`]
:param kwargs:
"""
super(ConfirmTemplate, self).__init__(**kwargs)
self.type = 'confirm'
self.text = text
self.actions = get_actions(actions)
[docs]class CarouselTemplate(Template):
"""CarouselTemplate.
https://developers.line.biz/en/reference/messaging-api/#carousel
Template message with multiple columns which can be cycled like a carousel.
"""
[docs] def __init__(self, columns=None, image_aspect_ratio=None,
image_size=None, **kwargs):
"""__init__ method.
:param columns: Array of columns.
Max: 10
:type columns: list[T <= :py:class:`linebot.models.template.CarouselColumn`]
:param str image_aspect_ratio: Aspect ratio of the image.
Specify ``rectangle`` or ``square``.
:param str image_size: Size of the image. Specify ``cover`` or ``contain``.
:param kwargs:
"""
super(CarouselTemplate, self).__init__(**kwargs)
self.type = 'carousel'
new_columns = []
if columns:
for column in columns:
new_columns.append(self.get_or_new_from_json_dict(
column, CarouselColumn
))
self.columns = new_columns
self.image_aspect_ratio = image_aspect_ratio
self.image_size = image_size
[docs]class ImageCarouselTemplate(Template):
"""ImageCarouselTemplate.
https://developers.line.biz/en/reference/messaging-api/#image-carousel
Template message with multiple images columns which can be cycled like as carousel.
"""
[docs] def __init__(self, columns=None, **kwargs):
"""__init__ method.
:param columns: Array of columns.
Max: 10
:type columns: list[T <= :py:class:`linebot.models.template.ImageCarouselColumn`]
:param kwargs:
"""
super(ImageCarouselTemplate, self).__init__(**kwargs)
self.type = 'image_carousel'
new_columns = []
if columns:
for column in columns:
new_columns.append(self.get_or_new_from_json_dict(
column, ImageCarouselColumn
))
self.columns = new_columns
[docs]class CarouselColumn(Base):
"""CarouselColumn.
https://developers.line.biz/en/reference/messaging-api/#column-object
"""
[docs] def __init__(self, text=None, title=None,
thumbnail_image_url=None, image_background_color=None,
actions=None, default_action=None, **kwargs):
"""__init__ method.
:param str text: Message text.
Max: 120 characters (no image or title)
Max: 60 characters (message with an image or title)
:param str title: Title.
Max: 40 characters
:param str thumbnail_image_url: Image URL (HTTPS). JPEG or PNG. Aspect ration is 1:1.51.
Max width: 1024px, Max: 1 MB.
:param str image_background_color: Background color of image.
Specify a RGB color value.
:param actions: Action when tapped.
Max: 3
:type actions: list[T <= :py:class:`linebot.models.actions.Action`]
:param default_action: Action when image is tapped;
set for the entire image, title, and text area
:type default_action: T <= :py:class:`linebot.models.actions.Action`
:param kwargs:
"""
super(CarouselColumn, self).__init__(**kwargs)
self.text = text
self.title = title
self.thumbnail_image_url = thumbnail_image_url
self.image_background_color = image_background_color
self.actions = get_actions(actions)
self.default_action = get_action(default_action)
[docs]class ImageCarouselColumn(Base):
"""ImageCarouselColumn.
https://developers.line.biz/en/reference/messaging-api/#column-object-for-image-carousel
"""
[docs] def __init__(self, image_url=None, action=None, **kwargs):
"""__init__ method.
:param str image_url: Image URL (HTTPS). JPEG or PNG. Aspect ration is 1:1.
Max width: 1024px, Max: 1 MB.
:param action: Action when image is tapped. Max: 5.
:type action: T <= :py:class:`linebot.models.actions.Action`
:param kwargs:
"""
super(ImageCarouselColumn, self).__init__(**kwargs)
self.image_url = image_url
self.action = get_action(action)