mirror of
https://github.com/node-red/node-red-nodes.git
synced 2023-10-10 13:36:58 +02:00
Further XMPP tidy - more accurate from field - more docs.
This commit is contained in:
parent
7bd255a341
commit
6540439e5f
@ -6,12 +6,12 @@
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="node-input-to"><i class="fa fa-envelope"></i> Buddy</label>
|
||||
<input type="text" id="node-input-to" placeholder="joe@gmail.com">
|
||||
<input type="text" id="node-input-to" placeholder="joe@blah.im">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label> </label>
|
||||
<input type="checkbox" id="node-input-join" placeholder="" style="display: inline-block; width: auto; vertical-align: top;">
|
||||
<label for="node-input-join" style="width: 70%;">Is a Chat Room ?</label>
|
||||
<input type="checkbox" id="node-input-join" placeholder="" style="display:inline-block; width:auto; vertical-align:top;">
|
||||
<label for="node-input-join" style="width:70%;">Is a Chat Room ?</label>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
||||
@ -21,9 +21,10 @@
|
||||
|
||||
<script type="text/x-red" data-help-name="xmpp in">
|
||||
<p>Connects to an XMPP server to receive messages.</p>
|
||||
<p>The <b>Buddy</b> field is the id of the buddy or room you want to receive messages from. Leave blank to receive from anyone.</p>
|
||||
<p>Incoming messages will appear as <code>msg.payload</code> on the first output, while <code>msg.topic</code> will contain who it is from.</p>
|
||||
<p>The second output will show the presence and status of a user in <code>msg.payload</code>. Again <code>msg.topic</code> will hold the user.</p>
|
||||
<p>The <b>Buddy</b> field is the jid of the buddy or room you want to receive messages from. Leave blank to receive from anyone.</p>
|
||||
<p>Incoming messages will appear as <code>msg.payload</code> on the first output, while <code>msg.topic</code> will contain who it is from.
|
||||
If part of a chat room then <code>msg.room</code> may also be set.</p>
|
||||
<p>The second output will show the presence and status of a user in <code>msg.payload</code>. Again <code>msg.topic</code> will hold the users jid.</p>
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
@ -48,6 +49,7 @@
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
<script type="text/x-red" data-template-name="xmpp out">
|
||||
<div class="form-row">
|
||||
<label for="node-input-server"><i class="fa fa-bookmark"></i> Connect as</label>
|
||||
@ -55,17 +57,17 @@
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label> </label>
|
||||
<input type="checkbox" id="node-input-sendObject" placeholder="" style="display: inline-block; width: auto; vertical-align: top;">
|
||||
<label for="node-input-sendObject" style="width: 70%;">Send complete msg object ?</label>
|
||||
<input type="checkbox" id="node-input-sendObject" placeholder="" style="display:inline-block; width:auto; vertical-align:top;">
|
||||
<label for="node-input-sendObject" style="width:70%;">Send complete msg object ?</label>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="node-input-to"><i class="fa fa-envelope"></i> To</label>
|
||||
<input type="text" id="node-input-to" placeholder="joe@gmail.com">
|
||||
<input type="text" id="node-input-to" placeholder="joe@blah.im">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label> </label>
|
||||
<input type="checkbox" id="node-input-join" placeholder="" style="display: inline-block; width: auto; vertical-align: top;">
|
||||
<label for="node-input-join" style="width: 70%;">Is a Chat Room ?</label>
|
||||
<label for="node-input-join" style="width:70%;">Is a Chat Room ?</label>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
||||
@ -115,11 +117,11 @@
|
||||
</div> -->
|
||||
<div class="form-row">
|
||||
<label for="node-config-input-user"><i class="fa fa-user"></i> JID</label>
|
||||
<input type="text" id="node-config-input-user">
|
||||
<input type="text" id="node-config-input-user" placeholder="joe@blah.im">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="node-config-input-nickname"><i class="fa fa-user"></i> Nickname</label>
|
||||
<input type="text" id="node-config-input-nickname" placeholder="Joe">
|
||||
<input type="text" id="node-config-input-nickname" placeholder="Joe (optional)">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="node-config-input-pass"><i class="fa fa-lock"></i> Password</label>
|
||||
@ -133,14 +135,22 @@
|
||||
defaults: {
|
||||
// server: {required:true},
|
||||
// port: {value:5222,required:true,validate:RED.validators.number()},
|
||||
nickname: {value:""},
|
||||
user: {type:"text"},
|
||||
nickname: {value:""}
|
||||
},
|
||||
credentials: {
|
||||
password: {type: "password"}
|
||||
password: {type:"password"}
|
||||
},
|
||||
label: function() {
|
||||
return this.user;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/x-red" data-help-name="xmpp-server">
|
||||
<p>The connection to an XMPP server to send and receive messages.</p>
|
||||
<p>Connects to the standard C2S port 5222 on the server.</p>
|
||||
<p>The JID is the full username of the client used to connect to the server
|
||||
and must contain the resolvable fdqn of the server.</p>
|
||||
<p>The nickname is optional.</p>
|
||||
</script>
|
||||
|
@ -53,7 +53,6 @@ module.exports = function(RED) {
|
||||
|
||||
RED.nodes.registerType("xmpp-server",XMPPServerNode,{
|
||||
credentials: {
|
||||
user: {type:"text"},
|
||||
password: {type: "password"}
|
||||
}
|
||||
});
|
||||
@ -61,13 +60,8 @@ module.exports = function(RED) {
|
||||
function XmppInNode(n) {
|
||||
RED.nodes.createNode(this,n);
|
||||
this.server = n.server;
|
||||
|
||||
this.serverConfig = RED.nodes.getNode(this.server);
|
||||
// this.host = this.serverConfig.server;
|
||||
// this.port = this.serverConfig.port;
|
||||
var pa = this.serverConfig.username.split("@");
|
||||
this.nick = this.serverConfig.nickname || pa[0];
|
||||
|
||||
this.nick = this.serverConfig.nickname || this.serverConfig.username.split("@")[0];
|
||||
this.join = n.join || false;
|
||||
this.sendAll = n.sendObject;
|
||||
this.from = n.to || "";
|
||||
@ -88,17 +82,35 @@ module.exports = function(RED) {
|
||||
}
|
||||
});
|
||||
|
||||
xmpp.on('chat', function(from, message) {
|
||||
var msg = { topic:from, payload:message };
|
||||
if (!node.join && ((node.from === "") || (node.from === from))) {
|
||||
node.send([msg,null]);
|
||||
// xmpp.on('chat', function(from, message) {
|
||||
// var msg = { topic:from, payload:message };
|
||||
// if (!node.join && ((node.from === "") || (node.from === from))) {
|
||||
// node.send([msg,null]);
|
||||
// }
|
||||
// });
|
||||
|
||||
xmpp.on('stanza', function(stanza) {
|
||||
if (stanza.is('message')) {
|
||||
if (stanza.attrs.type == 'chat') {
|
||||
//console.log(stanza);
|
||||
var body = stanza.getChild('body');
|
||||
if (body) {
|
||||
var msg = { payload:body.getText() };
|
||||
var ids = stanza.attrs.from.split('/');
|
||||
if (ids[1].length !== 36) {
|
||||
msg.topic = stanza.attrs.from
|
||||
}
|
||||
else { msg.topic = ids[0]; }
|
||||
if (!node.join && ((node.from === "") || (node.from === from))) {
|
||||
node.send([msg,null]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
xmpp.on('groupchat', function(conference, from, message, stamp) {
|
||||
if (!stamp) {stamp = Date.now(); }
|
||||
//else { console.log("STAMP",stamp) }
|
||||
var msg = { topic:from, payload:message, room:conference, ts:stamp };
|
||||
var msg = { topic:from, payload:message, room:conference };
|
||||
if (from != node.nick) {
|
||||
if ((node.join) && (node.from === conference)) {
|
||||
node.send([msg,null]);
|
||||
@ -108,7 +120,7 @@ module.exports = function(RED) {
|
||||
|
||||
//xmpp.on('chatstate', function(from, state) {
|
||||
//console.log('%s is currently %s', from, state);
|
||||
//var msg = { topic:from, payload:state };
|
||||
//var msg = { topic:from, payload: {presence:state} };
|
||||
//node.send([null,msg]);
|
||||
//});
|
||||
|
||||
@ -118,6 +130,11 @@ module.exports = function(RED) {
|
||||
node.send([null,msg]);
|
||||
});
|
||||
|
||||
// xmpp.on('groupbuddy', function(conference, from, state, statusText) {
|
||||
// //console.log('%s: %s is in %s state - %s',conference, from, state, statusText);
|
||||
// var msg = { topic:from, payload: { presence:state, status:statusText}, room:conference };
|
||||
// });
|
||||
|
||||
xmpp.on('error', function(err) {
|
||||
if (RED.settings.verbose) { node.log(err); }
|
||||
if (err.hasOwnProperty("stanza")) {
|
||||
@ -165,15 +182,8 @@ module.exports = function(RED) {
|
||||
function XmppOutNode(n) {
|
||||
RED.nodes.createNode(this,n);
|
||||
this.server = n.server;
|
||||
|
||||
this.serverConfig = RED.nodes.getNode(this.server);
|
||||
// this.host = this.serverConfig.server;
|
||||
// this.port = this.serverConfig.port;
|
||||
//this.nick = this.serverConfig.nickname || "Node-RED";
|
||||
this.userid = this.serverConfig.username;
|
||||
var pa = this.userid.split("@");
|
||||
this.nick = this.serverConfig.nickname || pa[0];
|
||||
|
||||
this.nick = this.serverConfig.nickname || this.serverConfig.username.split("@")[0];
|
||||
this.join = n.join || false;
|
||||
this.sendAll = n.sendObject;
|
||||
this.to = n.to || "";
|
||||
@ -232,20 +242,21 @@ module.exports = function(RED) {
|
||||
if (['away', 'dnd', 'xa', 'chat'].indexOf(msg.presence) > -1 ) {
|
||||
xmpp.setPresence(msg.presence, msg.payload);
|
||||
}
|
||||
else { node.warn("Can't set presence - invalid value"); }
|
||||
else { node.warn("Can't set presence - invalid value: "+msg.presence); }
|
||||
}
|
||||
else {
|
||||
var to = msg.topic;
|
||||
if (node.to !== "") { to = node.to; }
|
||||
if (node.sendAll) {
|
||||
xmpp.send(to, JSON.stringify(msg), node.join);
|
||||
}
|
||||
else if (msg.payload) {
|
||||
if (typeof(msg.payload) === "object") {
|
||||
xmpp.send(to, JSON.stringify(msg.payload), node.join);
|
||||
var to = node.to || msg.topic || "";
|
||||
if (to !== "") {
|
||||
if (node.sendAll) {
|
||||
xmpp.send(to, JSON.stringify(msg), node.join);
|
||||
}
|
||||
else {
|
||||
xmpp.send(to, msg.payload.toString(), node.join);
|
||||
else if (msg.payload) {
|
||||
if (typeof(msg.payload) === "object") {
|
||||
xmpp.send(to, JSON.stringify(msg.payload), node.join);
|
||||
}
|
||||
else {
|
||||
xmpp.send(to, msg.payload.toString(), node.join);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name" : "node-red-node-xmpp",
|
||||
"version" : "0.2.1",
|
||||
"version" : "0.2.2",
|
||||
"description" : "A Node-RED node to talk to an XMPP server",
|
||||
"dependencies" : {
|
||||
"simple-xmpp" : "^1.3.0"
|
||||
|
Loading…
x
Reference in New Issue
Block a user