From e83b74cb535a75538da521d95ecea95f68a52131 Mon Sep 17 00:00:00 2001 From: jiz4oh Date: Sun, 27 Apr 2025 17:15:38 +0800 Subject: [PATCH 1/4] fix: send media twice after edit a text message with Media --- efb_telegram_master/slave_message.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/efb_telegram_master/slave_message.py b/efb_telegram_master/slave_message.py index 8c4e9eeb..15a0a194 100644 --- a/efb_telegram_master/slave_message.py +++ b/efb_telegram_master/slave_message.py @@ -458,7 +458,9 @@ def slave_message_image(self, msg: Message, tg_dest: TelegramChatID, msg_templat media = InputMediaDocument(file) else: media = InputMediaPhoto(file) - self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=media) + res = self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=media) + if not text: + return res return self.bot.edit_message_caption(chat_id=old_msg_id[0], message_id=old_msg_id[1], reply_markup=reply_markup, prefix=msg_template, suffix=reactions, caption=text, parse_mode="HTML") @@ -535,7 +537,9 @@ def slave_message_animation(self, msg: Message, tg_dest: TelegramChatID, msg_tem if edit_media: assert msg.file and msg.path file = self.process_file_obj(msg.file, msg.path) - self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=InputMediaAnimation(file)) + res = self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=InputMediaAnimation(file)) + if not text: + return res return self.bot.edit_message_caption(chat_id=old_msg_id[0], message_id=old_msg_id[1], prefix=msg_template, suffix=reactions, reply_markup=reply_markup, @@ -693,7 +697,9 @@ def slave_message_file(self, msg: Message, tg_dest: TelegramChatID, msg_template if edit_media: assert msg.file is not None and msg.path is not None file = self.process_file_obj(msg.file, msg.path) - self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=InputMediaDocument(file)) + res = self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=InputMediaDocument(file)) + if not text: + return res return self.bot.edit_message_caption(chat_id=old_msg_id[0], message_id=old_msg_id[1], reply_markup=reply_markup, prefix=msg_template, suffix=reactions, caption=text, parse_mode="HTML") assert msg.file is not None and msg.path is not None @@ -828,7 +834,9 @@ def slave_message_video(self, msg: Message, tg_dest: TelegramChatID, msg_templat if edit_media: assert msg.file is not None and msg.path is not None file = self.process_file_obj(msg.file, msg.path) - self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=InputMediaVideo(file)) + res = self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=InputMediaVideo(file)) + if not text: + return res return self.bot.edit_message_caption(chat_id=old_msg_id[0], message_id=old_msg_id[1], reply_markup=reply_markup, prefix=msg_template, suffix=reactions, caption=text, parse_mode="HTML") assert msg.file is not None and msg.path is not None From d2ed30c19ab0de6e870fabb2d84145477c38f048 Mon Sep 17 00:00:00 2001 From: jiz4oh Date: Fri, 30 May 2025 12:46:36 +0800 Subject: [PATCH 2/4] fix: fix caption lost in group chat --- efb_telegram_master/bot_manager.py | 11 ++++++++++- efb_telegram_master/slave_message.py | 20 ++++++++------------ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/efb_telegram_master/bot_manager.py b/efb_telegram_master/bot_manager.py index 116633c7..f74baf03 100644 --- a/efb_telegram_master/bot_manager.py +++ b/efb_telegram_master/bot_manager.py @@ -489,9 +489,18 @@ def edit_message_caption(self, *args, **kwargs): return self.updater.bot.edit_message_caption(*args, **kwargs) @Decorators.retry_on_timeout + @Decorators.caption_affix_decorator @Decorators.retry_on_chat_migration def edit_message_media(self, *args, **kwargs): - return self.updater.bot.edit_message_media(*args, **kwargs) + text = kwargs.pop('caption', '') + parse_mode = kwargs.pop('parse_mode', None) + caption_entities = kwargs.pop('caption_entities', None) + edited_media_message = self.updater.bot.edit_message_media(*args, **kwargs) + if len(text) > 0: + kwargs.pop('media', None) + return self.updater.bot.edit_message_caption(*args, caption=text, parse_mode=parse_mode, caption_entities=caption_entities, **kwargs) + else: + return edited_media_message def reply_error(self, update, errmsg): """ diff --git a/efb_telegram_master/slave_message.py b/efb_telegram_master/slave_message.py index 15a0a194..491912fa 100644 --- a/efb_telegram_master/slave_message.py +++ b/efb_telegram_master/slave_message.py @@ -458,9 +458,8 @@ def slave_message_image(self, msg: Message, tg_dest: TelegramChatID, msg_templat media = InputMediaDocument(file) else: media = InputMediaPhoto(file) - res = self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=media) - if not text: - return res + return self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=media, reply_markup=reply_markup, + prefix=msg_template, suffix=reactions, caption=text, parse_mode="HTML") return self.bot.edit_message_caption(chat_id=old_msg_id[0], message_id=old_msg_id[1], reply_markup=reply_markup, prefix=msg_template, suffix=reactions, caption=text, parse_mode="HTML") @@ -537,9 +536,8 @@ def slave_message_animation(self, msg: Message, tg_dest: TelegramChatID, msg_tem if edit_media: assert msg.file and msg.path file = self.process_file_obj(msg.file, msg.path) - res = self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=InputMediaAnimation(file)) - if not text: - return res + return self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=InputMediaAnimation(file), reply_markup=reply_markup, + prefix=msg_template, suffix=reactions, caption=text, parse_mode="HTML") return self.bot.edit_message_caption(chat_id=old_msg_id[0], message_id=old_msg_id[1], prefix=msg_template, suffix=reactions, reply_markup=reply_markup, @@ -697,9 +695,8 @@ def slave_message_file(self, msg: Message, tg_dest: TelegramChatID, msg_template if edit_media: assert msg.file is not None and msg.path is not None file = self.process_file_obj(msg.file, msg.path) - res = self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=InputMediaDocument(file)) - if not text: - return res + return self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=InputMediaDocument(file), + prefix=msg_template, suffix=reactions, caption=text, parse_mode="HTML") return self.bot.edit_message_caption(chat_id=old_msg_id[0], message_id=old_msg_id[1], reply_markup=reply_markup, prefix=msg_template, suffix=reactions, caption=text, parse_mode="HTML") assert msg.file is not None and msg.path is not None @@ -834,9 +831,8 @@ def slave_message_video(self, msg: Message, tg_dest: TelegramChatID, msg_templat if edit_media: assert msg.file is not None and msg.path is not None file = self.process_file_obj(msg.file, msg.path) - res = self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=InputMediaVideo(file)) - if not text: - return res + return self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=InputMediaVideo(file), reply_markup=reply_markup, + prefix=msg_template, suffix=reactions, caption=text, parse_mode="HTML") return self.bot.edit_message_caption(chat_id=old_msg_id[0], message_id=old_msg_id[1], reply_markup=reply_markup, prefix=msg_template, suffix=reactions, caption=text, parse_mode="HTML") assert msg.file is not None and msg.path is not None From 06e2d9cc080760a9e9799b26a383b2bfb122bfcd Mon Sep 17 00:00:00 2001 From: jiz4oh Date: Fri, 30 May 2025 12:51:30 +0800 Subject: [PATCH 3/4] fix: add missing reply_markup --- efb_telegram_master/slave_message.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/efb_telegram_master/slave_message.py b/efb_telegram_master/slave_message.py index 491912fa..b76a2574 100644 --- a/efb_telegram_master/slave_message.py +++ b/efb_telegram_master/slave_message.py @@ -695,7 +695,7 @@ def slave_message_file(self, msg: Message, tg_dest: TelegramChatID, msg_template if edit_media: assert msg.file is not None and msg.path is not None file = self.process_file_obj(msg.file, msg.path) - return self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=InputMediaDocument(file), + return self.bot.edit_message_media(chat_id=old_msg_id[0], message_id=old_msg_id[1], media=InputMediaDocument(file), reply_markup=reply_markup, prefix=msg_template, suffix=reactions, caption=text, parse_mode="HTML") return self.bot.edit_message_caption(chat_id=old_msg_id[0], message_id=old_msg_id[1], reply_markup=reply_markup, prefix=msg_template, suffix=reactions, caption=text, parse_mode="HTML") From d38695b62ab31f61a91bf525c7b40e781ed8f0ba Mon Sep 17 00:00:00 2001 From: jiz4oh Date: Mon, 16 Jun 2025 09:11:35 +0800 Subject: [PATCH 4/4] feat: edit media with caption at once --- efb_telegram_master/bot_manager.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/efb_telegram_master/bot_manager.py b/efb_telegram_master/bot_manager.py index f74baf03..b16aaa16 100644 --- a/efb_telegram_master/bot_manager.py +++ b/efb_telegram_master/bot_manager.py @@ -492,15 +492,13 @@ def edit_message_caption(self, *args, **kwargs): @Decorators.caption_affix_decorator @Decorators.retry_on_chat_migration def edit_message_media(self, *args, **kwargs): - text = kwargs.pop('caption', '') + text = kwargs.pop('caption', None) parse_mode = kwargs.pop('parse_mode', None) + media = kwargs.pop('media', None) caption_entities = kwargs.pop('caption_entities', None) - edited_media_message = self.updater.bot.edit_message_media(*args, **kwargs) - if len(text) > 0: - kwargs.pop('media', None) - return self.updater.bot.edit_message_caption(*args, caption=text, parse_mode=parse_mode, caption_entities=caption_entities, **kwargs) - else: - return edited_media_message + media.caption = text + media.caption_entities = caption_entities + return self.updater.bot.edit_message_media(media=media, *args, **kwargs) def reply_error(self, update, errmsg): """