Implement sending media group via webhook-response

This commit is contained in:
Alex Root Junior 2017-11-25 13:43:01 +02:00
parent 3e6114a04a
commit e51810fc5e

View file

@ -4,7 +4,7 @@ import datetime
import functools import functools
import ipaddress import ipaddress
import typing import typing
from typing import Dict, Optional, Union from typing import Dict, List, Optional, Union
from aiohttp import web from aiohttp import web
@ -739,6 +739,87 @@ class SendVideoNote(BaseResponse, ReplyToMixin):
} }
class SendMediaGroup(BaseResponse):
"""
Use this method to send a group of photos or videos as an album.
"""
__slots__ = ('chat_id', 'media', 'disable_notification', 'reply_to_message_id')
method = api.Methods.SEND_MEDIA_GROUP
def __init__(self, chat_id: Union[Integer, String],
media: Union[types.MediaGroup, List] = None,
disable_notification: typing.Union[Boolean, None] = None,
reply_to_message_id: typing.Union[Integer, None] = None):
"""
Use this method to send a group of photos or videos as an album.
Source: https://core.telegram.org/bots/api#sendmediagroup
:param chat_id: Unique identifier for the target chat or username of the target channel
:type chat_id: :obj:`typing.Union[base.Integer, base.String]`
:param media: A JSON-serialized array describing photos and videos to be sent
:type media: :obj:`typing.Union[types.MediaGroup, typing.List]`
:param disable_notification: Sends the message silently. Users will receive a notification with no sound.
:type disable_notification: :obj:`typing.Union[base.Boolean, None]`
:param reply_to_message_id: If the message is a reply, ID of the original message
:type reply_to_message_id: :obj:`typing.Union[base.Integer, None]`
:return: On success, an array of the sent Messages is returned.
:rtype: typing.List[types.Message]
"""
if media is None:
media = types.MediaGroup()
elif isinstance(media, list):
# Convert list to MediaGroup
media = types.MediaGroup(media)
self.chat_id = chat_id
self.media = media
self.disable_notifications = disable_notification
self.reply_to_message_id = reply_to_message_id
def prepare(self):
files = self.media.get_files()
if files:
raise TypeError('Allowed only file ID or URL\'s')
media = prepare_arg(self.media)
return {
'chat_id': self.chat_id,
'media': media,
'disable_notifications': self.disable_notifications,
'reply_to_message_id': self.reply_to_message_id
}
def attach_photo(self, photo: String, caption: String = None):
"""
Attach photo
:param photo:
:param caption:
:return: self
"""
self.media.attach_photo(photo, caption)
return self
def attach_video(self, video: String, caption: String = None, width: Integer = None,
height: Integer = None, duration: Integer = None):
"""
Attach video
:param video:
:param caption:
:param width:
:param height:
:param duration:
:return: self
"""
self.media.attach_video(video, caption, width=width, height=height, duration=duration)
return self
class SendLocation(BaseResponse, ReplyToMixin): class SendLocation(BaseResponse, ReplyToMixin):
""" """
Use that response type for send location on to webhook. Use that response type for send location on to webhook.