UNPKG

@islamic-kit/zikr

Version:

islamic lessons, quotes, hadith, etc to share

55 lines (45 loc) 1.69 kB
import { logger, formatDate } from "@islamic-kit/common"; import { Scheduler } from "@islamic-kit/scheduler"; import { resolve } from "path"; export class ZikrNotifier { private scheduler: Scheduler; private targets: { [ T in NotificationTarget ] : INotificationTarget[] } constructor(private config: IZikrConfig) { this.scheduler = new Scheduler() this.targets = { slack: [] } } private scheduleZikrList() { this.scheduleSlackZikr(this.config) } private scheduleSlackZikr(zikrConfig: IZikrConfig) { this.targets.slack.forEach((target: INotificationTarget) => { zikrConfig.list.forEach((zikr: IZikrNotification) => { this.scheduleSlackNotification(target.options, zikr) }) }) } private scheduleSlackNotification(slackMessageConfig: ISlackMessageOptions, zikr: IZikrNotification) { const { time, date, year, month, utcOffset } = zikr const datetime = formatDate({ time, date, year, month, utcOffset }) this.scheduler.schedule({ name: zikr.content, description: zikr.content, datetime, script: { path: resolve(__dirname, 'sendToSlack.js'), args: [JSON.stringify(slackMessageConfig), zikr.content] } }) } @logger({ group: 'zikr', params: ['name'] }) public configureTarget(target: INotificationTarget) { this.targets[target.name].push(target) } @logger({ group: 'zikr', hint: 'Zikr Notifier' }) start() { this.scheduleZikrList() this.scheduler.start() } }