Source code for discord.snowflake
from . import DISCORD_EPOCH
from datetime import datetime
from typing import Self, Union
[docs]
class Snowflake:
"""Represents a Discord snowflake"""
def __eq__(self, other: Union[type[Self], int, str]) -> bool:
if not isinstance(other, (self.__class__, int, str)): return False
return str(other) == str(self)
def __hash__(self) -> int:
return self.__value
def __init__(self, value: Union[str, int], /) -> None:
if not isinstance(value, (str, int)):
raise TypeError(f"value: Must be an instance of either: {str}, or {int}; not {value.__class__}")
self.__value: Union[str, int] = int(value)
def __int__(self) -> int:
return self.__value
def __str__(self) -> str:
return str(self.__value)
@property
def increment(self) -> int:
"""For every ID that is generated on that process, this number is incremented"""
return self.__value & 0xFFF
@property
def internal_process_id(self) -> int:
return (self.__value & 0x1F000) >> 12
@property
def internal_worker_id(self) -> int:
return (self.__value & 0x3E0000) >> 17
@property
def timestamp(self) -> int:
"""Milliseconds since Discord Epoch, the first second of 2015 or ``1420070400000``"""
return (self.__value >> 22) + DISCORD_EPOCH
[docs]
def to_datetime(self) -> datetime:
"""Returns the corresponding :class:`datetime.datetime` object"""
return datetime.fromtimestamp(self.timestamp)