56 lines
2.0 KiB
JavaScript
56 lines
2.0 KiB
JavaScript
const cron = require('node-cron');
|
|
const { sendReminder } = require('../tasks/send_reminder');
|
|
const config = require('../config.json');
|
|
|
|
/**
|
|
* Convierte el intervalo en horas o minutos a minutos.
|
|
* @param {String} intervalo - Intervalo en el formato "2 horas" o "45 minutos".
|
|
* @returns {Number} - Intervalo en minutos.
|
|
*/
|
|
const getIntervalInMinutes = (intervalo) => {
|
|
const [amount, unit] = intervalo.split(' ');
|
|
return unit.includes('hora') ? parseInt(amount) * 60 : parseInt(amount);
|
|
};
|
|
|
|
/**
|
|
* Programa las tareas de recordatorio basadas en el horario y el intervalo.
|
|
* @param {Object} client - Instancia del cliente de WhatsApp.
|
|
*/
|
|
const initializeCronJobs = (client) => {
|
|
const dailyRoutines = config.rutinas.diarias;
|
|
|
|
dailyRoutines.forEach((routine) => {
|
|
const { actividad, detalles } = routine;
|
|
const { intervalo, horario, que, hora } = detalles;
|
|
|
|
if (intervalo && horario) {
|
|
const intervalInMinutes = getIntervalInMinutes(intervalo);
|
|
const [startHour, startMinute] = horario.inicio.split(':').map(Number);
|
|
const [endHour, endMinute] = horario.fin.split(':').map(Number);
|
|
|
|
cron.schedule(`*/${intervalInMinutes} * * * *`, () => {
|
|
const now = new Date();
|
|
const isWithinTimeFrame =
|
|
now.getHours() >= startHour &&
|
|
now.getHours() <= endHour &&
|
|
(now.getHours() < endHour || now.getMinutes() <= endMinute);
|
|
|
|
if (isWithinTimeFrame) {
|
|
sendReminder(client, actividad, que);
|
|
}
|
|
});
|
|
}
|
|
else if (hora) {
|
|
const [hour, minute] = hora.split(':');
|
|
cron.schedule(`${minute} ${hour} * * *`, () => {
|
|
sendReminder(client, actividad, que);
|
|
});
|
|
}
|
|
});
|
|
|
|
console.log('⏰ Recordatorios programados según configuración en config.json');
|
|
};
|
|
|
|
module.exports = {
|
|
initializeCronJobs
|
|
}; |