From 978eb40e1d92a7f3b9f409d6ff95dc9f3a1fe98a Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Mon, 3 Feb 2025 16:37:56 +1300 Subject: [PATCH] Store invites in database --- src/db/migrations/0019-add-invite.sql | 10 ++++++++++ src/db/orm-defs.d.ts | 6 ++++++ src/m2d/event-dispatcher.js | 8 ++++++++ 3 files changed, 24 insertions(+) create mode 100644 src/db/migrations/0019-add-invite.sql diff --git a/src/db/migrations/0019-add-invite.sql b/src/db/migrations/0019-add-invite.sql new file mode 100644 index 0000000..32f3c90 --- /dev/null +++ b/src/db/migrations/0019-add-invite.sql @@ -0,0 +1,10 @@ +BEGIN TRANSACTION; + +CREATE TABLE "invite" ( + "mxid" TEXT NOT NULL, + "room_id" TEXT NOT NULL, + "type" TEXT, + PRIMARY KEY("mxid","room_id") +) WITHOUT ROWID; + +COMMIT; diff --git a/src/db/orm-defs.d.ts b/src/db/orm-defs.d.ts index a272625..cdb7ba1 100644 --- a/src/db/orm-defs.d.ts +++ b/src/db/orm-defs.d.ts @@ -40,6 +40,12 @@ export type Models = { autocreate: 0 | 1 } + invite: { + mxid: string + room_id: string + type: string | null + } + lottie: { sticker_id: string mxc_url: string diff --git a/src/m2d/event-dispatcher.js b/src/m2d/event-dispatcher.js index a747a57..e959264 100644 --- a/src/m2d/event-dispatcher.js +++ b/src/m2d/event-dispatcher.js @@ -214,6 +214,14 @@ sync.addTemporaryListener(as, "type:m.room.member", guard("m.room.member", */ async event => { if (event.state_key[0] !== "@") return + + if (event.content.membership === "invite" && event.state_key === `@${reg.sender_localpart}:${reg.ooye.server_name}`) { + // We were invited to a room. We should join, and register the invite details for future reference in web. + await api.joinRoom(event.room_id) + const creation = await api.getStateEvent(event.room_id, "m.room.create", "") + db.prepare("INSERT OR IGNORE INTO invite (mxid, room_id, type) VALUES (?, ?, ?)").run(event.sender, event.room_id, creation.type || null) + } + if (utils.eventSenderIsFromDiscord(event.state_key)) return if (event.content.membership === "leave" || event.content.membership === "ban") {