mirror of
https://github.com/node-red/node-red-nodes.git
synced 2023-10-10 13:36:58 +02:00
Add subject to chat if known
This commit is contained in:
parent
a9d1ca0491
commit
59361625cc
@ -97,7 +97,7 @@ module.exports = function(RED) {
|
|||||||
// this means we need to figure out which node might have sent it
|
// this means we need to figure out which node might have sent it
|
||||||
// we also deal with subscriptions (i.e. presence information) here
|
// we also deal with subscriptions (i.e. presence information) here
|
||||||
this.client.on('stanza', async (stanza) => {
|
this.client.on('stanza', async (stanza) => {
|
||||||
//console.log("STAN",stanza.toString())
|
//console.log("STANZA",stanza.toString())
|
||||||
if (stanza.is('message')) {
|
if (stanza.is('message')) {
|
||||||
if (stanza.attrs.type == 'error') {
|
if (stanza.attrs.type == 'error') {
|
||||||
if (RED.settings.verbose || LOGITALL) {
|
if (RED.settings.verbose || LOGITALL) {
|
||||||
@ -152,7 +152,7 @@ module.exports = function(RED) {
|
|||||||
that.log("Was told we've "+stanza.attrs.type+" from "+stanza.attrs.from+" but we don't really care");
|
that.log("Was told we've "+stanza.attrs.type+" from "+stanza.attrs.from+" but we don't really care");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (stanza.attrs.to.indexOf(that.jid) !== -1) {
|
if (stanza.attrs.to && stanza.attrs.to.indexOf(that.jid) !== -1) {
|
||||||
var _x = stanza.getChild("x")
|
var _x = stanza.getChild("x")
|
||||||
if (_x !== undefined) {
|
if (_x !== undefined) {
|
||||||
var _stat = _x.getChildren("status");
|
var _stat = _x.getChildren("status");
|
||||||
@ -249,7 +249,8 @@ module.exports = function(RED) {
|
|||||||
// We also turn off chat history (maxstanzas 0) because that's not what this node is about.
|
// We also turn off chat history (maxstanzas 0) because that's not what this node is about.
|
||||||
// Yes, there's a race condition, but it's not a huge problem to send two messages
|
// Yes, there's a race condition, but it's not a huge problem to send two messages
|
||||||
// so we don't care.
|
// so we don't care.
|
||||||
if (name in node.serverConfig.MUCs) {
|
var mu = name.split("/")[0];
|
||||||
|
if (mu in node.serverConfig.MUCs) {
|
||||||
if (RED.settings.verbose || LOGITALL) { node.log("already joined MUC "+name); }
|
if (RED.settings.verbose || LOGITALL) { node.log("already joined MUC "+name); }
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -260,8 +261,8 @@ module.exports = function(RED) {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
node.serverConfig.used(node);
|
node.serverConfig.used(node);
|
||||||
node.serverConfig.MUCs[name] = "joined";
|
node.serverConfig.MUCs[mu] = "joined";
|
||||||
if (RED.settings.verbose || LOGITALL) { node.log("JOINED "+name); }
|
if (RED.settings.verbose || LOGITALL) { node.log("JOINED "+mu); }
|
||||||
xmpp.send(stanza);
|
xmpp.send(stanza);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -331,6 +332,7 @@ module.exports = function(RED) {
|
|||||||
// (because it's where you are asking to get messages from...)
|
// (because it's where you are asking to get messages from...)
|
||||||
this.from = ((n.to || "").split(':')).map(s => s.trim());
|
this.from = ((n.to || "").split(':')).map(s => s.trim());
|
||||||
this.quiet = false;
|
this.quiet = false;
|
||||||
|
this.subject = {};
|
||||||
// MUC == Multi-User-Chat == chatroom
|
// MUC == Multi-User-Chat == chatroom
|
||||||
//this.muc = this.join && (this.from !== "")
|
//this.muc = this.join && (this.from !== "")
|
||||||
var node = this;
|
var node = this;
|
||||||
@ -415,11 +417,15 @@ module.exports = function(RED) {
|
|||||||
xmpp.on('stanza', async (stanza) => {
|
xmpp.on('stanza', async (stanza) => {
|
||||||
if (RED.settings.verbose || LOGITALL) { node.log(stanza); }
|
if (RED.settings.verbose || LOGITALL) { node.log(stanza); }
|
||||||
if (stanza.is('message')) {
|
if (stanza.is('message')) {
|
||||||
// console.log(stanza.toString())
|
var subj = stanza.getChild("subject");
|
||||||
|
if (subj) {
|
||||||
|
subj = subj.getText();
|
||||||
|
if (subj.trim() !== "") { node.subject[stanza.attrs.from.split('/')[0]] = subj; }
|
||||||
|
}
|
||||||
if (stanza.attrs.type == 'chat') {
|
if (stanza.attrs.type == 'chat') {
|
||||||
var body = stanza.getChild('body');
|
var body = stanza.getChild('body');
|
||||||
if (body) {
|
if (body) {
|
||||||
var msg = { payload:body.getText() };
|
var msg = { payload:body.getText(), subject:node.subject[stanza.attrs.from.split('/')[0]] };
|
||||||
var ids = stanza.attrs.from.split('/');
|
var ids = stanza.attrs.from.split('/');
|
||||||
if (ids[1].length !== 36) {
|
if (ids[1].length !== 36) {
|
||||||
msg.topic = stanza.attrs.from
|
msg.topic = stanza.attrs.from
|
||||||
@ -435,15 +441,14 @@ module.exports = function(RED) {
|
|||||||
const parts = stanza.attrs.from.split("/");
|
const parts = stanza.attrs.from.split("/");
|
||||||
var conference = parts[0];
|
var conference = parts[0];
|
||||||
var from = parts[1];
|
var from = parts[1];
|
||||||
|
var msg = { topic:from, room:conference, subject:node.subject[stanza.attrs.from.split('/')[0]] };
|
||||||
var body = stanza.getChild('body');
|
var body = stanza.getChild('body');
|
||||||
var payload = "";
|
|
||||||
if (typeof body !== "undefined") {
|
if (typeof body !== "undefined") {
|
||||||
payload = body.getText();
|
msg.payload = body.getText();
|
||||||
}
|
//if (from && stanza.attrs.from != node.nick && from != node.nick) {
|
||||||
var msg = { topic:from, payload:payload, room:conference };
|
if (from && node.join && (node.from[0] === "" || node.from.includes(conference))) {
|
||||||
//if (from && stanza.attrs.from != node.nick && from != node.nick) {
|
node.send([msg,null]);
|
||||||
if (from && node.join && (node.from[0] === "" || node.from.includes(conference))) {
|
}
|
||||||
node.send([msg,null]);
|
|
||||||
}
|
}
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
@ -469,7 +474,14 @@ module.exports = function(RED) {
|
|||||||
// right, do we care if there's no status?
|
// right, do we care if there's no status?
|
||||||
if (statusText !== "") {
|
if (statusText !== "") {
|
||||||
var from = stanza.attrs.from;
|
var from = stanza.attrs.from;
|
||||||
var msg = {topic:from, payload: {presence:state, status:statusText} };
|
var msg = {
|
||||||
|
topic:from,
|
||||||
|
payload: {
|
||||||
|
presence:state,
|
||||||
|
status:statusText,
|
||||||
|
name:node.serverConfig.MUCs[stanza.attrs.from.split('/')[0]]
|
||||||
|
}
|
||||||
|
};
|
||||||
node.send([null,msg]);
|
node.send([null,msg]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -499,6 +511,7 @@ module.exports = function(RED) {
|
|||||||
if (!(name in node.serverConfig.MUCs)) {
|
if (!(name in node.serverConfig.MUCs)) {
|
||||||
if (RED.settings.verbose || LOGITALL) { node.log("Need to Join room:"+name); }
|
if (RED.settings.verbose || LOGITALL) { node.log("Need to Join room:"+name); }
|
||||||
joinMUC(node, xmpp, name);
|
joinMUC(node, xmpp, name);
|
||||||
|
node.serverConfig.MUCs[name.split('/')[0]] = _items[i].attrs.name.split('/')[0];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (RED.settings.verbose || LOGITALL) { node.log("Already joined:"+name); }
|
if (RED.settings.verbose || LOGITALL) { node.log("Already joined:"+name); }
|
||||||
@ -664,6 +677,7 @@ module.exports = function(RED) {
|
|||||||
|
|
||||||
// Let's get down to business and actually send a message
|
// Let's get down to business and actually send a message
|
||||||
node.on("input", function(msg) {
|
node.on("input", function(msg) {
|
||||||
|
var to = node.to || msg.topic || "";
|
||||||
if (msg.presence) {
|
if (msg.presence) {
|
||||||
if (['away', 'dnd', 'xa', 'chat'].indexOf(msg.presence) > -1 ) {
|
if (['away', 'dnd', 'xa', 'chat'].indexOf(msg.presence) > -1 ) {
|
||||||
var stanza = xml('presence', {"show":msg.presence}, xml('status', {}, msg.payload));
|
var stanza = xml('presence', {"show":msg.presence}, xml('status', {}, msg.payload));
|
||||||
@ -679,7 +693,6 @@ module.exports = function(RED) {
|
|||||||
xmpp.send(stanza);
|
xmpp.send(stanza);
|
||||||
}
|
}
|
||||||
else if (msg.command === "get") {
|
else if (msg.command === "get") {
|
||||||
var to = node.to || msg.topic || "";
|
|
||||||
var stanza = xml('iq',
|
var stanza = xml('iq',
|
||||||
{type:'get', id:node.id, to:to},
|
{type:'get', id:node.id, to:to},
|
||||||
xml('query', 'http://jabber.org/protocol/muc#admin',
|
xml('query', 'http://jabber.org/protocol/muc#admin',
|
||||||
@ -691,7 +704,6 @@ module.exports = function(RED) {
|
|||||||
xmpp.send(stanza);
|
xmpp.send(stanza);
|
||||||
}
|
}
|
||||||
else if (msg.command === "info") {
|
else if (msg.command === "info") {
|
||||||
var to = node.to || msg.topic || "";
|
|
||||||
var stanza = xml('iq',
|
var stanza = xml('iq',
|
||||||
{type:'get', id:node.id, to:to},
|
{type:'get', id:node.id, to:to},
|
||||||
xml('query', 'http://jabber.org/protocol/disco#info')
|
xml('query', 'http://jabber.org/protocol/disco#info')
|
||||||
@ -702,7 +714,6 @@ module.exports = function(RED) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var to = node.to || msg.topic || "";
|
|
||||||
if (to !== "") {
|
if (to !== "") {
|
||||||
var message;
|
var message;
|
||||||
var type = "chat";
|
var type = "chat";
|
||||||
@ -712,6 +723,16 @@ module.exports = function(RED) {
|
|||||||
// joinMUC will do nothing if we're already joined
|
// joinMUC will do nothing if we're already joined
|
||||||
joinMUC(node, xmpp, to+'/'+node.nick);
|
joinMUC(node, xmpp, to+'/'+node.nick);
|
||||||
}
|
}
|
||||||
|
// if (msg.subject) {
|
||||||
|
// var stanza = xml(
|
||||||
|
// "message",
|
||||||
|
// { type:type, to:to },
|
||||||
|
// xml("subject", {}, msg.subject.toString())
|
||||||
|
// );
|
||||||
|
// node.serverConfig.used(node);
|
||||||
|
// console.log("SENDING",stanza.toString())
|
||||||
|
// xmpp.send(stanza);
|
||||||
|
// }
|
||||||
if (node.sendAll) {
|
if (node.sendAll) {
|
||||||
message = xml(
|
message = xml(
|
||||||
"message",
|
"message",
|
||||||
|
Loading…
Reference in New Issue
Block a user