diff --git a/src/app.ts b/src/app.ts index 4685a8d..84045c1 100644 --- a/src/app.ts +++ b/src/app.ts @@ -90,7 +90,14 @@ async function events_check_for_notification() { for ( const ev of list_of_events ) { console.log("loop list_of_events - ev: " + [ ev.uid, ev.title, ev.date_at, "notification: " + ev.notification ].join( ", " ) ); console.log("loop list_of_events - ev 'title': " + ev.get_title() ); - await sendNotification( ev.get_title(), ev.get_body() ); + const notificationOptions = { + ntfy: null, + discord: { + avatar_url: ( process.env.dc_avatar_url as string), + botname: ( process.env.dc_botname as string) + } + }; + await sendNotification( ev.get_title(), ev.get_body(), notificationOptions ); if ( ev.notification == "removed" ) { ev.set_deleted( db ); } diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 0000000..ec28254 --- /dev/null +++ b/src/config.ts @@ -0,0 +1,16 @@ +export const config = { + apprise: { + services: { + ntfy: { + url: `ntfys://${process.env.ntfy_username}:${process.env.ntfy_password}@${process.env.ntfy_host}/${process.env.ntfy_topic}`, + defaults: { + + } + } + }, + urls: [ + `ntfys://${process.env.ntfy_username}:${process.env.ntfy_password}@${process.env.ntfy_host}/${process.env.ntfy_topic}`, + `discord://${process.env.dc_webhook}?avatar_url=${process.env.dc_avatar_url}&botname=${process.env.dc_botname}` + ] + } +} as const \ No newline at end of file diff --git a/src/sendNotification.ts b/src/sendNotification.ts index a310afb..f553424 100644 --- a/src/sendNotification.ts +++ b/src/sendNotification.ts @@ -1,11 +1,27 @@ -export async function sendNotification(title: string, body: string, link?: string | null) { +import { createQS } from "./util"; + +type TSendNotificationOptions = { + ntfy: { + link?: string; + } | null, + discord: { + href?: string + avatar_url: string, + botname: string + } +} + +export async function sendNotification( title: string, body: string, options: TSendNotificationOptions ) { console.dir({ sendNotification: { title, - body, - link + body } }); + const QS = { + ntfy: options.ntfy ? createQS(options.ntfy) : null, + discord: createQS(options.discord) + } if ( ! ( process.env.notification_mock == "true" ) ) { const response = await fetch(`${ process.env.apprise_https == "true" ? "https" : "http"}://${process.env.apprise_host ? process.env.apprise_host : "apprise"}:${process.env.apprise_port ? String(process.env.apprise_port) : "80" }/notify`, { method: "POST", @@ -14,8 +30,8 @@ export async function sendNotification(title: string, body: string, link?: strin }, body: JSON.stringify({ urls: [ - `ntfys://${process.env.ntfy_username}:${process.env.ntfy_password}@${process.env.ntfy_host}/${process.env.ntfy_topic}${ link ? `?click=${link}`: "?click=https://77th-jsoc.com/#/events" }`, - `discord://${process.env.dc_webhook}?avatar_url=${process.env.dc_avatar_url}&botname=${process.env.dc_botname}` + `ntfys://${process.env.ntfy_username}:${process.env.ntfy_password}@${process.env.ntfy_host}/${process.env.ntfy_topic}${ QS.ntfy ? "?" + QS.ntfy : ""}`, + `discord://${process.env.dc_webhook}?${QS.discord}` ].join(","), title: title, body: body, diff --git a/src/util.ts b/src/util.ts index fff08e5..74c0126 100644 --- a/src/util.ts +++ b/src/util.ts @@ -88,4 +88,11 @@ export function isEuropeanDST( date: Date ) { // Return true if within DST period return date >= start && date < end; +} + +export function createQS (params: Record): string { + const queryString = Object.entries(params) + .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`) + .join("&"); + return queryString; } \ No newline at end of file