69 lines
1.9 KiB
JavaScript
69 lines
1.9 KiB
JavaScript
const hubot = require("hubot");
|
|
const xmpp = require('simple-xmpp');
|
|
|
|
const hubotRooms = process.env.HUBOT_IRC_ROOMS.split(',');
|
|
const xmppRooms = process.env.HUBOT_WORMHOLE_XMPP_ROOMS.split(',');
|
|
const xmppNickname = process.env.HUBOT_WORMHOLE_XMPP_NICKNAME;
|
|
|
|
const xmppConfig = {
|
|
jid: process.env.HUBOT_WORMHOLE_XMPP_JID,
|
|
password: process.env.HUBOT_WORMHOLE_XMPP_PASSWORD,
|
|
host: process.env.HUBOT_WORMHOLE_XMPP_HOST,
|
|
port: parseInt(process.env.HUBOT_WORMHOLE_XMPP_PORT)
|
|
};
|
|
|
|
module.exports = function (robot) {
|
|
|
|
xmpp.on('online', function(data) {
|
|
robot.logger.info('XMPP connected with JID: ' + data.jid.toString());
|
|
|
|
xmppRooms.forEach(room => xmpp.join(`${room}/${xmppNickname}`));
|
|
});
|
|
|
|
xmpp.on('close', function() {
|
|
robot.logger.info('XMPP connection has been closed. Re-connecting...');
|
|
|
|
xmpp.connect(xmppConfig);
|
|
});
|
|
|
|
xmpp.on('groupchat', function(conference, from, message, whatevs, meta) {
|
|
if (meta || (from === 'wormhole')) return;
|
|
if (!xmppRooms.includes(conference)) return;
|
|
|
|
const room = hubotRooms[xmppRooms.indexOf(conference)];
|
|
const msg = `<${from}> ${message}`;
|
|
|
|
robot.messageRoom(room, msg);
|
|
});
|
|
|
|
xmpp.on('error', function(err) {
|
|
robot.logger.error(err);
|
|
});
|
|
|
|
xmpp.connect(xmppConfig);
|
|
|
|
function messageMUC(res) {
|
|
const message = res.message;
|
|
|
|
if ((typeof message === 'object' && message.constructor.name === 'TextMessage') ||
|
|
message instanceof hubot.TextMessage) {
|
|
if (message.user['id'] === 'botka_dev') return;
|
|
if (!hubotRooms.includes(message.user.room)) return;
|
|
|
|
const room = xmppRooms[hubotRooms.indexOf(message.user.room)];
|
|
const msg = `<${message.user['id']}> ${message.text}`;
|
|
|
|
xmpp.send(room, msg, true);
|
|
}
|
|
}
|
|
|
|
const listener = new hubot.Listener(robot, function() {
|
|
return true;
|
|
}, function(res) {
|
|
return messageMUC(res);
|
|
});
|
|
|
|
robot.listeners.push(listener);
|
|
|
|
};
|