From 3c042ae47d53b2417d8945747db02c8ffd457e64 Mon Sep 17 00:00:00 2001 From: Skylar Sadlier Date: Mon, 5 Dec 2022 23:40:05 -0700 Subject: [PATCH] - rename "Invite Room" node to "Invite to Room" to distinguish from new node - new node "Invite Room" for receiving room invites - new node "Leave Room" for leaving a room - updated examples with new nodes --- examples/README.md | 22 +++++++ examples/accept-room-invites.json | 94 +++++++++++++++++++++++++++ examples/accept-room-invites.png | Bin 0 -> 18299 bytes examples/leave-room-bye.json | 103 ++++++++++++++++++++++++++++++ examples/leave-room-bye.png | Bin 0 -> 16498 bytes package.json | 2 + src/matrix-invite-room.html | 4 +- src/matrix-leave-room.html | 63 ++++++++++++++++++ src/matrix-leave-room.js | 54 ++++++++++++++++ src/matrix-receive.js | 6 -- src/matrix-room-invite.html | 80 +++++++++++++++++++++++ src/matrix-room-invite.js | 31 +++++++++ src/matrix-server-config.js | 25 +++++--- 13 files changed, 467 insertions(+), 17 deletions(-) create mode 100644 examples/accept-room-invites.json create mode 100644 examples/accept-room-invites.png create mode 100644 examples/leave-room-bye.json create mode 100644 examples/leave-room-bye.png create mode 100644 src/matrix-leave-room.html create mode 100644 src/matrix-leave-room.js create mode 100644 src/matrix-room-invite.html create mode 100644 src/matrix-room-invite.js diff --git a/examples/README.md b/examples/README.md index 95de200..5eaf8cf 100644 --- a/examples/README.md +++ b/examples/README.md @@ -15,6 +15,8 @@ Build something cool with these nodes? Feel free to submit a pull request to sha - [Respond to "image" with an uploaded image](#respond-to-image-with-an-uploaded-image) - [Respond to "file" with an uploaded file](#respond-to-file-with-an-uploaded-file) - [Respond to "react" with a reaction](#respond-to-react-with-a-reaction) +- [Accept room invites from specific user](#accept-room-invites-from-specific-user) +- [Leave room when someone says "bye"](#leave-room-when-someone-says-bye) - [Remove messages containing "delete"](#remove-messages-containing-delete) - [Respond to "users" with full list of server users](#respond-to-users-with-full-list-of-server-users) - [Respond to "newroom" by creating new room and inviting user](#respond-to-newroom-by-creating-new-room-and-inviting-user) @@ -113,6 +115,26 @@ Give a 👍 reaction when someone says "react" +### Accept room invites from specific user + +[View JSON](accept-room-invites.json) + +Accept room invites from specific user. + +![accept-room-invites.png](accept-room-invites.png) + + + +### Leave room when someone says bye + +[View JSON](leave-room-bye.json) + +Leave room when someone says "bye". + +![leave-room-bye.png](leave-room-bye.png) + + + ### Remove messages containing "delete" [View JSON](delete-event.json) diff --git a/examples/accept-room-invites.json b/examples/accept-room-invites.json new file mode 100644 index 0000000..d853c6e --- /dev/null +++ b/examples/accept-room-invites.json @@ -0,0 +1,94 @@ +[ + { + "id": "64f76474ff7a3727", + "type": "matrix-room-invite", + "z": "f025a8b9fbd1b054", + "name": "", + "server": "8da0ef83f77f8e24", + "roomId": null, + "x": 270, + "y": 2380, + "wires": [ + [ + "22f6056fa5bc5bd0" + ] + ] + }, + { + "id": "6d6f304a0a6342b8", + "type": "matrix-join-room", + "z": "f025a8b9fbd1b054", + "name": "", + "server": "8da0ef83f77f8e24", + "x": 770, + "y": 2380, + "wires": [ + [ + "1409ebb4a0e65663" + ], + [ + "1409ebb4a0e65663" + ] + ] + }, + { + "id": "22f6056fa5bc5bd0", + "type": "switch", + "z": "f025a8b9fbd1b054", + "name": "msg.userId == @skylord123:skylar.tech", + "property": "userId", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "@skylord123:skylar.tech", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 1, + "x": 520, + "y": 2380, + "wires": [ + [ + "6d6f304a0a6342b8" + ] + ] + }, + { + "id": "043f74e6d76b1eb0", + "type": "comment", + "z": "f025a8b9fbd1b054", + "name": "Only accept room invites from specific user", + "info": "", + "x": 360, + "y": 2340, + "wires": [] + }, + { + "id": "1409ebb4a0e65663", + "type": "debug", + "z": "f025a8b9fbd1b054", + "name": "", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 910, + "y": 2380, + "wires": [] + }, + { + "id": "8da0ef83f77f8e24", + "type": "matrix-server-config", + "name": null, + "autoAcceptRoomInvites": false, + "enableE2ee": true, + "global": true + } +] \ No newline at end of file diff --git a/examples/accept-room-invites.png b/examples/accept-room-invites.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba8369e0e5a9461fe14eec0a82508a42f4e0a23 GIT binary patch literal 18299 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 literal 0 HcmV?d00001 diff --git a/examples/leave-room-bye.json b/examples/leave-room-bye.json new file mode 100644 index 0000000..ba054a6 --- /dev/null +++ b/examples/leave-room-bye.json @@ -0,0 +1,103 @@ +[ + { + "id": "997c354038202dba", + "type": "comment", + "z": "f025a8b9fbd1b054", + "name": "Leave room when someone says \"bye\"", + "info": "", + "x": 350, + "y": 2520, + "wires": [] + }, + { + "id": "69c4ea189be94feb", + "type": "matrix-receive", + "z": "f025a8b9fbd1b054", + "name": "", + "server": "8da0ef83f77f8e24", + "roomId": "", + "acceptText": true, + "acceptEmotes": true, + "acceptStickers": true, + "acceptReactions": true, + "acceptFiles": true, + "acceptAudio": true, + "acceptImages": true, + "acceptLocations": true, + "x": 280, + "y": 2560, + "wires": [ + [ + "19e1d64b63ae8a1f" + ] + ] + }, + { + "id": "19e1d64b63ae8a1f", + "type": "switch", + "z": "f025a8b9fbd1b054", + "name": "msg.payload == bye", + "property": "payload", + "propertyType": "msg", + "rules": [ + { + "t": "eq", + "v": "bye", + "vt": "str" + } + ], + "checkall": "true", + "repair": false, + "outputs": 1, + "x": 480, + "y": 2560, + "wires": [ + [ + "db0e51f8e7793f92" + ] + ] + }, + { + "id": "db0e51f8e7793f92", + "type": "matrix-leave-room", + "z": "f025a8b9fbd1b054", + "name": "", + "server": "8da0ef83f77f8e24", + "roomId": null, + "x": 670, + "y": 2560, + "wires": [ + [ + "3791f551bf0e4fc4" + ], + [ + "3791f551bf0e4fc4" + ] + ] + }, + { + "id": "3791f551bf0e4fc4", + "type": "debug", + "z": "f025a8b9fbd1b054", + "name": "", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 810, + "y": 2560, + "wires": [] + }, + { + "id": "8da0ef83f77f8e24", + "type": "matrix-server-config", + "name": null, + "autoAcceptRoomInvites": false, + "enableE2ee": true, + "global": true + } +] \ No newline at end of file diff --git a/examples/leave-room-bye.png b/examples/leave-room-bye.png new file mode 100644 index 0000000000000000000000000000000000000000..7ad5cdf967acc226842fbdb6856378daf58e24b8 GIT binary patch literal 16498 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 literal 0 HcmV?d00001 diff --git a/package.json b/package.json index fe6ba09..789f9a5 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,9 @@ "matrix-react": "src/matrix-react.js", "matrix-create-room": "src/matrix-create-room.js", "matrix-invite-room": "src/matrix-invite-room.js", + "matrix-room-invite": "src/matrix-room-invite.js", "matrix-join-room": "src/matrix-join-room.js", + "matrix-leave-room": "src/matrix-leave-room.js", "matrix-crypt-file": "src/matrix-crypt-file.js", "matrix-room-kick": "src/matrix-room-kick.js", "matrix-room-ban": "src/matrix-room-ban.js", diff --git a/src/matrix-invite-room.html b/src/matrix-invite-room.html index 1294d16..20f49d1 100644 --- a/src/matrix-invite-room.html +++ b/src/matrix-invite-room.html @@ -12,9 +12,9 @@ roomId: { value: null }, }, label: function() { - return this.name || "Room Invite"; + return this.name || "Invite to Room"; }, - paletteLabel: 'Room Invite' + paletteLabel: 'Invite to Room' }); diff --git a/src/matrix-leave-room.html b/src/matrix-leave-room.html new file mode 100644 index 0000000..4795c66 --- /dev/null +++ b/src/matrix-leave-room.html @@ -0,0 +1,63 @@ + + + + + \ No newline at end of file diff --git a/src/matrix-leave-room.js b/src/matrix-leave-room.js new file mode 100644 index 0000000..f69877d --- /dev/null +++ b/src/matrix-leave-room.js @@ -0,0 +1,54 @@ +module.exports = function(RED) { + function MatrixLeaveRoom(n) { + RED.nodes.createNode(this, n); + + let node = this; + + this.name = n.name; + this.server = RED.nodes.getNode(n.server); + this.roomId = n.roomId; + + node.status({ fill: "red", shape: "ring", text: "disconnected" }); + + if (!node.server) { + node.error("No configuration node"); + return; + } + + node.server.on("disconnected", function(){ + node.status({ fill: "red", shape: "ring", text: "disconnected" }); + }); + + node.server.on("connected", function() { + node.status({ fill: "green", shape: "ring", text: "connected" }); + }); + + node.on('input', function(msg) { + if (! node.server || ! node.server.matrixClient) { + node.error("No matrix server selected"); + return; + } + + if(!msg.topic) { + node.error('No room provided in msg.topic'); + return; + } + + if(!node.server.isConnected()) { + node.error("Matrix server connection is currently closed"); + node.send([null, msg]); + } + + try { + node.log("Leaving room " + msg.topic); + node.server.matrixClient.leave(msg.topic); + node.send([msg, null]); + } catch(e) { + node.error("Failed to leave room " + msg.topic + ": " + e); + msg.payload = e; + node.send([null, msg]); + } + }); + } + RED.nodes.registerType("matrix-leave-room", MatrixLeaveRoom); +} \ No newline at end of file diff --git a/src/matrix-receive.js b/src/matrix-receive.js index 27c7ce9..f69225b 100644 --- a/src/matrix-receive.js +++ b/src/matrix-receive.js @@ -32,12 +32,6 @@ module.exports = function(RED) { node.status({ fill: "green", shape: "ring", text: "connected" }); }); - - node.server.on("Room.invite", async function(msg) { - node.send(msg); - }); - - node.server.on("Room.timeline", async function(event, room, toStartOfTimeline, removed, data, msg) { // if node has a room ID set we only listen on that room if(node.roomIds.length && node.roomIds.indexOf(room.roomId) === -1) { diff --git a/src/matrix-room-invite.html b/src/matrix-room-invite.html new file mode 100644 index 0000000..79c9c39 --- /dev/null +++ b/src/matrix-room-invite.html @@ -0,0 +1,80 @@ + + + + + \ No newline at end of file diff --git a/src/matrix-room-invite.js b/src/matrix-room-invite.js new file mode 100644 index 0000000..9c7edf5 --- /dev/null +++ b/src/matrix-room-invite.js @@ -0,0 +1,31 @@ +module.exports = function(RED) { + function MatrixRoomInvite(n) { + RED.nodes.createNode(this, n); + + let node = this; + + this.name = n.name; + this.server = RED.nodes.getNode(n.server); + this.roomId = n.roomId; + + if(!this.server) { + node.error('Server must be configured on the node.'); + return; + } + + node.status({ fill: "red", shape: "ring", text: "disconnected" }); + + node.server.on("disconnected", function(){ + node.status({ fill: "red", shape: "ring", text: "disconnected" }); + }); + + node.server.on("connected", function() { + node.status({ fill: "green", shape: "ring", text: "connected" }); + }); + + node.server.on("Room.invite", async function(msg) { + node.send(msg); + }); + } + RED.nodes.registerType("matrix-room-invite", MatrixRoomInvite); +} \ No newline at end of file diff --git a/src/matrix-server-config.js b/src/matrix-server-config.js index 61ea712..0bf3e30 100644 --- a/src/matrix-server-config.js +++ b/src/matrix-server-config.js @@ -251,23 +251,30 @@ module.exports = function(RED) { // handle auto-joining rooms node.matrixClient.on(RoomMemberEvent.Membership, async function(event, member) { + if(node.initializedAt > event.getDate()) { + return; // skip events that occurred before our client initialized + } + if (member.membership === "invite" && member.userId === node.userId) { + node.log("Got invite to join room " + member.roomId); + console.log(event); if(node.autoAcceptRoomInvites) { node.matrixClient.joinRoom(member.roomId).then(function() { node.log("Automatically accepted invitation to join room " + member.roomId); }).catch(function(e) { node.warn("Cannot join room (could be from being kicked/banned) " + member.roomId + ": " + e); }); - } else { - node.log("Got invite to join room " + member.roomId); - let msg = { - type : 'r.invite', - payload : 'Invitation', - userId : member.userId, - topic : member.roomId - }; - node.emit("Room.invite", msg); } + + let room = node.matrixClient.getRoom(event.getRoomId()); + node.emit("Room.invite", { + type : 'm.room.member', + userId : event.getSender(), + topic : event.getRoomId(), + topicName : (room ? room.name : null) || null, + event : event, + eventId : event.getId(), + }); } });