feat: entity relationship refactor — notification trackers, command system, chat actions

Rework entity schema: rename Tracker→NotificationTracker, add CommandConfig/
CommandTracker/CommandTrackerListener entities for decoupled command handling.
Commands now resolve through CommandTracker→CommandConfig instead of
TelegramBot.commands_config. Smart ref-counted bot polling based on active
listeners. Add chat_action to telegram targets. Full frontend CRUD pages
for command configs and command trackers. Idempotent SQLite migrations.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-21 01:27:20 +03:00
parent 0dcca2fbe6
commit 1d445f3980
34 changed files with 2777 additions and 582 deletions
+59 -5
View File
@@ -6,11 +6,13 @@
"nav": {
"dashboard": "Dashboard",
"providers": "Providers",
"trackers": "Trackers",
"notificationTrackers": "Notif. Trackers",
"trackingConfigs": "Tracking",
"templateConfigs": "Templates",
"telegramBots": "Bots",
"targets": "Targets",
"commandConfigs": "Cmd Configs",
"commandTrackers": "Cmd Trackers",
"users": "Users",
"settings": "Settings",
"logout": "Logout"
@@ -93,8 +95,8 @@
"testAndSave": "Test & Save",
"saveWithoutTest": "Save without testing"
},
"trackers": {
"title": "Trackers",
"notificationTracker": {
"title": "Notification Trackers",
"description": "Monitor albums for changes",
"newTracker": "New Tracker",
"cancel": "Cancel",
@@ -198,7 +200,9 @@
"maxAssetSize": "Max asset size (MB)",
"videoWarning": "Video size warning",
"disableUrlPreview": "Disable link previews",
"sendLargeAsDocuments": "Send large photos as documents"
"sendLargeAsDocuments": "Send large photos as documents",
"chatAction": "Chat action",
"chatActionNone": "None (no action)"
},
"users": {
"title": "Users",
@@ -474,6 +478,47 @@
"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."
},
"commandConfig": {
"title": "Command Configs",
"description": "Define command settings for Telegram bot interactions",
"newConfig": "New Config",
"name": "Name",
"namePlaceholder": "Default commands",
"providerType": "Provider Type",
"enabledCommands": "Enabled Commands",
"locale": "Locale",
"responseMode": "Response Mode",
"modeMedia": "Media (photos)",
"modeText": "Text only",
"defaultCount": "Default Count",
"rateLimits": "Rate Limits",
"searchCooldown": "Search cooldown (s)",
"defaultCooldown": "Default cooldown (s)",
"noConfigs": "No command configs yet.",
"confirmDelete": "Delete this command config?",
"commands": "commands"
},
"commandTracker": {
"title": "Command Trackers",
"description": "Manage command trackers and their listeners",
"newTracker": "New Tracker",
"name": "Name",
"namePlaceholder": "Family commands",
"provider": "Provider",
"selectProvider": "Select provider...",
"commandConfig": "Command Config",
"selectCommandConfig": "Select command config...",
"listeners": "Listeners",
"addListener": "Add Listener",
"removeListener": "Remove",
"noTrackers": "No command trackers yet.",
"confirmDelete": "Delete this command tracker?",
"enabled": "Enabled",
"disabled": "Disabled",
"noListeners": "No listeners attached.",
"selectBot": "Select bot...",
"listenerType": "telegram_bot"
},
"snackbar": {
"showDetails": "Show details",
"hideDetails": "Hide details"
@@ -504,7 +549,16 @@
"commandsSynced": "Commands synced to Telegram",
"targetLinked": "Target linked",
"targetUnlinked": "Target unlinked",
"botUpdated": "Bot updated"
"botUpdated": "Bot updated",
"commandConfigSaved": "Command config saved",
"commandConfigDeleted": "Command config deleted",
"commandTrackerCreated": "Command tracker created",
"commandTrackerUpdated": "Command tracker updated",
"commandTrackerDeleted": "Command tracker deleted",
"commandTrackerEnabled": "Command tracker enabled",
"commandTrackerDisabled": "Command tracker disabled",
"listenerAdded": "Listener added",
"listenerRemoved": "Listener removed"
},
"common": {
"loading": "Loading...",
+59 -5
View File
@@ -6,11 +6,13 @@
"nav": {
"dashboard": "Главная",
"providers": "Провайдеры",
"trackers": "Трекеры",
"notificationTrackers": "Трекеры увед.",
"trackingConfigs": "Отслеживание",
"templateConfigs": "Шаблоны",
"telegramBots": "Боты",
"targets": "Получатели",
"commandConfigs": "Конф. команд",
"commandTrackers": "Трекеры команд",
"users": "Пользователи",
"settings": "Настройки",
"logout": "Выход"
@@ -93,8 +95,8 @@
"testAndSave": "Проверить и сохранить",
"saveWithoutTest": "Сохранить без проверки"
},
"trackers": {
"title": "Трекеры",
"notificationTracker": {
"title": "Трекеры уведомлений",
"description": "Отслеживание изменений в альбомах",
"newTracker": "Новый трекер",
"cancel": "Отмена",
@@ -198,7 +200,9 @@
"maxAssetSize": "Макс. размер файла (МБ)",
"videoWarning": "Предупреждение о размере видео",
"disableUrlPreview": "Отключить превью ссылок",
"sendLargeAsDocuments": "Отправлять большие фото как документы"
"sendLargeAsDocuments": "Отправлять большие фото как документы",
"chatAction": "Действие в чате",
"chatActionNone": "Нет (без действия)"
},
"users": {
"title": "Пользователи",
@@ -474,6 +478,47 @@
"botLocale": "Язык описаний команд в меню Telegram и ответов бота.",
"rateLimits": "Кулдаун в секундах между использованиями команд в каждом чате. 0 = без ограничений."
},
"commandConfig": {
"title": "Конфигурации команд",
"description": "Настройки команд для взаимодействия с Telegram-ботами",
"newConfig": "Новая конфигурация",
"name": "Название",
"namePlaceholder": "Команды по умолчанию",
"providerType": "Тип провайдера",
"enabledCommands": "Включённые команды",
"locale": "Язык",
"responseMode": "Режим ответа",
"modeMedia": "Медиа (фото)",
"modeText": "Только текст",
"defaultCount": "Кол-во по умолчанию",
"rateLimits": "Ограничения частоты",
"searchCooldown": "Кулдаун поиска (с)",
"defaultCooldown": "Кулдаун по умолчанию (с)",
"noConfigs": "Конфигураций команд пока нет.",
"confirmDelete": "Удалить эту конфигурацию команд?",
"commands": "команд"
},
"commandTracker": {
"title": "Трекеры команд",
"description": "Управление трекерами команд и их слушателями",
"newTracker": "Новый трекер",
"name": "Название",
"namePlaceholder": "Семейные команды",
"provider": "Провайдер",
"selectProvider": "Выберите провайдер...",
"commandConfig": "Конфигурация команд",
"selectCommandConfig": "Выберите конфигурацию...",
"listeners": "Слушатели",
"addListener": "Добавить слушателя",
"removeListener": "Удалить",
"noTrackers": "Трекеров команд пока нет.",
"confirmDelete": "Удалить этот трекер команд?",
"enabled": "Включён",
"disabled": "Отключён",
"noListeners": "Нет подключённых слушателей.",
"selectBot": "Выберите бота...",
"listenerType": "telegram_bot"
},
"snackbar": {
"showDetails": "Показать детали",
"hideDetails": "Скрыть детали"
@@ -504,7 +549,16 @@
"commandsSynced": "Команды синхронизированы с Telegram",
"targetLinked": "Получатель привязан",
"targetUnlinked": "Получатель отвязан",
"botUpdated": "Бот обновлён"
"botUpdated": "Бот обновлён",
"commandConfigSaved": "Конфигурация команд сохранена",
"commandConfigDeleted": "Конфигурация команд удалена",
"commandTrackerCreated": "Трекер команд создан",
"commandTrackerUpdated": "Трекер команд обновлён",
"commandTrackerDeleted": "Трекер команд удалён",
"commandTrackerEnabled": "Трекер команд включён",
"commandTrackerDisabled": "Трекер команд отключён",
"listenerAdded": "Слушатель добавлен",
"listenerRemoved": "Слушатель удалён"
},
"common": {
"loading": "Загрузка...",