@islamic-kit/zikr
Version:
islamic lessons, quotes, hadith, etc to share
55 lines (45 loc) • 1.69 kB
text/typescript
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]
}
})
}
({ group: 'zikr', params: ['name'] })
public configureTarget(target: INotificationTarget) {
this.targets[target.name].push(target)
}
({ group: 'zikr', hint: 'Zikr Notifier' })
start() {
this.scheduleZikrList()
this.scheduler.start()
}
}