feat: Receiver OOP hierarchy with per-receiver locale resolution

- Introduce Receiver base class + typed subclasses (TelegramReceiver,
  WebhookReceiver, EmailReceiver, etc.) in core/notifications/receiver.py
- Dispatcher uses typed Receiver objects instead of raw dicts, with
  per-receiver locale-aware template rendering
- load_link_data resolves locale from TelegramChat.language_override at
  load time: TargetReceiver.locale || chat.language_override || chat.language_code
- Add language_override field to TelegramChat (separate from auto-detected
  language_code), with per-chat commands toggle and command dispatch using
  override language
- Add locale field to TargetReceiver for explicit per-receiver overrides
This commit is contained in:
2026-03-23 21:20:31 +03:00
parent b3b6c31c4d
commit 1cfa72888c
16 changed files with 334 additions and 94 deletions
+1
View File
@@ -338,6 +338,7 @@
"chatName": "Name",
"chatType": "Type",
"chatLang": "Lang",
"langOverride": "Override",
"cmds": "Cmds",
"commandsToggle": "Toggle command listening for this chat",
"chatId": "Chat ID",
+1
View File
@@ -338,6 +338,7 @@
"chatName": "Имя",
"chatType": "Тип",
"chatLang": "Язык",
"langOverride": "Переопр.",
"cmds": "Команды",
"commandsToggle": "Включить/выключить команды для этого чата",
"chatId": "ID чата",
+1
View File
@@ -52,6 +52,7 @@ export interface TelegramChat {
type: string;
username: string;
language_code?: string;
language_override?: string;
commands_enabled: boolean;
discovered_at: string;
}