hubot-slack-reading-list
Version:
Build a reading list from emojied reactions on Slack
52 lines (39 loc) • 1.37 kB
JavaScript
;
process.env.TIMEZONE = process.env.TIMEZONE || 'America/New_York';
process.env.REPORT_TIME = process.env.REPORT_TIME || '4:00 pm';
const moment = require('moment-timezone');
function getBitsFromMoment(momentTime = moment()) {
return JSON.parse(`[${moment.utc(momentTime).format('H,m,s')}]`);
}
function getLocalTime(time) {
return moment.tz(process.env.REPORT_TIME, 'h:mm a', process.env.TIMEZONE);
}
function getTimeUntilNextPostCheck() {
const [ targetHour, targetMinute ] = getBitsFromMoment(getLocalTime());
const [ nowHour, nowMinute, nowSecond ] = getBitsFromMoment();
const targetTime = ((targetHour * 60 * 60) + (targetMinute * 60)) * 1000;
const nowTime = ((nowHour * 60 * 60) + (nowMinute * 60) + nowSecond) * 1000;
const oneDayTime = 24 * 60 * 60 * 1000;
let delay = targetTime - nowTime;
if (delay < 0) {
delay = oneDayTime + delay;
}
if (delay < 1000) {
delay = oneDayTime;
}
return delay;
}
function getDayOfWeek() {
return Number(moment.tz(process.env.TIMEZONE).format('d'));
}
function isWeekday() {
const dow = getDayOfWeek();
return (dow > 0 && dow < 6);
}
module.exports = function(callback) {
const timeoutHandler = () => {
callback(getDayOfWeek());
setTimeout(timeoutHandler, getTimeUntilNextPostCheck());
};
setTimeout(timeoutHandler, getTimeUntilNextPostCheck());
}