diff --git a/telethon/network/mtproto_sender.py b/telethon/network/mtproto_sender.py index 38bfd917..1dce4b05 100644 --- a/telethon/network/mtproto_sender.py +++ b/telethon/network/mtproto_sender.py @@ -281,9 +281,14 @@ class MtProtoSender: # Note that this code is IMPORTANT for skipping RPC results of # lost requests (i.e., ones from the previous connection session) - if not self._process_msg( - inner_msg_id, sequence, reader, updates): + try: + if not self._process_msg( + inner_msg_id, sequence, reader, updates): + reader.set_position(begin_position + inner_length) + except: + # If any error is raised, something went wrong; skip the packet reader.set_position(begin_position + inner_length) + raise return True diff --git a/telethon/telegram_bare_client.py b/telethon/telegram_bare_client.py index aa27b67c..8945d6f5 100644 --- a/telethon/telegram_bare_client.py +++ b/telethon/telegram_bare_client.py @@ -5,7 +5,9 @@ from os import path # Import some externalized utilities to work with the Telegram types and more from . import helpers as utils -from .errors import RPCError, FloodWaitError, FileMigrateError +from .errors import ( + RPCError, FloodWaitError, FileMigrateError, TypeNotFoundError +) from .network import authenticator, MtProtoSender, TcpTransport from .utils import get_appropriated_part_size @@ -140,6 +142,12 @@ class TelegramBareClient: self.dc_options = result.dc_options return True + except TypeNotFoundError as e: + # This is fine, probably layer migration + self._logger.debug('Found invalid item, probably migrating', e) + self.disconnect() + self.connect(exported_auth=exported_auth) + except (RPCError, ConnectionError) as error: # Probably errors from the previous session, ignore them self.disconnect()