# -*- 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.send_messages module."""
from abc import ABCMeta
from future.utils import with_metaclass
from .emojis import Emojis
from .actions import get_action
from .base import Base
[docs]class SendMessage(with_metaclass(ABCMeta, Base)):
"""Abstract Base Class of SendMessage."""
[docs] def __init__(self, quick_reply=None, sender=None, **kwargs):
"""__init__ method.
:param quick_reply: QuickReply object
:type quick_reply: T <= :py:class:`linebot.models.send_messages.QuickReply`
:param sender: Sender object
:type sender: T <= :py:class:`linebot.models.send_messages.Sender`
:param kwargs:
"""
super(SendMessage, self).__init__(**kwargs)
self.type = None
self.quick_reply = self.get_or_new_from_json_dict(quick_reply, QuickReply)
self.sender = self.get_or_new_from_json_dict(sender, Sender)
[docs]class TextSendMessage(SendMessage):
"""TextSendMessage.
https://developers.line.biz/en/reference/messaging-api/#text-message
"""
[docs] def __init__(self, text=None, emojis=None, quick_reply=None, sender=None, **kwargs):
"""__init__ method.
:param str text: Message text
:param quick_reply: QuickReply object
:type quick_reply: T <= :py:class:`linebot.models.send_messages.QuickReply`
:type sender: T <= :py:class:`linebot.models.send_messages.Sender`
:param kwargs:
"""
super(TextSendMessage, self).__init__(quick_reply=quick_reply, sender=sender, **kwargs)
self.type = 'text'
self.text = text
if emojis:
new_emojis = []
for emoji in emojis:
emoji_object = self.get_or_new_from_json_dict(
emoji, Emojis
)
if emoji_object:
new_emojis.append(emoji_object)
self.emojis = new_emojis
else:
self.emojis = emojis
[docs]class ImageSendMessage(SendMessage):
"""ImageSendMessage.
https://developers.line.biz/en/reference/messaging-api/#image-message
"""
[docs] def __init__(self, original_content_url=None, preview_image_url=None,
quick_reply=None, sender=None, **kwargs):
"""__init__ method.
:param str original_content_url: Image URL.
HTTPS
JPEG
Max: 1024 x 1024
Max: 1 MB
:param str preview_image_url: Preview image URL
HTTPS
JPEG
Max: 240 x 240
Max: 1 MB
:param quick_reply: QuickReply object
:type quick_reply: T <= :py:class:`linebot.models.send_messages.QuickReply`
:type sender: T <= :py:class:`linebot.models.send_messages.Sender`
:param kwargs:
"""
super(ImageSendMessage, self).__init__(quick_reply=quick_reply, sender=sender, **kwargs)
self.type = 'image'
self.original_content_url = original_content_url
self.preview_image_url = preview_image_url
[docs]class VideoSendMessage(SendMessage):
"""VideoSendMessage.
https://developers.line.biz/en/reference/messaging-api/#video-message
"""
[docs] def __init__(self, original_content_url=None, preview_image_url=None,
tracking_id=None, quick_reply=None, sender=None, **kwargs):
"""__init__ method.
:param str original_content_url: URL of video file.
HTTPS. mp4. Less than 1 minute. Max: 10 MB.
:param str preview_image_url: URL of preview image.
HTTPS. JPEG. Max: 240 x 240. Max: 1 MB.
:param str tracking_id: the video viewing complete event occurs
when the user finishes watching the video.
Max character limit: 100.
:param quick_reply: QuickReply object
:type quick_reply: T <= :py:class:`linebot.models.send_messages.QuickReply`
:type sender: T <= :py:class:`linebot.models.send_messages.Sender`
:param kwargs:
"""
super(VideoSendMessage, self).__init__(quick_reply=quick_reply, sender=sender, **kwargs)
self.type = 'video'
self.original_content_url = original_content_url
self.preview_image_url = preview_image_url
self.tracking_id = tracking_id
[docs]class AudioSendMessage(SendMessage):
"""AudioSendMessage.
https://developers.line.biz/en/reference/messaging-api/#audio-message
"""
[docs] def __init__(self, original_content_url=None, duration=None, quick_reply=None,
sender=None, **kwargs):
"""__init__ method.
:param str original_content_url: URL of audio file. HTTPS.
m4a. Less than 1 minute. Max 10 MB.
:param long duration: Length of audio file (milliseconds).
:param quick_reply: QuickReply object
:type quick_reply: T <= :py:class:`linebot.models.send_messages.QuickReply`
:type sender: T <= :py:class:`linebot.models.send_messages.Sender`
:param kwargs:
"""
super(AudioSendMessage, self).__init__(quick_reply=quick_reply, sender=sender, **kwargs)
self.type = 'audio'
self.original_content_url = original_content_url
self.duration = duration
[docs]class LocationSendMessage(SendMessage):
"""LocationSendMessage.
https://developers.line.biz/en/reference/messaging-api/#location-message
"""
[docs] def __init__(self, title=None, address=None, latitude=None, longitude=None,
quick_reply=None, sender=None, **kwargs):
"""__init__ method.
:param str title: Title
:param str address: Address
:param float latitude: Latitude
:param float longitude: Longitude
:param quick_reply: QuickReply object
:type quick_reply: T <= :py:class:`linebot.models.send_messages.QuickReply`
:type sender: T <= :py:class:`linebot.models.send_messages.Sender`
:param kwargs:
"""
super(LocationSendMessage, self).__init__(quick_reply=quick_reply, sender=sender, **kwargs)
self.type = 'location'
self.title = title
self.address = address
self.latitude = latitude
self.longitude = longitude
[docs]class StickerSendMessage(SendMessage):
"""StickerSendMessage.
https://developers.line.biz/en/reference/messaging-api/#sticker-message
"""
[docs] def __init__(self, package_id=None, sticker_id=None, quick_reply=None, sender=None, **kwargs):
"""__init__ method.
:param str package_id: Package ID
:param str sticker_id: Sticker ID
:param quick_reply: QuickReply object
:type quick_reply: T <= :py:class:`linebot.models.send_messages.QuickReply`
:type sender: T <= :py:class:`linebot.models.send_messages.Sender`
:param kwargs:
"""
super(StickerSendMessage, self).__init__(quick_reply=quick_reply, sender=sender, **kwargs)
self.type = 'sticker'
self.package_id = package_id
self.sticker_id = sticker_id
[docs]class QuickReply(with_metaclass(ABCMeta, Base)):
"""QuickReply.
https://developers.line.me/en/docs/messaging-api/#quick-reply
"""
[docs] def __init__(self, items=None, **kwargs):
"""__init__ method.
:param items: Quick reply button objects
:type items: list[T <= :py:class:`linebot.models.send_messages.QuickReplyButton`]
:param kwargs:
"""
super(QuickReply, self).__init__(**kwargs)
new_items = []
if items:
for item in items:
new_items.append(self.get_or_new_from_json_dict(
item, QuickReplyButton
))
self.items = new_items
[docs]class Sender(with_metaclass(ABCMeta, Base)):
"""Sender.
https://developers.line.biz/en/reference/messaging-api/#icon-nickname-switch
"""
[docs] def __init__(self, name=None, icon_url=None, **kwargs):
"""__init__ method.
:param str name: Display name
:param str icon_url: Icon image URL
"""
super(Sender, self).__init__(**kwargs)
self.name = name
self.icon_url = icon_url