# Birthday Plugin Standalone Lumi plugin for birthday profile settings, chat commands, Discord birthday announcements, and optional echonomy birthday gifts. ## Install Install `updates/lumi-plugin-birthday-v0.1.0.zip` through Admin -> Plugins. The ZIP is built from the contents of this folder, so `plugin.json` is at the ZIP root. ## Commands - `!birthday` shows help and the caller's stored birthday when available. - `!birthday set YYYY/MM/DD` stores a full birthday. - `!birthday set MM/DD` stores a birthday without a year. - `!birthday unset` removes the caller's birthday. - `!birthday ` looks up a Lumi user by internal username, linked display name, provider user ID, or Discord mention. - `!birthday claim` claims the configured gift when manual gift mode is enabled. The `bday` alias is also registered. The command supports Discord, Twitch, and YouTube command contexts. ## WebUI - Admin/mod page: `/plugins/birthday` - Owner profile section: rendered on `/profile` through `web.addProfileSection` - Visitor birthday card: `/plugins/birthday/u/:username` Lumi currently exposes an owner profile section hook, but this repository does not expose a separate public visitor profile hook for plugins. Because of that, visitor display is implemented as the plugin route above instead of being injected into a core public profile page. ## Storage Birthdays are stored in plugin-owned tables: - `birthday_profiles` - `birthday_deliveries` Plugin settings are stored in `plugin_settings` with `plugin_id = 'birthday'`. ## Notes - Accepted date formats are `YYYY/MM/DD` and `MM/DD`. - Dash-separated dates and `DD/MM` dates are rejected. - Default privacy is `limited`. - If echonomy is not loaded, birthday announcements still work and gifts are skipped. - Automatic gifts are delivered once per birthday occurrence. Manual gifts are claimed once per birthday occurrence.