86 lines
3.7 KiB
TypeScript
86 lines
3.7 KiB
TypeScript
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 = await untis.getOwnTimetableForRange(new Date(Date.now() - 86400000), new Date(Date.now() + (86400000 * 7)), true);
|
||
|
||
let sentClasses = {};
|
||
|
||
timetable.forEach(lesson => {
|
||
let kLesson = db.knownLessons.get(`${lesson.id}`);
|
||
if (kLesson && hasChanged(lesson, kLesson)) {
|
||
if (sentClasses['' + (lesson.sg || lesson.su?.[0]?.id) + ' -- ' + lesson.date]) return;
|
||
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}, ${date.getDate()}. ${date.getMonth() + 1}.: ${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']) {
|
||
let lessonStr = JSON.stringify(lesson[prop]);
|
||
let kLessonStr = JSON.stringify(kLesson[prop]);
|
||
|
||
let addProp = (prop) => {
|
||
let str = ``;
|
||
if ((!prop.name && !prop.longname) || prop.name == '---') str += `None`;
|
||
else if (prop.longname) {
|
||
str += `${prop.longname} `;
|
||
if (prop.name && prop.name != prop.longname) str += `(${prop.name}) `;
|
||
} else str += prop.name;
|
||
return str;
|
||
}
|
||
|
||
if (lessonStr != kLessonStr) {
|
||
desc += '**' + propFullName[prop] + '**: ' + (addProp(kLesson[prop][0]) || 'None') + ' → ' + (addProp(lesson[prop][0] || 'None')) + '\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}`;
|
||
|
||
//if (lesson.code) embed.setColor(lesson.code == 'irregular' ? 'A781B4' : 'B1B3B4');
|
||
// Change the embed color when teacher ID is 0.
|
||
// Teacher ID 0 means that the class is canelled (at least on my school),
|
||
// although I don't know if this is always the case.
|
||
if (lesson.code == 'irregular' || lesson.te[0].id == 0) embed.setColor('A781B4');
|
||
|
||
embed.setDescription(desc);
|
||
sentClasses['' + (lesson.sg || lesson.su?.[0]?.id) + ' -- ' + lesson.date] = true;
|
||
sendEmbed(embed);
|
||
console.log(`Sent timetable update`);
|
||
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));
|
||
} |