- New react node for reacting to messages

- made input and output nodes more compatible with each other (for relay purposes).
- File/Image input nodes can be combined with a File In node now
- Remove console.log debug lines
- set version to 0.0.3
- send message node updated to handle message formats and types.
- Fixed ignore properties on matrix receive node not saving
- created basic readme
- WIP on node docs
This commit is contained in:
2021-08-16 21:56:53 -06:00
parent 61aa32e8a6
commit cd99955115
16 changed files with 524 additions and 401 deletions
+34 -35
View File
@@ -10,6 +10,8 @@ module.exports = function(RED) {
this.ignoreReactions = n.ignoreReactions;
this.ignoreFiles = n.ignoreFiles;
this.ignoreImages = n.ignoreImages;
this.roomId = n.roomId;
this.roomIds = this.roomId ? this.roomId.split(',') : [];
node.status({ fill: "red", shape: "ring", text: "disconnected" });
@@ -18,7 +20,7 @@ module.exports = function(RED) {
return;
}
node.server.on("disconnected", function(){
node.server.on("disconnected", function() {
node.status({ fill: "red", shape: "ring", text: "disconnected" });
});
@@ -26,48 +28,41 @@ module.exports = function(RED) {
node.status({ fill: "green", shape: "ring", text: "connected" });
node.server.matrixClient.on("Room.timeline", function(event, room, toStartOfTimeline, data) {
console.log("Room.timeline", [event, room]);
if (toStartOfTimeline) {
console.log("MESSAGED SKIPPED: toStartOfTimeline");
return; // ignore paginated results
}
if (
event.getType() !== "m.room.message"
&& event.getType() !== "m.reaction"
) {
console.log("MESSAGED SKIPPED: TYPE");
return; // only keep messages
}
if (!event.getSender() || event.getSender() === node.server.userId) {
console.log("MESSAGED SKIPPED: SENDER");
return; // ignore our own messages
}
if (!event.getUnsigned() || event.getUnsigned().age > 1000) {
console.log("MESSAGED SKIPPED: UNSIGNED");
return; // ignore old messages
}
// if node has a room ID set we only listen on that room
if(node.roomId) {
let roomIds = node.roomId.split(',');
if(roomIds.indexOf(msg.roomId) === -1) {
return;
}
if(node.roomIds.length && node.roomIds.indexOf(room.roomId) === -1) {
console.log("SKIASDJIOJSADIJASD", node.roomIds);
return;
}
let content = event.getContent(),
msg = {};
let msg = {
content: event.getContent(),
type : (event.getContent().msgtype || event.getType()) || null,
payload : event.getContent().body || null,
sender : event.getSender(),
roomId : room.roomId,
eventId : event.getId(),
event : event,
};
msg.type = (content.msgtype || event.getType()) || null;
msg.payload = event.getContent().body;
msg.sender = event.getSender();
msg.roomId = room.roomId;
msg.eventId = event.getId();
msg.event = event;
node.log("Received chat message [" + msg.type + "]: (" + room.name + ") " + event.getSender() + " :: " + event.getContent().body);
node.log("Received chat message [" + msg.type + "]: (" + room.name + ") " + event.getSender() + " :: " + msg.content.body);
let knownMessageType = true;
switch(msg.type) {
case 'm.text':
if(node.ignoreText) return;
@@ -75,30 +70,34 @@ module.exports = function(RED) {
case 'm.reaction':
if(node.ignoreReactions) return;
msg.info = event.getContent()["m.relates_to"].info;
msg.eventId = event.getContent()["m.relates_to"].event_id;
msg.payload = event.getContent()["m.relates_to"].key;
msg.info = msg.content["m.relates_to"].info;
msg.referenceEventId = msg.content["m.relates_to"].event_id;
msg.payload = msg.content["m.relates_to"].key;
break;
case 'm.file':
if(node.ignoreFiles) return;
msg.file = {
info: event.getContent().info,
url: node.server.matrixClient.mxcUrlToHttp(event.getContent().url)
};
msg.url = node.server.matrixClient.mxcUrlToHttp(msg.content.url);
msg.mxc_url = msg.content.url;
break;
case 'm.image':
if(node.ignoreImages) return;
msg.image = {
info: event.getContent().info,
url: node.server.matrixClient.mxcUrlToHttp(event.getContent().url),
thumbnail_url: node.server.matrixClient.mxcUrlToHttp(event.getContent().info.thumbnail_url)
};
msg.url = node.server.matrixClient.mxcUrlToHttp(msg.content.url);
msg.mxc_url = msg.content.url;
msg.thumbnail_url = node.server.matrixClient.mxcUrlToHttp(msg.content.info.thumbnail_url);
msg.thumbnail_mxc_url = msg.content.info.thumbnail_url;
break;
default:
knownMessageType = false;
}
node.send(msg);
if(knownMessageType) {
node.send(msg);
} else {
node.warn("Uknown message type: " + msg.type);
}
});
});
}