Birthday
Automatic congratulations, optional role, canvas card
The Birthday module congratulates your server members automatically. Users register their date privately, the bot posts on time in the server's timezone — optionally with a graphical card and a role that's automatically removed after 24 hours.
Setup
- Enable the module: top-right toggle on the Birthday page
- Pick a congratulation channel: in the Settings tab, dropdown "Channel" → choose your channel
- Set timezone and time (default: 00:00 Europe/Berlin)
- Optional: set a birthday role, adjust the ping toggle, pick a canvas template
- Click "Save", then run '/'geburtstag panel to post the registration embed in a channel
User commands in Discord
Server members have four slash commands available:
/geburtstag set— Register or change your own birthday privately (max. 1× per year)/geburtstag remove— Delete your own entry anytime/geburtstag info— View a user's birthday (ephemeral)/geburtstag panel— Admin: post the registration panel with a click-button in the current channel
Template variables
The following variables are available in the canvas card and the fallback text:
| Variable | Result |
|---|---|
{user} | User mention (ping) |
{user.name} | Username (without discriminator) |
{age} | Current age (empty when no year was registered) |
{day} | Day as number (e.g. "15") |
{month} | Month as localised name ("June") |
{birthday} | Locale-formatted date ("15.06." / "06/15") |
{server} | Server name |
Example
🎂 Happy Birthday, {user}! Today you turn {age} — cheers from {server}.Timezone and time
The worker scans every minute through all enabled server configs and fires the congratulation when the server's local time matches the configured notify time. The timezone is an IANA zone like Europe/Berlin or America/New_York — DST transitions are handled automatically.
Birthday role (optional)
When you configure a role, the user gets it at the congratulation time for exactly 24 hours. Removal runs as a delayed BullMQ job — it survives bot restarts and is idempotent (does nothing if the role is already gone).
Canvas card
The Welcome card editor is embedded in the Settings tab (in birthday mode). Three pre-built templates are available, all freely customisable:
- Classic — Rose-orange gradient, large title with {user.name}, subtext with {birthday}
- Confetti — Dark background, yellow accent, also displays {age}
- Minimal — White background, subtle style with {birthday}
February 29 in non-leap years
Users born on February 29 are celebrated on February 28 in non-leap years (matches German § 187a BGB). In leap years like 2024 or 2028 the congratulation runs on February 29 as expected.
Dashboard tabs
The Birthday module has four tabs in the dashboard:
- Overview — Today's birthdays, upcoming birthdays, and a monthly view
- Entries — Table of all registered birthdays with search and month filter
- Add entry — Admin workflow: pick a user via the Discord search-picker and register a date
- Settings — Channel, timezone, time, role, ping toggle, canvas editor and fallback text
Privacy
Only day and month are required. The birth year may be omitted — in that case no age is stored or displayed. Server admins see the entries in the dashboard, but all user-facing commands reply ephemerally, so private registrations are never visible in the channel.
Frequent questions
- What happens when the bot is offline at the notify time?
- On next bot start, the tick worker resumes normally. If the congratulation day hasn't ended yet and 'lastCelebratedAt' isn't set, the congratulation is caught up — late, but exactly once.
- Can users register birthdays for other server members?
- No. With '/'geburtstag set users only register their own birthday. Server admins can register entries for other users in the dashboard — this is recorded in 'addedByUserId'.
- How often can a user change their birthday?
- At most once per year (measured from 'lastChangedAt'). This prevents date-hopping to grab repeated congratulations or the birthday role. Server admins can bypass the lock in the dashboard if needed.
- Does the congratulation also fire in a custom-bot setup?
- Yes. The worker resolves the right Discord client via custom-bot precedence — if a server has its own bot configured, that one posts the congratulation, otherwise the TeraOne default bot does.
- Can I test the module without waiting a day?
- Yes. Register yourself with today's date, set the notify time in the Settings tab to "now + 2 minutes" and save. The congratulation should appear in the configured channel within those 2 minutes.