feat: Discord/Slack/ntfy/Matrix targets, command templates, delete protection, email/matrix bots

- Discord, Slack, ntfy, Matrix notification target types with clients and dispatch
- MatrixBot model + API + frontend in Bots tab
- Command template system fully wired into all handler commands
- Default command templates seeded (EN/RU, 14 slots each)
- Command template editor with variables reference including child fields
- Delete protection on all 10 entity types (409 with consumer details)
- Provider type selector on template config forms
- Target type selector as dropdown with all 7 types
- Response template selector on command config form
- CLAUDE.md: mandatory server restart rule, child properties rule
This commit is contained in:
2026-03-21 20:36:12 +03:00
parent 846d480d38
commit 3e3a6f0777
64 changed files with 1861 additions and 180 deletions
+35 -4
View File
@@ -178,7 +178,7 @@
},
"targets": {
"title": "Targets",
"description": "Notification destinations (Telegram, webhooks)",
"description": "Notification destinations (Telegram, Discord, Slack, Email, ntfy, Matrix, Webhooks)",
"addTarget": "Add Target",
"cancel": "Cancel",
"type": "Type",
@@ -203,7 +203,16 @@
"disableUrlPreview": "Disable link previews",
"sendLargeAsDocuments": "Send large photos as documents",
"chatAction": "Chat action",
"chatActionNone": "None (no action)"
"chatActionNone": "None (no action)",
"overrideUsername": "Override bot username",
"ntfyServer": "ntfy Server URL",
"ntfyTopic": "Topic",
"ntfyToken": "Auth Token",
"ntfyTokenPlaceholder": "Optional (for protected topics)",
"selectEmailBot": "Select Email Bot",
"selectMatrixBot": "Select Matrix Bot",
"recipientEmail": "Recipient Email",
"matrixRoomId": "Room ID"
},
"users": {
"title": "Users",
@@ -345,6 +354,7 @@
"templateConfig": {
"title": "Template Configs",
"description": "Define how notification messages are formatted",
"providerType": "Service Provider Type",
"newConfig": "New Config",
"name": "Name",
"namePlaceholder": "Default EN",
@@ -479,6 +489,21 @@
"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."
},
"matrixBot": {
"title": "Matrix Bots",
"description": "Matrix homeserver connections for room notifications",
"addBot": "Add Matrix Bot",
"name": "Name",
"namePlaceholder": "Home Server Bot",
"homeserverUrl": "Homeserver URL",
"accessToken": "Access Token",
"tokenPlaceholder": "syt_...",
"tokenUnchanged": "(unchanged)",
"displayName": "Display Name",
"testConnection": "Test connection",
"noBots": "No Matrix bots yet.",
"confirmDelete": "Delete this Matrix bot?"
},
"emailBot": {
"title": "Email Bots",
"description": "SMTP email senders for notifications",
@@ -527,7 +552,9 @@
"defaultCooldown": "Default cooldown (s)",
"noConfigs": "No command configs yet.",
"confirmDelete": "Delete this command config?",
"commands": "commands"
"commands": "commands",
"responseTemplate": "Response Template",
"noTemplate": "Default (hardcoded)"
},
"commandTracker": {
"title": "Command Trackers",
@@ -595,7 +622,11 @@
"emailBotCreated": "Email bot created",
"emailBotUpdated": "Email bot updated",
"emailBotDeleted": "Email bot deleted",
"emailBotTestSent": "Test email sent successfully"
"emailBotTestSent": "Test email sent successfully",
"matrixBotCreated": "Matrix bot created",
"matrixBotUpdated": "Matrix bot updated",
"matrixBotDeleted": "Matrix bot deleted",
"matrixBotTestOk": "Matrix connection verified"
},
"common": {
"loading": "Loading...",
+35 -4
View File
@@ -178,7 +178,7 @@
},
"targets": {
"title": "Получатели",
"description": "Адреса уведомлений (Telegram, вебхуки)",
"description": "Адреса уведомлений (Telegram, Discord, Slack, Email, ntfy, Matrix, вебхуки)",
"addTarget": "Добавить получателя",
"cancel": "Отмена",
"type": "Тип",
@@ -203,7 +203,16 @@
"disableUrlPreview": "Отключить превью ссылок",
"sendLargeAsDocuments": "Отправлять большие фото как документы",
"chatAction": "Действие в чате",
"chatActionNone": "Нет (без действия)"
"chatActionNone": "Нет (без действия)",
"overrideUsername": "Переопределить имя бота",
"ntfyServer": "URL сервера ntfy",
"ntfyTopic": "Тема",
"ntfyToken": "Токен авторизации",
"ntfyTokenPlaceholder": "Необязательно (для защищённых тем)",
"selectEmailBot": "Выберите Email бот",
"selectMatrixBot": "Выберите Matrix бот",
"recipientEmail": "Email получателя",
"matrixRoomId": "ID комнаты"
},
"users": {
"title": "Пользователи",
@@ -345,6 +354,7 @@
"templateConfig": {
"title": "Конфигурации шаблонов",
"description": "Определите формат уведомлений",
"providerType": "Тип сервис-провайдера",
"newConfig": "Новая конфигурация",
"name": "Название",
"namePlaceholder": "По умолчанию RU",
@@ -479,6 +489,21 @@
"botLocale": "Язык описаний команд в меню Telegram и ответов бота.",
"rateLimits": "Кулдаун в секундах между использованиями команд в каждом чате. 0 = без ограничений."
},
"matrixBot": {
"title": "Matrix боты",
"description": "Подключения к Matrix серверам для уведомлений в комнаты",
"addBot": "Добавить Matrix бот",
"name": "Название",
"namePlaceholder": "Бот для дома",
"homeserverUrl": "URL сервера",
"accessToken": "Токен доступа",
"tokenPlaceholder": "syt_...",
"tokenUnchanged": "(без изменений)",
"displayName": "Отображаемое имя",
"testConnection": "Проверить подключение",
"noBots": "Matrix ботов пока нет.",
"confirmDelete": "Удалить этот Matrix бот?"
},
"emailBot": {
"title": "Email боты",
"description": "SMTP отправители для уведомлений по email",
@@ -527,7 +552,9 @@
"defaultCooldown": "Кулдаун по умолчанию (с)",
"noConfigs": "Конфигураций команд пока нет.",
"confirmDelete": "Удалить эту конфигурацию команд?",
"commands": "команд"
"commands": "команд",
"responseTemplate": "Шаблон ответов",
"noTemplate": "По умолчанию (встроенный)"
},
"commandTracker": {
"title": "Трекеры команд",
@@ -595,7 +622,11 @@
"emailBotCreated": "Email бот создан",
"emailBotUpdated": "Email бот обновлён",
"emailBotDeleted": "Email бот удалён",
"emailBotTestSent": "Тестовое письмо отправлено"
"emailBotTestSent": "Тестовое письмо отправлено",
"matrixBotCreated": "Matrix бот создан",
"matrixBotUpdated": "Matrix бот обновлён",
"matrixBotDeleted": "Matrix бот удалён",
"matrixBotTestOk": "Подключение к Matrix проверено"
},
"common": {
"loading": "Загрузка...",