feat: telegram commands, app settings, bot polling, webhook handling, UI improvements

Adds telegram bot command system with 13 commands (search, latest, random, etc.),
webhook/polling handlers, rate limiting, app settings page, and various UI/UX
improvements across all entity pages.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-20 23:11:42 +03:00
parent 5015e378fe
commit 03ec9b3c86
64 changed files with 2585 additions and 648 deletions
+83 -11
View File
@@ -12,6 +12,7 @@
"telegramBots": "Bots",
"targets": "Targets",
"users": "Users",
"settings": "Settings",
"logout": "Logout"
},
"auth": {
@@ -62,6 +63,7 @@
"assets": "assets",
"eventActivity": "Event Activity",
"last14days": "Last 14 days",
"event": "event",
"events": "events",
"noChartData": "No event data yet"
},
@@ -85,7 +87,11 @@
"checking": "Checking...",
"loadError": "Failed to load providers.",
"externalDomain": "External Domain",
"optional": "optional"
"optional": "optional",
"urlApiKeyRequired": "URL and API Key are required",
"externalDomainHint": "Public-facing URL for notification links. Falls back to server URL.",
"testAndSave": "Test & Save",
"saveWithoutTest": "Save without testing"
},
"trackers": {
"title": "Trackers",
@@ -134,7 +140,16 @@
"testBasic": "Send test message",
"testPeriodic": "Test periodic summary",
"testScheduled": "Test scheduled assets",
"testMemory": "Test memory / On This Day"
"testMemory": "Test memory / On This Day",
"checkingLinks": "Checking links...",
"missingLinksTitle": "Albums Missing Public Links",
"missingLinksDesc": "The following albums don't have public shared links. Without links, notification recipients won't be able to view photos.",
"expired": "Expired",
"passwordProtected": "Password Protected",
"noLink": "No Link",
"saveWithoutLinks": "Save without links",
"createLinks": "Create {count} link(s)",
"linksNote": "You can also create links manually in Immich."
},
"templates": {
"title": "Templates",
@@ -198,7 +213,8 @@
"create": "Create User",
"delete": "Delete",
"confirmDelete": "Delete this user?",
"joined": "joined"
"joined": "joined",
"noUsers": "No users found"
},
"telegramBot": {
"title": "Telegram Bots",
@@ -220,21 +236,48 @@
"channel": "Channel",
"confirmDelete": "Delete this bot?",
"commands": "Commands",
"enabledCommands": "Enabled Commands",
"defaultCount": "Default result count",
"enabledCommands": "Enabled commands",
"defaultCount": "Default count",
"responseMode": "Response mode",
"modeMedia": "Media (send photos)",
"modeText": "Text (send links)",
"modeMedia": "Media (photos)",
"modeText": "Text only",
"botLocale": "Bot language",
"rateLimits": "Rate Limits",
"rateSearch": "Search cooldown",
"rateFind": "Find cooldown",
"rateDefault": "Default cooldown",
"syncCommands": "Sync to Telegram",
"syncCommands": "Sync with Telegram",
"discoverChats": "Discover chats from Telegram",
"clickToCopy": "Click to copy chat ID",
"chatsDiscovered": "Chats discovered",
"chatDeleted": "Chat removed"
"chatDeleted": "Chat removed",
"cmdLocale": "Bot language",
"searchCooldown": "Search cooldown (s)",
"saveConfig": "Save config",
"commandsSynced": "Commands synced with Telegram",
"registerWebhook": "Register webhook",
"unregisterWebhook": "Unregister webhook",
"webhookRegistered": "Webhook registered",
"webhookUnregistered": "Webhook unregistered",
"updateMode": "Update mode",
"polling": "Polling",
"webhook": "Webhook",
"webhookStatus": "Webhook status",
"webhookActive": "Webhook active",
"webhookNotSet": "No webhook set",
"webhookVerified": "Webhook verified",
"webhookError": "Last error",
"pendingUpdates": "pending updates",
"pollingActive": "Polling active",
"telegramSettings": "Telegram Settings",
"externalUrl": "External URL",
"externalUrlHint": "Public URL of this Notify Bridge instance. Required for webhook mode.",
"webhookSecret": "Webhook secret",
"webhookSecretHint": "Optional secret token to verify webhook requests from Telegram",
"cacheTtl": "Media cache TTL (hours)",
"cacheTtlHint": "How long to cache uploaded Telegram file_ids before re-uploading (default: 48h)",
"settingsSaved": "Settings saved",
"noExternalDomain": "External domain URL not configured"
},
"trackingConfig": {
"title": "Tracking Configs",
@@ -269,6 +312,9 @@
"assetType": "Asset type",
"minRating": "Min rating",
"memoryMode": "Memory Mode (On This Day)",
"memorySource": "Memory source",
"memorySourceAlbums": "Scan tracked albums",
"memorySourceNative": "Immich native memories",
"test": "Test",
"confirmDelete": "Delete this tracking config?",
"sortNone": "None",
@@ -282,7 +328,14 @@
"albumModeRandom": "Random",
"assetTypeAll": "All",
"assetTypePhoto": "Photo",
"assetTypeVideo": "Video"
"assetTypeVideo": "Video",
"periodic": "periodic",
"scheduled": "scheduled",
"memory": "memory",
"added": "added",
"removed": "removed",
"renamed": "renamed",
"deleted": "deleted"
},
"templateConfig": {
"title": "Template Configs",
@@ -324,7 +377,8 @@
"variables": "Variables",
"assetFields": "Asset fields (in {% for asset in added_assets %})",
"albumFields": "Album fields (in {% for album in albums %})",
"confirmDelete": "Delete this template config?"
"confirmDelete": "Delete this template config?",
"invalidFormat": "Invalid format string"
},
"templateVars": {
"message_assets_added": { "description": "Notification when new assets are added to an album" },
@@ -378,10 +432,24 @@
"album_url_field": "Album share URL",
"album_shared": "Whether album is shared"
},
"settings": {
"title": "Settings",
"description": "Global application settings",
"general": "General",
"externalUrl": "External URL",
"externalUrlHint": "Public URL of this Notify Bridge instance (e.g. https://notify.example.com)",
"telegram": "Telegram",
"webhookSecret": "Webhook Secret",
"webhookSecretHint": "Secret token to verify webhook requests from Telegram",
"cacheTtl": "Media Cache TTL (hours)",
"cacheTtlHint": "How long to cache uploaded Telegram file_ids before re-uploading",
"saved": "Settings saved"
},
"hints": {
"periodicSummary": "Sends a scheduled summary of all tracked albums at specified times. Great for daily/weekly digests.",
"scheduledAssets": "Sends random or selected photos from tracked albums on a schedule. Like a daily photo pick.",
"memoryMode": "\"On This Day\" — sends photos taken on this date in previous years. Nostalgic flashbacks.",
"memorySource": "Albums: scans tracked albums for date-matching assets. Native: uses Immich's built-in memories (covers entire library, optionally filtered by tracked albums).",
"favoritesOnly": "Only include assets marked as favorites.",
"maxAssets": "Maximum number of asset details to include in a single notification message.",
"periodicStartDate": "The reference date for calculating periodic intervals. Summaries are sent every N days from this date.",
@@ -406,6 +474,10 @@
"botLocale": "Language for command descriptions in Telegram's menu and bot response messages.",
"rateLimits": "Cooldown in seconds between uses of each command category per chat. 0 = no limit."
},
"snackbar": {
"showDetails": "Show details",
"hideDetails": "Hide details"
},
"snack": {
"providerSaved": "Provider saved",
"providerDeleted": "Provider deleted",