Skip to content

Commit

Permalink
Add timestamp parsing from snowflake objects
Browse files Browse the repository at this point in the history
  • Loading branch information
4Kaylum committed Jul 5, 2023
1 parent 03ac03b commit 6ded76e
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions novus/utils/times.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
from datetime import timezone
from typing import TYPE_CHECKING, overload

from ..models.abc import Snowflake

if TYPE_CHECKING:
from ..enums.time import TimestampFormat

Expand Down Expand Up @@ -67,7 +69,7 @@ def format(self, style) -> str:


@overload
def parse_timestamp(timestamp: dt | str) -> DiscordDatetime:
def parse_timestamp(timestamp: dt | str | Snowflake) -> DiscordDatetime:
...


Expand All @@ -76,7 +78,7 @@ def parse_timestamp(timestamp: None) -> None:
...


def parse_timestamp(timestamp: dt | str | None) -> DiscordDatetime | None:
def parse_timestamp(timestamp: dt | str | Snowflake | None) -> DiscordDatetime | None:
"""
Parse an isoformat timestamp from Discord.
Expand All @@ -97,6 +99,12 @@ def parse_timestamp(timestamp: dt | str | None) -> DiscordDatetime | None:
parsed = DiscordDatetime.fromisoformat(timestamp)
elif isinstance(timestamp, dt):
parsed = DiscordDatetime.fromisoformat(timestamp.isoformat())
elif isinstance(timestamp, Snowflake):
return (
DiscordDatetime
.fromtimestamp((timestamp.id >> 22) + 1_420_070_400_000)
.replace(tzinfo=timezone.utc)
)
return parsed


Expand Down

0 comments on commit 6ded76e

Please sign in to comment.