/* Software to convert the Brainlet protocol to the IRC protocol Copyright (C) 2021 hiimgoodpack This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ const fs = require("fs"); const ircServer = require("./ircd.js/lib/server.js"); const ircClient = require("irc"); const crypto = require("crypto"); // Set up IRC server const config = require(`${__dirname}/config.js`) const genPass = () => { // This should give us a reasonably secure password return crypto.randomBytes(66).toString("base64"); } let systemUsers = { NickServ: { password: genPass() } } const ircConfig = { network: "BrainletToIRC", hostname: "localhost", serverDescription: "A brainlet to IRC translation layer", serverName: config.server, port: 6667, linkPort: 7777, motd: config.motd, whoWasLimit: 10000, token: 1, opers: systemUsers, channels: {}, links: { server: { host: "127.0.0.1", password: genPass(), port: 7778, token: 2 } }, pingTimeout: 120, maxNickLength: 30 }; fs.writeFileSync(`${__dirname}/ircd.js/config/config.json`, JSON.stringify(ircConfig)); ircServer.Server.boot(); // Set up system users const ircServerAddress = ircConfig.links.server.host; const ircServerPort = ircConfig.links.server.port; let NickServ = new ircClient.Client("localhost", "NickServ"); console.log(NickServ) NickServ.addListener("error", console.error); NickServ.addListener("message", (from, to, text, message) => { // Make sure it's a private message to NickServ if (to !== NickServ.opt.nick) return; const args = text.split(" "); if (args.length == 0) { NickServ.notice(from, config.responses.NickServ.invalid); return; } switch (args[0].toLowerCase()) { case "help": { NickServ.notice(from, config.responses.NickServ.help); break; } case "register": { const password = args[1]; const email = args[2]; if (!password || !email) { NickServ.notice(from, config.responses.NickServ.invalid); return; } NickServ.notice(from, "Account registration is currently not implemented"); break; } case "identify": { const name = args[1]; const password = args[2]; if (!name || !password) { NickServ.notice(from, config.responses.NickServ.invalid); return; } NickServ.notice(from, "Account login is currently not implemented"); break; } default: { NickServ.notice(from, config.responses.NickServ.invalid); break; } } });