51 lines
1.4 KiB
JavaScript
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(); |