telegram notification

This commit is contained in:
Jakub Trávník
2025-11-30 15:15:26 +01:00
parent 3bf3b22b96
commit 6fbb11fefe
7 changed files with 111 additions and 6 deletions

View File

@@ -5,6 +5,7 @@ import { buildDiscordShoutrrrUrl } from "./discord";
import { buildGotifyShoutrrrUrl } from "./gotify";
import { buildNtfyShoutrrrUrl } from "./ntfy";
import { buildPushoverShoutrrrUrl } from "./pushover";
import { buildTelegramShoutrrrUrl } from "./telegram";
import { buildCustomShoutrrrUrl } from "./custom";
export function buildShoutrrrUrl(config: NotificationConfig): string {
@@ -21,6 +22,8 @@ export function buildShoutrrrUrl(config: NotificationConfig): string {
return buildNtfyShoutrrrUrl(config);
case "pushover":
return buildPushoverShoutrrrUrl(config);
case "telegram":
return buildTelegramShoutrrrUrl(config);
case "custom":
return buildCustomShoutrrrUrl(config);
default: {

View File

@@ -0,0 +1,8 @@
import type { NotificationConfig } from "~/schemas/notifications";
export function buildTelegramShoutrrrUrl(config: Extract<NotificationConfig, { type: "telegram" }>): string {
// Shoutrrr format: telegram://bottoken@telegram?channels=chatid1,chatid2
// config: { type: 'telegram', botToken: string, chatId: string }
// Do NOT encode botToken or chatId; Shoutrrr expects raw values (colon, dash, etc.)
return `telegram://${config.botToken}@telegram?channels=${config.chatId}`;
}

View File

@@ -65,6 +65,11 @@ async function encryptSensitiveFields(config: NotificationConfig): Promise<Notif
...config,
apiToken: await cryptoUtils.encrypt(config.apiToken),
};
case "telegram":
return {
...config,
botToken: await cryptoUtils.encrypt(config.botToken),
};
case "custom":
return {
...config,
@@ -107,6 +112,11 @@ async function decryptSensitiveFields(config: NotificationConfig): Promise<Notif
...config,
apiToken: await cryptoUtils.decrypt(config.apiToken),
};
case "telegram":
return {
...config,
botToken: await cryptoUtils.decrypt(config.botToken),
};
case "custom":
return {
...config,