From 7007eca960ca5f463d59e32e39096ff90b32e806 Mon Sep 17 00:00:00 2001 From: "g.zinovev" Date: Mon, 14 Apr 2025 01:02:31 +0300 Subject: [PATCH 1/3] Fix: Add thumbnail support for edit_message_media --- telebot/types.py | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/telebot/types.py b/telebot/types.py index af0d4cf74..2cd6b8066 100644 --- a/telebot/types.py +++ b/telebot/types.py @@ -6695,12 +6695,20 @@ 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 isinstance(self.thumbnail, InputFile): + self._thumbnail_name = service_utils.generate_random_token() + self._thumbnail_dic = 'attach://{0}'.format(self._thumbnail_name) + else: + self._thumbnail_name = '' + self._thumbnail_dic = self.thumbnail if service_utils.is_string(self.media): self._media_name = '' @@ -6713,7 +6721,7 @@ def to_json(self): return json.dumps(self.to_dict()) def to_dict(self): - json_dict = {'type': self.type, 'media': self._media_dic} + json_dict = {'type': self.type, 'media': self._media_dic, 'thumbnail': self._thumbnail_dic} if self.caption: json_dict['caption'] = self.caption if self.parse_mode: @@ -6729,7 +6737,7 @@ def convert_input_media(self): if service_utils.is_string(self.media): return self.to_json(), None - return self.to_json(), {self._media_name: self.media} + return self.to_json(), {self._media_name: self.media, self._thumbnail_name: self.thumbnail} class InputMediaPhoto(InputMedia): @@ -6850,8 +6858,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 +6875,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 +6948,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 +6963,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 +7022,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 +7034,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 +7084,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 +7094,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 From e5a02fa19073d7395baec737261cf6ef5b0a1ba2 Mon Sep 17 00:00:00 2001 From: "g.zinovev" Date: Tue, 6 May 2025 13:21:16 +0300 Subject: [PATCH 2/3] Address maintainer feedback: [fixed optional values] --- telebot/types.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/telebot/types.py b/telebot/types.py index 2cd6b8066..0d0361dcb 100644 --- a/telebot/types.py +++ b/telebot/types.py @@ -6703,13 +6703,14 @@ def __init__(self, type, media, caption=None, parse_mode=None, caption_entities= self.caption_entities: Optional[List[MessageEntity]] = caption_entities self.thumbnail: Optional[Union[str, InputFile]] = thumbnail - if isinstance(self.thumbnail, InputFile): - self._thumbnail_name = service_utils.generate_random_token() - self._thumbnail_dic = 'attach://{0}'.format(self._thumbnail_name) - else: + if 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 = '' self._media_dic = self.media @@ -6721,7 +6722,9 @@ def to_json(self): return json.dumps(self.to_dict()) def to_dict(self): - json_dict = {'type': self.type, 'media': self._media_dic, 'thumbnail': self._thumbnail_dic} + 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: @@ -6736,8 +6739,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, self._thumbnail_name: self.thumbnail} + return self.to_json(), media_dict class InputMediaPhoto(InputMedia): From ded461fcc1e6a48ec86e50f3495055f0688e30fe Mon Sep 17 00:00:00 2001 From: "g.zinovev" Date: Tue, 6 May 2025 22:52:02 +0300 Subject: [PATCH 3/3] Address maintainer feedback: [fixed thumbnail is None] --- telebot/types.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/telebot/types.py b/telebot/types.py index 0d0361dcb..2cd194d21 100644 --- a/telebot/types.py +++ b/telebot/types.py @@ -6703,10 +6703,12 @@ def __init__(self, type, media, caption=None, parse_mode=None, caption_entities= self.caption_entities: Optional[List[MessageEntity]] = caption_entities self.thumbnail: Optional[Union[str, InputFile]] = thumbnail - if service_utils.is_string(self.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)