mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-09 09:22:03 +00:00
MediaGroup: Detect media type from dict (in MediaGroup.attach) and other minor improvements.
This commit is contained in:
parent
61e7ff9a47
commit
698a2dca03
1 changed files with 32 additions and 13 deletions
|
|
@ -88,22 +88,43 @@ class MediaGroup(base.TelegramObject):
|
|||
"""
|
||||
Helper for sending media group
|
||||
"""
|
||||
def __init__(self, media: typing.Optional[typing.List] = None):
|
||||
def __init__(self, medias: typing.Optional[typing.List[typing.Union[InputMedia, typing.Dict]]] = None):
|
||||
super(MediaGroup, self).__init__()
|
||||
self.media = []
|
||||
|
||||
if media:
|
||||
for item in media:
|
||||
self._attach(item)
|
||||
if medias:
|
||||
self.attach_many(medias)
|
||||
|
||||
def _attach(self, media: InputMedia):
|
||||
def attach_many(self, *medias: typing.Union[InputMedia, typing.Dict]):
|
||||
"""
|
||||
Attach file
|
||||
Attach list of media
|
||||
|
||||
:param medias:
|
||||
"""
|
||||
for media in medias:
|
||||
self.attach(media)
|
||||
|
||||
def attach(self, media: typing.Union[InputMedia, typing.Dict]):
|
||||
"""
|
||||
Attach media
|
||||
|
||||
:param media:
|
||||
:return:
|
||||
"""
|
||||
# TODO: Detect media type from dict
|
||||
if isinstance(media, dict):
|
||||
if 'type' not in media:
|
||||
raise ValueError(f"Invalid media!")
|
||||
|
||||
media_type = media['type']
|
||||
if media_type == 'photo':
|
||||
media = InputMediaPhoto(**media)
|
||||
elif media_type == 'video':
|
||||
media = InputMediaVideo(**media)
|
||||
else:
|
||||
raise TypeError(f"Invalid media type '{media_type}'!")
|
||||
|
||||
elif not isinstance(media, InputMedia):
|
||||
raise TypeError(f"Media must be an instance of InputMedia or dict, not {type(media).__name__}")
|
||||
|
||||
self.media.append(media)
|
||||
|
||||
def attach_photo(self, photo: typing.Union[InputMediaPhoto, base.InputFile],
|
||||
|
|
@ -113,11 +134,10 @@ class MediaGroup(base.TelegramObject):
|
|||
|
||||
:param photo:
|
||||
:param caption:
|
||||
:return:
|
||||
"""
|
||||
if not isinstance(photo, InputMedia):
|
||||
photo = InputMediaPhoto(media=photo, caption=caption)
|
||||
self._attach(photo)
|
||||
self.attach(photo)
|
||||
|
||||
def attach_video(self, video: typing.Union[InputMediaVideo, base.InputFile],
|
||||
caption: base.String = None,
|
||||
|
|
@ -130,12 +150,11 @@ class MediaGroup(base.TelegramObject):
|
|||
:param width:
|
||||
:param height:
|
||||
:param duration:
|
||||
:return:
|
||||
"""
|
||||
if not isinstance(video, InputMedia):
|
||||
video = InputMediaVideo(media=video, caption=caption,
|
||||
width=width, height=height, duration=duration)
|
||||
self._attach(video)
|
||||
self.attach(video)
|
||||
|
||||
def to_python(self) -> typing.List:
|
||||
"""
|
||||
|
|
@ -154,4 +173,4 @@ class MediaGroup(base.TelegramObject):
|
|||
def get_files(self):
|
||||
return {inputmedia.attachment_key: inputmedia.file
|
||||
for inputmedia in self.media
|
||||
if isinstance(inputmedia, InputMedia) and inputmedia.file}
|
||||
if isinstance(inputmedia, InputMedia) and inputmedia.file}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue