Allow datetime in limit parameters for logs_from.
Add time_snowflake to convert a datetime to a "snowflake".
This commit is contained in:
		
				
					committed by
					
						 Rapptz
						Rapptz
					
				
			
			
				
	
			
			
			
						parent
						
							7bdddc37a0
						
					
				
				
					commit
					8e5347f4ed
				
			| @@ -51,6 +51,7 @@ import logging, traceback | ||||
| import sys, re | ||||
| import tempfile, os, hashlib | ||||
| import itertools | ||||
| import datetime | ||||
| from random import randint as random_integer | ||||
|  | ||||
| PY35 = sys.version_info >= (3, 5) | ||||
| @@ -1167,10 +1168,12 @@ class Client: | ||||
|             The channel to obtain the logs from. | ||||
|         limit : int | ||||
|             The number of messages to retrieve. | ||||
|         before : :class:`Message` | ||||
|             The message before which all returned messages must be. | ||||
|         after : :class:`Message` | ||||
|             The message after which all returned messages must be. | ||||
|         before : :class:`Message` or `datetime` | ||||
|             The message or date before which all returned messages must be. | ||||
|             If a date is provided it must be a timezone-naive datetime representing UTC time. | ||||
|         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 | ||||
|         ------ | ||||
| @@ -1210,9 +1213,15 @@ class Client: | ||||
|         } | ||||
|  | ||||
|         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: | ||||
|             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) | ||||
|         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.""" | ||||
|     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): | ||||
|     """A helper to return the first element found in the sequence | ||||
|     that meets the predicate. For example: :: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user