Pronto logo

Pronto

source

handlers/lessonReminders.js

View on GitHub

'use strict';

const Discord = require('discord.js');
// eslint-disable-next-line no-unused-vars
const Typings = require('../typings');

const cron = require('node-cron');

const { Lesson } = require('../models');
const { dateTimeGroup } = require('../modules');
const { findGuildConfiguration, sendMsg } = require('../handlers');

/** */

/**
 *
 * @function handlers.lessonReminders
 * @param {Discord.Guild} guild
 */
module.exports = async guild => {
	const { settings: { lessonCron, timezone, lessonReminders }, ids: { archivedId }, colours } = await findGuildConfiguration(guild);

	cron.schedule(lessonCron, async () => {
		/**
		 * @type {Typings.Lesson[]}
		 */
		const unsubmitted = await Lesson.find({ submitted: false, dueTimestamp: { $gte: Date.now(), $lte: new Date().setDate(new Date().getDate() + 8).valueOf() } }).exec()
			.catch(error => console.error(error));

		for (const lesson of unsubmitted) {
			const lessonChannel = guild.channels.cache.get(lesson.lessonId);

			if (lessonChannel.parentId === archivedId) continue;

			const remindEmbed = new Discord.MessageEmbed()
				.setTitle('Lesson Reminder')
				.setColor(colours.warn)
				.setDescription(`Reminder — your lesson plan is due at \`${lesson.dueDate}\`.`)
				.setFooter(await dateTimeGroup(guild));

			if (lesson.dueTimestamp - Date.now() <= 86400000) remindEmbed.setColor(colours.error);

			sendMsg(lessonChannel, { content: Object.keys(lesson.instructors).map(userId => `<@!${userId}>`).join(' '), embeds: [remindEmbed] });
		}
	}, {
		scheduled: lessonReminders,
		timezone: timezone,
	});
};