Visitar URL original
GitHub - ezer-mackenzie/discord-date-transformer: Python utility to parse, transform, and format dates into dynamic Discord timestamp markdown tags. · GitHub
Skip to content

About

Python utility to parse, transform, and format dates into dynamic Discord timestamp markdown tags.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

discord-date-transformer

Reusable date and time transformers for discord.py application commands.

CI PyPI Python License: MIT

The package provides small, typed annotations that parse explicit temporal values in Discord slash commands. It intentionally avoids natural-language parsing.

Installation

pip install discord-date-transformer

Quick start

import discord
from discord import app_commands

from discord_date_transformer import (
    DurationTransform,
    ISODateTransform,
    TimeTransform,
)


@app_commands.command()
async def create_event(
    interaction: discord.Interaction,
    event_date: ISODateTransform,
    event_time: TimeTransform,
    duration: DurationTransform,
) -> None:
    await interaction.response.send_message(
        f"Event: {event_date} {event_time} ({duration})"
    )

Available transformers

Annotation Example input Return type Accepted syntax
ISODateTransform 2026-08-30 datetime.date Values accepted by date.fromisoformat()
ISODateTimeTransform 2026-08-30T18:30 datetime.datetime Values accepted by datetime.fromisoformat()
TimeTransform 18:30:45 datetime.time Values accepted by time.fromisoformat()
DurationTransform 2h datetime.timedelta One positive integer followed by s, m, h, d, or w
DateRangeTransform 2026-08-01/2026-08-30 tuple[date, date] Two ISO dates separated by /, with start no later than end
TimezoneTransform America/Santiago zoneinfo.ZoneInfo An available IANA timezone identifier

The concrete transformer classes are also public: ISODateTransformer, ISODateTimeTransformer, TimeTransformer, DurationTransformer, DateRangeTransformer, and TimezoneTransformer.

Date ranges

Date ranges use the exact syntax START/END. Both components follow date.fromisoformat(), and the end date may equal but cannot precede the start. The returned tuple is ordered as (start, end).

Timezones

Timezone identifiers are resolved by zoneinfo.ZoneInfo using the IANA timezone database available on the host. Identifiers are case-sensitive; UTC and America/Santiago are valid examples.

Duration syntax

Duration input uses exactly one unit and is case-sensitive:

Unit Meaning
s seconds
m minutes
h hours
d days
w weeks

Zero, negative, decimal, whitespace-padded, uppercase, and compound durations such as 1h30m are rejected.

Error handling

Invalid input raises discord.app_commands.TransformerError with the original parsing exception chained as its cause. This lets normal discord.py application command error handling process every parser failure consistently.

Requirements

  • Python 3.12 or newer
  • discord.py 2.7.1 or newer, below 3.0

Development

git clone https://github.com/ezer-mackenzie/discord-date-transformer.git
cd discord-date-transformer
uv sync --all-groups

Run the complete local checks:

uv run ruff check .
uv run ruff format --check .
uv run pytest
uv run mypy

See CONTRIBUTING.md for contribution and release instructions, SECURITY.md for private vulnerability reporting, and CHANGELOG.md for release history.

License

Released under the MIT License.

About

Python utility to parse, transform, and format dates into dynamic Discord timestamp markdown tags.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages