From fd815e4c64c5b039d5e04f765374934425037582 Mon Sep 17 00:00:00 2001 From: Davte Date: Wed, 3 Jul 2019 22:29:02 +0200 Subject: [PATCH] Wrapper for editMessageText method written --- davtelepot/bot.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/davtelepot/bot.py b/davtelepot/bot.py index 8a5742a..fbf8542 100644 --- a/davtelepot/bot.py +++ b/davtelepot/bot.py @@ -840,6 +840,60 @@ class Bot(TelegramBot, ObjectWithDatabase): ) return sent_message_update + async def edit_message_text(self, text, + chat_id=None, message_id=None, + inline_message_id=None, + parse_mode='HTML', + disable_web_page_preview=None, + reply_markup=None, + update=None): + """Edit message text, sending new messages if necessary. + + This method wraps lower-level `TelegramBot.editMessageText` method. + Pass an `update` to extract a message identifier from it. + """ + if update is not None: + message_identifier = self.get_message_identifier(update) + if 'chat_id' in message_identifier: + chat_id = message_identifier['chat_id'] + message_id = message_identifier['message_id'] + if 'inline_message_id' in message_identifier: + inline_message_id = message_identifier['inline_message_id'] + for i, text_chunk in enumerate( + self.split_message_text( + text=text, + limit=self.__class__.TELEGRAM_MESSAGES_MAX_LEN - 200, + parse_mode=parse_mode + ) + ): + if i == 0: + edited_message = await self.editMessageText( + text=text_chunk, + chat_id=chat_id, + message_id=message_id, + inline_message_id=inline_message_id, + parse_mode=parse_mode, + disable_web_page_preview=disable_web_page_preview, + reply_markup=reply_markup + ) + if chat_id is None: + # Cannot send messages without a chat_id + # Inline keyboards attached to inline query results may be + # in chats the bot cannot reach. + break + else: + await self.send_message( + text=text, + chat_id=chat_id, + parse_mode=parse_mode, + disable_web_page_preview=disable_web_page_preview, + reply_markup=reply_markup, + update=update, + reply_to_update=True, + send_default_keyboard=False + ) + return edited_message + async def send_photo(self, chat_id=None, photo=None, caption=None, parse_mode=None,