Skip to main content

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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

discord_date_transformer-0.2.0.tar.gz (5.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

discord_date_transformer-0.2.0-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

Details for the file discord_date_transformer-0.2.0.tar.gz.

File metadata

  • Download URL: discord_date_transformer-0.2.0.tar.gz
  • Upload date:
  • Size: 5.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for discord_date_transformer-0.2.0.tar.gz
Algorithm Hash digest
SHA256 a288278e457a57d3221917d210a4d48f4f9d4e851c9844ef7cfa2fad1a7ad6d0
MD5 15d348f90b92edea7843e5c2e7fa3024
BLAKE2b-256 abdae5bb7b5c25562a3ad93f8062821f90c0c9f440013ebf1bd6be38deea1076

See more details on using hashes here.

Provenance

The following attestation bundles were made for discord_date_transformer-0.2.0.tar.gz:

Publisher: publish.yml on ezer-mackenzie/discord-date-transformer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file discord_date_transformer-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for discord_date_transformer-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8c47c5044f78051ff2c7e552828434e95879d68eed3336e025e83fffb4823af4
MD5 de14ecb1fa3a9306cfaa218fca62b532
BLAKE2b-256 3a99ed7b9162c0dd1738b89071771a0861820b1fecb17f9ff03d037cd9c0ad3b

See more details on using hashes here.

Provenance

The following attestation bundles were made for discord_date_transformer-0.2.0-py3-none-any.whl:

Publisher: publish.yml on ezer-mackenzie/discord-date-transformer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page