diff --git a/telethon/client/updates.py b/telethon/client/updates.py index f8967a29..1c259b00 100644 --- a/telethon/client/updates.py +++ b/telethon/client/updates.py @@ -177,7 +177,11 @@ class UpdateMethods(UserMethods): rnd = lambda: random.randrange(-2**63, 2**63) while self.is_connected(): try: - await asyncio.wait_for(self.disconnected, timeout=60) + await asyncio.wait_for( + asyncio.shield(self.disconnected, loop=self._loop), + timeout=60, + loop=self._loop + ) continue # We actually just want to act upon timeout except asyncio.TimeoutError: pass diff --git a/telethon/client/users.py b/telethon/client/users.py index 7bc396aa..b1133c80 100644 --- a/telethon/client/users.py +++ b/telethon/client/users.py @@ -1,12 +1,13 @@ import asyncio import itertools +import logging import time from .telegrambaseclient import TelegramBaseClient from .. import errors, utils from ..tl import TLObject, TLRequest, types, functions - +__log__ = logging.getLogger(__name__) _NOT_A_REQUEST = TypeError('You can only invoke requests, not types!') @@ -28,10 +29,12 @@ class UserMethods(TelegramBaseClient): return results else: return await future - except (errors.ServerError, errors.RpcCallFailError): - pass + except (errors.ServerError, errors.RpcCallFailError) as e: + __log__.warning('Telegram is having internal issues %s: %s', + e.__class__.__name__, e) except (errors.FloodWaitError, errors.FloodTestPhoneWaitError) as e: if e.seconds <= self.session.flood_sleep_threshold: + __log__.info('Sleeping for %ds on flood wait', e.seconds) await asyncio.sleep(e.seconds, loop=self._loop) else: raise