diff --git a/telebot/types.py b/telebot/types.py index af0d4cf74..2cd194d21 100644 --- a/telebot/types.py +++ b/telebot/types.py @@ -6695,12 +6695,23 @@ class InputMedia(Dictionaryable, JsonSerializable): * :class:`InputMediaPhoto` * :class:`InputMediaVideo` """ - def __init__(self, type, media, caption=None, parse_mode=None, caption_entities=None): + def __init__(self, type, media, caption=None, parse_mode=None, caption_entities=None, thumbnail=None): self.type: str = type self.media: str = media self.caption: Optional[str] = caption self.parse_mode: Optional[str] = parse_mode self.caption_entities: Optional[List[MessageEntity]] = caption_entities + self.thumbnail: Optional[Union[str, InputFile]] = thumbnail + + if thumbnail is None: + self._thumbnail_name = '' + self._thumbnail_dic = None + elif service_utils.is_string(self.thumbnail): + self._thumbnail_name = '' + self._thumbnail_dic = self.thumbnail + else: + self._thumbnail_name = service_utils.generate_random_token() + self._thumbnail_dic = 'attach://{0}'.format(self._thumbnail_name) if service_utils.is_string(self.media): self._media_name = '' @@ -6714,6 +6725,8 @@ def to_json(self): def to_dict(self): json_dict = {'type': self.type, 'media': self._media_dic} + if self._thumbnail_dic: + json_dict['thumbnail'] = self._thumbnail_dic if self.caption: json_dict['caption'] = self.caption if self.parse_mode: @@ -6728,8 +6741,12 @@ def convert_input_media(self): """ if service_utils.is_string(self.media): return self.to_json(), None + + media_dict = {self._media_name: self.media} + if self._thumbnail_name: + media_dict[self._thumbnail_name] = self.thumbnail - return self.to_json(), {self._media_name: self.media} + return self.to_json(), media_dict class InputMediaPhoto(InputMedia): @@ -6850,8 +6867,7 @@ def __init__(self, media: Union[str, InputFile], thumbnail: Optional[Union[str, show_caption_above_media: Optional[bool] = None, cover: Optional[Union[str, InputFile]] = None, start_timestamp: Optional[int] = None): super(InputMediaVideo, self).__init__( - type="video", media=media, caption=caption, parse_mode=parse_mode, caption_entities=caption_entities) - self.thumbnail: Optional[Union[str, InputFile]] = thumbnail + type="video", media=media, caption=caption, parse_mode=parse_mode, caption_entities=caption_entities, thumbnail=thumbnail) self.width: Optional[int] = width self.height: Optional[int] = height self.duration: Optional[int] = duration @@ -6868,8 +6884,6 @@ def thumb(self) -> Optional[Union[str, Any]]: def to_dict(self): ret = super(InputMediaVideo, self).to_dict() - if self.thumbnail: - ret['thumbnail'] = self.thumbnail if self.width: ret['width'] = self.width if self.height: @@ -6943,8 +6957,7 @@ def __init__(self, media: Union[str, InputFile], thumbnail: Optional[Union[str, height: Optional[int] = None, duration: Optional[int] = None, has_spoiler: Optional[bool] = None, show_caption_above_media: Optional[bool] = None): super(InputMediaAnimation, self).__init__( - type="animation", media=media, caption=caption, parse_mode=parse_mode, caption_entities=caption_entities) - self.thumbnail: Optional[Union[str, InputFile]] = thumbnail + type="animation", media=media, caption=caption, parse_mode=parse_mode, caption_entities=caption_entities, thumbnail=thumbnail) self.width: Optional[int] = width self.height: Optional[int] = height self.duration: Optional[int] = duration @@ -6959,8 +6972,6 @@ def thumb(self) -> Optional[Union[str, Any]]: def to_dict(self): ret = super(InputMediaAnimation, self).to_dict() - if self.thumbnail: - ret['thumbnail'] = self.thumbnail if self.width: ret['width'] = self.width if self.height: @@ -7020,8 +7031,7 @@ def __init__(self, media: Union[str, InputFile], thumbnail: Optional[Union[str, caption_entities: Optional[List[MessageEntity]] = None, duration: Optional[int] = None, performer: Optional[str] = None, title: Optional[str] = None): super(InputMediaAudio, self).__init__( - type="audio", media=media, caption=caption, parse_mode=parse_mode, caption_entities=caption_entities) - self.thumbnail: Optional[Union[str, InputFile]] = thumbnail + type="audio", media=media, caption=caption, parse_mode=parse_mode, caption_entities=caption_entities, thumbnail=thumbnail) self.duration: Optional[int] = duration self.performer: Optional[str] = performer self.title: Optional[str] = title @@ -7033,8 +7043,6 @@ def thumb(self) -> Optional[Union[str, Any]]: def to_dict(self): ret = super(InputMediaAudio, self).to_dict() - if self.thumbnail: - ret['thumbnail'] = self.thumbnail if self.duration: ret['duration'] = self.duration if self.performer: @@ -7085,8 +7093,7 @@ def __init__(self, media: Union[str, InputFile], thumbnail: Optional[Union[str, caption_entities: Optional[List[MessageEntity]] = None, disable_content_type_detection: Optional[bool] = None): super(InputMediaDocument, self).__init__( - type="document", media=media, caption=caption, parse_mode=parse_mode, caption_entities=caption_entities) - self.thumbnail: Optional[Union[str, InputFile]] = thumbnail + type="document", media=media, caption=caption, parse_mode=parse_mode, caption_entities=caption_entities, thumbnail=thumbnail) self.disable_content_type_detection: Optional[bool] = disable_content_type_detection @property @@ -7096,8 +7103,6 @@ def thumb(self) -> Optional[Union[str, Any]]: def to_dict(self): ret = super(InputMediaDocument, self).to_dict() - if self.thumbnail: - ret['thumbnail'] = self.thumbnail if self.disable_content_type_detection is not None: ret['disable_content_type_detection'] = self.disable_content_type_detection return ret