-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathserver.js
67 lines (58 loc) · 2.04 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
var Client = require('node-xmpp-client');
var ltx = require('ltx');
var https = require('https');
var config = require("./config.js").settings;
console.log("Initializing XMPP...");
var client = new Client(config.xmpp);
console.log("Initializing Slack Webhook...");
var httpsOptions = config.slackWebhook;
if (config.keepAlive) {
console.log("Setting keep-alives...");
client.connection.socket.setTimeout(0);
client.connection.socket.setKeepAlive(true, 10000);
setInterval(function() {
client.send(" ");
}, 5000);
}
client.on('online', function() {
console.log('Connected to XMPP');
client.send(new ltx.Element('presence', { })
.c('show').t('chat').up()
.c('status').t(config.statusMessage)
);
});
client.on('error', function(message) {
console.log("error: " + message);
process.exit(1);
});
client.on('stanza', function(stanza) {
if (stanza.is('message') &&
(stanza.attrs.type !== 'error')) {
var xmppPayload = ltx.parse(stanza.root().toString());
var message = "", payload;
if (xmppPayload.getChild("body") != null) {
message = xmppPayload.getChild("body").getText();
}
if (message != "") {
var req = https.request(httpsOptions, function (res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('Response: ' + chunk);
});
});
for (var i = 0; i < config.slackPayloads.length; i++) {
console.log("Checking message against filter: " + config.slackPayloads[i].filter);
if (message.indexOf(config.slackPayloads[i].filter) > -1) {
payload = config.slackPayloads[i];
break;
}
}
if (payload) {
payload.text = message.replace(config.filter, '');
console.log('Sending message to channel ' + payload.channel + ': ' + payload.text);
req.write(JSON.stringify(payload));
req.end();
}
}
}
});