Allow datetime in limit parameters for logs_from.
Add time_snowflake to convert a datetime to a "snowflake".
This commit is contained in:
parent
7bdddc37a0
commit
8e5347f4ed
@ -51,6 +51,7 @@ import logging, traceback
|
|||||||
import sys, re
|
import sys, re
|
||||||
import tempfile, os, hashlib
|
import tempfile, os, hashlib
|
||||||
import itertools
|
import itertools
|
||||||
|
import datetime
|
||||||
from random import randint as random_integer
|
from random import randint as random_integer
|
||||||
|
|
||||||
PY35 = sys.version_info >= (3, 5)
|
PY35 = sys.version_info >= (3, 5)
|
||||||
@ -1167,10 +1168,12 @@ class Client:
|
|||||||
The channel to obtain the logs from.
|
The channel to obtain the logs from.
|
||||||
limit : int
|
limit : int
|
||||||
The number of messages to retrieve.
|
The number of messages to retrieve.
|
||||||
before : :class:`Message`
|
before : :class:`Message` or `datetime`
|
||||||
The message before which all returned messages must be.
|
The message or date before which all returned messages must be.
|
||||||
after : :class:`Message`
|
If a date is provided it must be a timezone-naive datetime representing UTC time.
|
||||||
The message after which all returned messages must be.
|
after : :class:`Message` or `datetime`
|
||||||
|
The message or date after which all returned messages must be.
|
||||||
|
If a date is provided it must be a timezone-naive datetime representing UTC time.
|
||||||
|
|
||||||
Raises
|
Raises
|
||||||
------
|
------
|
||||||
@ -1210,9 +1213,15 @@ class Client:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if before:
|
if before:
|
||||||
params['before'] = before.id
|
if isinstance(before, datetime.datetime):
|
||||||
|
params['before'] = utils.time_snowflake(before, high=False)
|
||||||
|
else:
|
||||||
|
params['before'] = before.id
|
||||||
if after:
|
if after:
|
||||||
params['after'] = after.id
|
if isinstance(after, datetime.datetime):
|
||||||
|
params['after'] = utils.time_snowflake(after, high=True)
|
||||||
|
else:
|
||||||
|
params['after'] = after.id
|
||||||
|
|
||||||
response = yield from self.session.get(url, params=params, headers=self.headers)
|
response = yield from self.session.get(url, params=params, headers=self.headers)
|
||||||
log.debug(request_logging_format.format(method='GET', response=response))
|
log.debug(request_logging_format.format(method='GET', response=response))
|
||||||
|
@ -106,6 +106,24 @@ def snowflake_time(id):
|
|||||||
"""Returns the creation date in UTC of a discord id."""
|
"""Returns the creation date in UTC of a discord id."""
|
||||||
return datetime.datetime.utcfromtimestamp(((int(id) >> 22) + DISCORD_EPOCH) / 1000)
|
return datetime.datetime.utcfromtimestamp(((int(id) >> 22) + DISCORD_EPOCH) / 1000)
|
||||||
|
|
||||||
|
def time_snowflake(datetime_obj, high=False):
|
||||||
|
"""Returns a numeric snowflake pretending to be created at the given date.
|
||||||
|
|
||||||
|
When using as the lower end of a range, use time_snowflake(high=False) - 1 to be inclusive, high=True to be exclusive
|
||||||
|
When using as the higher end of a range, use time_snowflake(high=True) + 1 to be inclusive, high=False to be exclusive
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
-----------
|
||||||
|
datetime_obj
|
||||||
|
A timezone-naive datetime object representing UTC time.
|
||||||
|
high
|
||||||
|
Whether or not to set the lower 22 bit to high or low.
|
||||||
|
"""
|
||||||
|
unix_seconds = (datetime_obj - type(datetime_obj)(1970, 1, 1)).total_seconds()
|
||||||
|
discord_millis = int(unix_seconds * 1000 - DISCORD_EPOCH)
|
||||||
|
|
||||||
|
return (discord_millis << 22) + (2**22-1 if high else 0)
|
||||||
|
|
||||||
def find(predicate, seq):
|
def find(predicate, seq):
|
||||||
"""A helper to return the first element found in the sequence
|
"""A helper to return the first element found in the sequence
|
||||||
that meets the predicate. For example: ::
|
that meets the predicate. For example: ::
|
||||||
|
Loading…
x
Reference in New Issue
Block a user