@dexare/cron
Version:
A Dexare module that manages cron jobs
70 lines (69 loc) • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const dexare_1 = require("dexare");
const path_1 = require("path");
const cron_1 = require("cron");
class CronModule extends dexare_1.DexareModule {
constructor(client) {
super(client, {
name: 'cron',
description: 'Cron job manager'
});
this.crons = new Map();
this.filePath = __filename;
}
load() {
if (this.client.config.cron?.loadFolder)
this.registerFromFolder(this.client.config.cron.loadFolder);
}
unload() {
for (const name in this.crons) {
const job = this.crons.get(name);
job.stop();
this.crons.delete(name);
}
}
/**
* Registers cron jobs from a folder.
* @param path The path to register from.
*/
registerFromFolder(path) {
return dexare_1.Util.iterateFolder(path, async (file) => this.register(require(path_1.join(process.cwd(), file))), '.cron.js');
}
/**
* Registers a cron job.
* @param opts The options for the new cron job
*/
register(opts) {
const jobOpts = {
cronTime: opts.cronTime,
onTick: this._wrapFn(opts.onTick),
onComplete: opts.onComplete ? this._wrapFn(opts.onComplete) : opts.onComplete,
start: opts.start,
timeZone: opts.timeZone,
runOnInit: opts.runOnInit,
utcOffset: opts.utcOffset,
unrefTimeout: opts.unrefTimeout
};
const job = new cron_1.CronJob(jobOpts);
this.crons.set(opts.name, job);
this.logger.log(`Registered cron job ${opts.name}.`);
return job;
}
/**
* Unregisters a cron job.
* @param job The job name to unregister
*/
unregister(job) {
this.crons.delete(job);
this.logger.log(`Unregistered cron job ${job}.`);
}
_wrapFn(fn) {
const _this = this;
return function () {
// @ts-ignore
return fn(_this.client, this);
};
}
}
exports.default = CronModule;