matrix-irc-relaybot/index.js

51 lines
1.4 KiB
JavaScript

var IRC = require("irc-framework");
var matrix = require("matrix-js-sdk");
var Forwarder = require("./forwarder");
function main() {
let config = require("./config.json");
let [mappingI2M, mappingM2I] = buildRoomMaps(config);
console.log("Logging into IRC...");
connectIrc(config, (clientIRC) => {
console.log("Successfully logged into IRC!");
console.log("Logging into matrix...");
connectMatrix(config, (clientMatrix) => {
console.log("Successfully logged into Matrix!");
new Forwarder(clientIRC, clientMatrix, mappingI2M, mappingM2I).start();
})
})
}
function buildRoomMaps(config) {
let mappingI2M = {};
let mappingM2I = {};
for (const [roomIRC, roomMatrix] of config.mapping) {
mappingI2M[roomIRC] = roomMatrix;
mappingM2I[roomMatrix] = roomIRC;
}
return [mappingI2M, mappingM2I];
}
function connectIrc(config, callback) {
let client = new IRC.Client();
client.connect(config.irc);
client.once('registered', () => { callback(client) });
}
function connectMatrix(config, callback) {
let client = matrix.createClient(Object.assign(config.matrix, {
timelineSupport: true
}));
let myCallback = (state) => {
switch (state) {
case "PREPARED":
client.removeListener("sync", myCallback);
callback(client);
break;
}
}
client.on("sync", myCallback);
client.startClient(0);
}
main();