As the wormhole user only ever posts messages from the other side of the wormhole, we don't need to see the protocol name before every single message.
52 lines
1.5 KiB
JavaScript
52 lines
1.5 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(',');
|
|
|
|
module.exports = function (robot) {
|
|
|
|
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.connect({
|
|
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)
|
|
});
|
|
|
|
xmppRooms.forEach(room => xmpp.join(`${room}/wormhole`));
|
|
|
|
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);
|
|
|
|
};
|