- new node "Invite Room" for receiving room invites - new node "Leave Room" for leaving a room - updated examples with new nodesdev
parent
0a34870fa3
commit
3c042ae47d
@ -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
|
||||||
|
}
|
||||||
|
]
|
After Width: | Height: | Size: 18 KiB |
@ -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
|
||||||
|
}
|
||||||
|
]
|
After Width: | Height: | Size: 16 KiB |
@ -0,0 +1,63 @@
|
|||||||
|
<script type="text/javascript">
|
||||||
|
RED.nodes.registerType('matrix-leave-room', {
|
||||||
|
category: 'matrix',
|
||||||
|
color: '#00b7ca',
|
||||||
|
icon: "matrix.png",
|
||||||
|
outputLabels: ["success", "error"],
|
||||||
|
inputs: 1,
|
||||||
|
outputs: 2,
|
||||||
|
defaults: {
|
||||||
|
name: { value: null },
|
||||||
|
server: { value: "", type: "matrix-server-config" },
|
||||||
|
roomId: { value: null },
|
||||||
|
},
|
||||||
|
label: function() {
|
||||||
|
return this.name || "Leave Room";
|
||||||
|
},
|
||||||
|
paletteLabel: 'Leave Room'
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/html" data-template-name="matrix-leave-room">
|
||||||
|
<div class="form-row">
|
||||||
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
||||||
|
<input type="text" id="node-input-name" placeholder="Name">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-row">
|
||||||
|
<label for="node-input-server"><i class="fa fa-user"></i> Matrix Server Config</label>
|
||||||
|
<input type="text" id="node-input-server">
|
||||||
|
</div>
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/html" data-help-name="matrix-leave-room">
|
||||||
|
<h3>Details</h3>
|
||||||
|
<p>
|
||||||
|
This node leaves a room
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Inputs</h3>
|
||||||
|
<dl class="message-properties">
|
||||||
|
<dt>msg.topic
|
||||||
|
<span class="property-type">string</span>
|
||||||
|
</dt>
|
||||||
|
<dd> The room identifier to leave: for example, <code>!h8zld9j31:example.com</code>.</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<h3>Outputs</h3>
|
||||||
|
<ol class="node-ports">
|
||||||
|
<li>Success
|
||||||
|
<dl class="message-properties">
|
||||||
|
<dt>msg.payload <span class="property-type">object</span></dt>
|
||||||
|
<dd>Returns the same message that was received</dd>
|
||||||
|
</dl>
|
||||||
|
</li>
|
||||||
|
<li>Error
|
||||||
|
<dl class="message-properties">
|
||||||
|
<dt>msg.error <span class="property-type">string</span></dt>
|
||||||
|
<dd>the error that occurred.</dd>
|
||||||
|
</dl>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
</script>
|
@ -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);
|
||||||
|
}
|
@ -0,0 +1,80 @@
|
|||||||
|
<script type="text/javascript">
|
||||||
|
RED.nodes.registerType('matrix-room-invite', {
|
||||||
|
category: 'matrix',
|
||||||
|
color: '#00b7ca',
|
||||||
|
icon: "matrix.png",
|
||||||
|
outputLabels: ["success", "error"],
|
||||||
|
inputs: 0,
|
||||||
|
outputs: 1,
|
||||||
|
defaults: {
|
||||||
|
name: { value: null },
|
||||||
|
server: { value: "", type: "matrix-server-config" },
|
||||||
|
roomId: { value: null },
|
||||||
|
},
|
||||||
|
label: function() {
|
||||||
|
return this.name || "Room Invite";
|
||||||
|
},
|
||||||
|
paletteLabel: 'Room Invite'
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/html" data-template-name="matrix-room-invite">
|
||||||
|
<div class="form-row">
|
||||||
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
||||||
|
<input type="text" id="node-input-name" placeholder="Name">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-row">
|
||||||
|
<label for="node-input-server"><i class="fa fa-user"></i> Matrix Server Config</label>
|
||||||
|
<input type="text" id="node-input-server">
|
||||||
|
</div>
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/html" data-help-name="matrix-room-invite">
|
||||||
|
<h3>Details</h3>
|
||||||
|
<p>
|
||||||
|
This node receives room invites.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Outputs</h3>
|
||||||
|
<ol class="node-ports">
|
||||||
|
<li>Success
|
||||||
|
<dl class="message-properties">
|
||||||
|
<dt>msg.type <span class="property-type">string</span></dt>
|
||||||
|
<dd>Always <code>m.room.member</code></dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl class="message-properties">
|
||||||
|
<dt>msg.userId <span class="property-type">string</span></dt>
|
||||||
|
<dd>ID of the user the invite is from</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl class="message-properties">
|
||||||
|
<dt>msg.topic <span class="property-type">string</span></dt>
|
||||||
|
<dd>The room identifier for the invite: for example, <code>!h8zld9j31:example.com</code>.</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl class="message-properties">
|
||||||
|
<dt>msg.topicName <span class="property-type">string</span></dt>
|
||||||
|
<dd>The invited room name.</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl class="message-properties">
|
||||||
|
<dt>msg.event <span class="property-type">object</span></dt>
|
||||||
|
<dd>The event object for this invite to get extra details.</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<dl class="message-properties">
|
||||||
|
<dt>msg.eventId <span class="property-type">object</span></dt>
|
||||||
|
<dd>The ID of the event for this invite.</dd>
|
||||||
|
</dl>
|
||||||
|
</li>
|
||||||
|
<li>Error
|
||||||
|
<dl class="message-properties">
|
||||||
|
<dt>msg.error <span class="property-type">string</span></dt>
|
||||||
|
<dd>the error that occurred.</dd>
|
||||||
|
</dl>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
</script>
|
@ -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);
|
||||||
|
}
|
Loading…
Reference in new issue