summaryrefslogtreecommitdiff
path: root/includes/external/school/index.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2023-02-23 19:34:56 +0100
committerMinteck <contact@minteck.org>2023-02-23 19:34:56 +0100
commit3d1cd02f27518f1a04374c7c8320cd5d82ede6e9 (patch)
tree75be5fba4368472fb11c8015aee026b2b9a71888 /includes/external/school/index.js
parent8cc1f13c17fa2fb5a4410542d39e650e02945634 (diff)
downloadpluralconnect-3d1cd02f27518f1a04374c7c8320cd5d82ede6e9.tar.gz
pluralconnect-3d1cd02f27518f1a04374c7c8320cd5d82ede6e9.tar.bz2
pluralconnect-3d1cd02f27518f1a04374c7c8320cd5d82ede6e9.zip
Updated 40 files, added 37 files, deleted 1103 files and renamed 3905 files (automated)
Diffstat (limited to 'includes/external/school/index.js')
-rw-r--r--includes/external/school/index.js200
1 files changed, 200 insertions, 0 deletions
diff --git a/includes/external/school/index.js b/includes/external/school/index.js
new file mode 100644
index 0000000..962cb7e
--- /dev/null
+++ b/includes/external/school/index.js
@@ -0,0 +1,200 @@
+const axios = require('axios');
+const pronote = require('pronote-api');
+const config = require('../includes/app.json');
+
+const url = config.pronote.url;
+const username = config.pronote.user;
+const password = config.pronote.password;
+
+async function getTimetable(offset) {
+ const timetable = lessons;
+
+ let nextClass = timetable.filter(i => new Date(i.from.toDateString()).getTime() === new Date(new Date(new Date().toDateString()).getTime() + 86400000 * offset).getTime()).filter(i => !i.isCancelled)[0];
+
+ return nextClass ? nextClass["from"] : null;
+}
+
+global.wakeUpTime = null;
+global.wakeUpTimeDiff = null;
+global.sleepTime = null;
+global.sleepTimeDiff = null;
+global.sleepClockR = null;
+global.sleepClockC = null;
+global.wakeUpClockC = null;
+global.wakeUpClockR = null;
+global.firstClassTime = null;
+global.firstClassClockC = null;
+global.firstClassClockR = null;
+
+async function nightWarning() {
+ if (global.sleepTimeDiff) {
+ await notification("🌙 Good evening!", "You are going to sleep " + global.sleepTimeDiff + ", " + global.sleepClockC + " BST (" + global.sleepClockR + " CEST) so you can wake up " + global.wakeUpTimeDiff + ", " + global.wakeUpClockC + " BST (" + global.wakeUpClockR + " CEST). You will be reminded when it's time to go to sleep.", 3);
+ } else {
+ await notification("🌙 Good evening!", "You don't need to wake up at a specific time tomorrow, enjoy!", 3);
+ }
+}
+
+async function nightReminder() {
+ if (global.sleepTimeDiff) {
+ await notification("🌙 Now let's sleep!", "You should get ready to sleep now so you can wake up " + global.wakeUpTimeDiff + ", " + global.wakeUpClockC + " BST (" + global.wakeUpClockR + " CEST).", 3);
+ }
+}
+
+function digits(input) {
+ if (input < 10) {
+ return "0" + input;
+ } else {
+ return input;
+ }
+}
+
+global.tzOffset = Math.abs(new Date().getTimezoneOffset() / 60);
+
+function formatHours(hours) {
+ return hours >= 24 ? hours - 24 : hours;
+}
+
+async function updateSleepTime(offset) {
+ let classTime = await getTimetable(offset);
+ let classTime2 = await getTimetable(offset + 1);
+ let tzOffset = global.tzOffset;
+
+ if (classTime) {
+ global.wakeUpTime = new Date(classTime.getTime() - 5100000);
+
+ if (wakeUpTime.getHours() > 8 || (wakeUpTime.getHours() === 8 && wakeUpTime.getMinutes() > 0)) {
+ global.wakeUpTime = new Date(wakeUpTime.toISOString().split("T")[0] + "T08:00:00+0" + (tzOffset) + ":00");
+ }
+
+ if (classTime.toTimeString().split(" ")[0] === "08:00:00") {
+ global.wakeUpTime = new Date(wakeUpTime.toISOString().split("T")[0] + "T06:30:00+0" + (tzOffset) + ":00");
+ }
+
+ if (classTime.toTimeString().split(" ")[0] === "09:00:00") {
+ global.wakeUpTime = new Date(wakeUpTime.toISOString().split("T")[0] + "T07:00:00+0" + (tzOffset) + ":00");
+ }
+
+ if (classTime.toTimeString().split(" ")[0] === "10:00:00") {
+ global.wakeUpTime = new Date(wakeUpTime.toISOString().split("T")[0] + "T07:00:00+0" + (tzOffset) + ":00");
+ }
+ global.wakeUpClockR = formatHours(wakeUpTime.getUTCHours() + tzOffset) + ":" + digits(wakeUpTime.getUTCMinutes());
+ global.wakeUpClockC = formatHours(wakeUpTime.getUTCHours() + (tzOffset - 1)) + ":" + digits(wakeUpTime.getUTCMinutes());
+
+ global.firstClassTime = classTime;
+ global.firstClassClockC = formatHours(firstClassTime.getUTCHours() + (tzOffset - 1)) + ":" + digits(firstClassTime.getUTCMinutes());
+ global.firstClassClockR = formatHours(firstClassTime.getUTCHours() + tzOffset) + ":" + digits(firstClassTime.getUTCMinutes());
+ } else {
+ global.wakeUpTime = null;
+ global.wakeUpClockR = null;
+ global.wakeUpClockC = null;
+
+ global.firstClassTime = null;
+ global.firstClassClockC = null;
+ global.firstClassClockR = null;
+ }
+
+ if (classTime2) {
+ global.wakeUpTime2 = new Date(classTime2.getTime() - 5100000);
+
+ if (wakeUpTime2.getHours() > 8 || (wakeUpTime2.getHours() === 8 && wakeUpTime2.getMinutes() > 0)) {
+ global.wakeUpTime2 = new Date(wakeUpTime2.toISOString().split("T")[0] + "T08:00:00+0" + (tzOffset) + ":00");
+ }
+
+ if (classTime2.toTimeString().split(" ")[0] === "08:00:00") {
+ global.wakeUpTime2 = new Date(wakeUpTime2.toISOString().split("T")[0] + "T06:30:00+0" + (tzOffset) + ":00");
+ }
+
+ if (classTime2.toTimeString().split(" ")[0] === "09:00:00") {
+ global.wakeUpTime2 = new Date(wakeUpTime2.toISOString().split("T")[0] + "T07:00:00+0" + (tzOffset) + ":00");
+ }
+
+ if (classTime2.toTimeString().split(" ")[0] === "10:00:00") {
+ global.wakeUpTime2 = new Date(wakeUpTime2.toISOString().split("T")[0] + "T07:00:00+0" + (tzOffset) + ":00");
+ }
+
+ global.sleepTime = new Date(global.wakeUpTime2.getTime() - 28800000);
+
+ global.sleepClockR = formatHours(sleepTime.getUTCHours() + tzOffset) + ":" + digits(sleepTime.getUTCMinutes());
+ global.sleepClockC = formatHours(sleepTime.getUTCHours() + (tzOffset - 1)) + ":" + digits(sleepTime.getUTCMinutes());
+ } else {
+ global.sleepTime = null;
+
+ global.sleepClockR = null;
+ global.sleepClockC = null;
+ }
+}
+
+async function display(offset) {
+ await updateSleepTime(offset);
+ console.log(new Date(new Date().getTime() + 86400000 * offset).toDateString())
+ console.log(" First: " + firstClassTime + " (" + firstClassClockC + ", " + firstClassClockR + ")");
+ console.log(" Wake up: " + wakeUpTime + " (" + wakeUpClockC + ", " + wakeUpClockR + ")");
+ console.log(" Sleep: " + sleepTime + " (" + sleepClockC + ", " + sleepClockR + ")");
+}
+
+(async () => {
+ global.session = await pronote.login(url, username, password);
+ global.lessons = await session.timetable(new Date(new Date() - (86400000 * 3)), new Date(new Date().getTime() + (86400000 * 7)));
+
+ await updateSleepTime(0);
+ await display(-2);
+ console.log("-------------------");
+ await display(-1);
+ console.log("-------------------");
+ await display(0);
+ console.log("-------------------");
+ await display(1);
+ console.log("-------------------");
+ await display(2);
+ console.log("-------------------");
+ await display(3);
+ console.log("-------------------");
+ await display(4);
+ console.log("-------------------");
+ await display(5);
+ console.log("-------------------");
+ await display(6);
+ console.log("-------------------");
+ await display(7);
+
+ let json = {};
+
+ for (let i = -2; i < 8; i++) {
+ let date = new Date(new Date().getTime() + 86400000 * i).toISOString().split("T")[0];
+
+ json[date] = {
+ firstClass: {
+ timestamp: null,
+ cloudburst: null,
+ raindrops: null
+ },
+ wakeUp: {
+ timestamp: null,
+ cloudburst: null,
+ raindrops: null
+ },
+ sleep: {
+ timestamp: null,
+ cloudburst: null,
+ raindrops: null
+ }
+ };
+
+ let time = await updateSleepTime(i);
+
+ json[date].firstClass.timestamp = firstClassTime ? firstClassTime.getTime() : null;
+ json[date].firstClass.cloudburst = firstClassClockC ?? null;
+ json[date].firstClass.raindrops = firstClassClockR ?? null;
+
+ json[date].sleep.timestamp = sleepTime ? sleepTime.getTime() : null;
+ json[date].sleep.cloudburst = sleepClockC ?? null;
+ json[date].sleep.raindrops = sleepClockR ?? null;
+
+ json[date].wakeUp.timestamp = wakeUpTime ? wakeUpTime.getTime() : null;
+ json[date].wakeUp.cloudburst = wakeUpClockC ?? null;
+ json[date].wakeUp.raindrops = wakeUpClockR ?? null;
+ }
+
+ console.log(json);
+ require('fs').writeFileSync("../includes/data/school.json", JSON.stringify(json));
+})() \ No newline at end of file