import * as WebUntis from 'webuntis'; import main from '../index'; import Discord from 'discord.js'; const { bot, defaultEmbedColor, untis, db, sendEmbed } = main; export async function run() { let timetable: Array; try { timetable = await untis.getOwnTimetableForRange(new Date(Date.now() - 86400000), new Date(Date.now() + (86400000 * 7)), true); } catch(e) { console.error(e); return; } timetable.forEach(lesson => { let kLesson = db.knownLessons.get(`${lesson.id}`); if (kLesson && hasChanged(lesson, kLesson)) { let dateInfo = { year: Number(`${lesson.date}`.substr(0, 4)), month: Number(`${lesson.date}`.substr(4, 2)), day: Number(`${lesson.date}`.substr(6, 2)) } let date = new Date() date.setFullYear(dateInfo.year); date.setMonth(dateInfo.month - 1); date.setDate(dateInfo.day); let weekDay = ['Sunday', 'Monday', 'Thursday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][date.getDay()]; let embed = new Discord.MessageEmbed() .setTitle(`Lesson updated`) .setColor(defaultEmbedColor) .setAuthor(`${weekDay}: ${lesson.sg || '(Unnamed lesson)'} - ${lesson.te[0].longname || 'No teacher'}`); let desc = ``; const propFullName = { kl: 'Class', te: 'Teacher', su: 'Subject', ro: 'Room' } for (const prop of ['kl', 'te', 'su', 'ro']) { if (lesson[prop]?.[0] != kLesson[prop]?.[0]) desc += `**${propFullName[prop]}:** ${kLesson[prop]?.[0]?.longname} ${kLesson[prop]?.[0]?.longname != kLesson[prop]?.[0]?.name ? `(${(kLesson[prop]?.[0]?.name)})` : ''} \u200b **=>** \u200b ${lesson[prop]?.[0]?.longname} ${lesson[prop]?.[0]?.longname != lesson[prop]?.[0]?.name ? `(${lesson[prop]?.[0]?.name})` : ''} \n`; } if (lesson.activityType != kLesson.activityType) desc += `**Type:** ${kLesson.activityType} \u200b **=>** \u200b ${lesson.activityType} \n` if (lesson.substText) desc += `\nℹ️ ${lesson.substText}`; if (lesson.info) desc += `\nℹ️ ${lesson.info}` embed.setDescription(desc); console.log(`Sent timetable update`); sendEmbed(embed); db.knownLessons.set(`${lesson.id}`, lesson); } else db.knownLessons.set(`${lesson.id}`, lesson); }); } function hasChanged(lesson1: WebUntis.Lesson, lesson2: WebUntis.Lesson) { return (JSON.stringify(lesson1) != JSON.stringify(lesson2)); }