From 9a4a4a2f08e1bc9c16432eac84f6a155d27c4922 Mon Sep 17 00:00:00 2001 From: minie4 Date: Fri, 23 Jun 2023 18:56:59 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=89=20Mostly=20working=20matrix=20bot?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (timetable group handling missing) --- .gitignore | 3 + index.js | 280 +++++++++++++++++++++++++++ package-lock.json | 469 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 18 ++ timetable.js | 74 ++++++++ 5 files changed, 844 insertions(+) create mode 100644 .gitignore create mode 100644 index.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 timetable.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7439756 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +.env +data.json \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..01af3f3 --- /dev/null +++ b/index.js @@ -0,0 +1,280 @@ +import * as sdk from "matrix-js-sdk"; +import fetch from "node-fetch"; +import "dotenv/config"; +import { JsonDB, Config } from "node-json-db"; +import { TimetableClient } from "./timetable.js"; + +const db = new JsonDB(new Config("data", true, true, "/")); +const timetable = new TimetableClient( + process.env.TIMETABLE_ENDPOINT, + process.env.TIMETABLE_TOKEN +); + +await db.push("/rooms", {}, false); + +// Login +const userId = process.env.MATRIX_USER; +const client = sdk.createClient({ + baseUrl: process.env.MATRIX_URL, + accessToken: process.env.MATRIX_TOKEN, + userId: userId, + fetchFn: fetch, +}); + +client.once("sync", function (state) { + if (state === "PREPARED") { + console.log("sync finished"); + } +}); + +// Auto-join invited rooms +client.on("RoomMember.membership", function (_, member) { + if (member.membership === "invite" && member.userId === userId) { + client + .joinRoom(member.roomId) + .then(function () { + console.log("Auto-joined %s", member.roomId); + }) + .catch(() => { + client.leave(member.roomId); + }); + } +}); + +function formatUpdateMessage(update) { + let message = ""; + if (update.type == "addition") message += "🆕"; + else if (update.type == "deletion") message += "🗑"; + else if (update.type == "change") message += "✏"; + + if (update.type == "addition" || update.type == "deletion") { + message += " "; + if (update.change.type == "cancellation") message += "🚫"; + else message += "📑"; + } + message += ` ${update.lesson}th Lesson