aboutsummaryrefslogtreecommitdiff
path: root/discord/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'discord/utils.py')
-rw-r--r--discord/utils.py10
1 files changed, 8 insertions, 2 deletions
diff --git a/discord/utils.py b/discord/utils.py
index 49ca2e5c..f9fc20ac 100644
--- a/discord/utils.py
+++ b/discord/utils.py
@@ -43,6 +43,7 @@ from .errors import InvalidArgument
from .object import Object
DISCORD_EPOCH = 1420070400000
+MAX_ASYNCIO_SECONDS = 3456000
class cached_property:
def __init__(self, function):
@@ -338,7 +339,7 @@ async def sane_wait_for(futures, *, timeout):
return done
-async def sleep_until(when):
+async def sleep_until(when, result=None):
"""Sleep until a specified time.
If the time supplied is in the past this function will yield instantly.
@@ -347,6 +348,8 @@ async def sleep_until(when):
-----------
when: :class:`datetime.datetime`
The timestamp in which to sleep until.
+ result: Any
+ If provided is returned to the caller when the coroutine completes.
.. versionadded:: 1.3
"""
@@ -354,7 +357,10 @@ async def sleep_until(when):
when = when.replace(tzinfo=datetime.timezone.utc)
now = datetime.datetime.now(datetime.timezone.utc)
delta = (when - now).total_seconds()
- await asyncio.sleep(max(delta, 0))
+ while delta > MAX_ASYNCIO_SECONDS:
+ await asyncio.sleep(MAX_ASYNCIO_SECONDS)
+ delta -= MAX_ASYNCIO_SECONDS
+ return await asyncio.sleep(max(delta, 0), result)
def valid_icon_size(size):
"""Icons must be power of 2 within [16, 4096]."""