diff --git a/telethon/client/users.py b/telethon/client/users.py index 7d352d0f..33c3737e 100644 --- a/telethon/client/users.py +++ b/telethon/client/users.py @@ -1,4 +1,5 @@ import asyncio +import datetime import itertools import time import typing @@ -14,6 +15,16 @@ if typing.TYPE_CHECKING: from .telegramclient import TelegramClient +def _fmt_flood(delay, request, *, early=False, td=datetime.timedelta): + return ( + 'Sleeping%s for %ds (%s) on %s flood wait', + ' early' if early else '', + delay, + td(seconds=delay), + request.__class__.__name__ + ) + + class UserMethods: async def __call__(self: 'TelegramClient', request, ordered=False): requests = (request if utils.is_list_like(request) else (request,)) @@ -29,8 +40,7 @@ class UserMethods: if diff <= 3: # Flood waits below 3 seconds are "ignored" self._flood_waited_requests.pop(r.CONSTRUCTOR_ID, None) elif diff <= self.flood_sleep_threshold: - self._log[__name__].info( - 'Sleeping early for %ds on flood wait', diff) + self._log[__name__].info(*_fmt_flood(diff, r, early=True)) await asyncio.sleep(diff, loop=self._loop) self._flood_waited_requests.pop(r.CONSTRUCTOR_ID, None) else: @@ -80,8 +90,7 @@ class UserMethods: [request.CONSTRUCTOR_ID] = time.time() + e.seconds if e.seconds <= self.flood_sleep_threshold: - self._log[__name__].info('Sleeping for %ds on flood wait', - e.seconds) + self._log[__name__].info(*_fmt_flood(e.seconds, request)) await asyncio.sleep(e.seconds, loop=self._loop) else: raise