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); };