/* * BetterDiscordApp Installer v0.3.2 */ var dver = "0.0.284"; var asar = require('asar'); var wrench = require('wrench'); var fs = require('fs'); var readline = require('readline'); var util = require('util'); var _importSplice; var _functionSplice; var _functionCallSplice; var _discordPath; var _appFolder = "/app"; var _appArchive = "/app.asar"; var _packageJson = _appFolder + "/package.json"; var _index = _appFolder + "/index.js"; var _force = false; // Get Arguments process.argv.forEach(function (val, index, array) { if (val == "--force") { _force = true; } if (val == "-d" || val == "--directory") { _discordPath = array[(index+1)] } }); function install() { if (typeof _discordPath == 'undefined') { var _os = process.platform; if (_os == "win32") { _importSplice = 89; _functionCallSplice = 497; _functionSplice = 601; _discordPath = process.env.LOCALAPPDATA + "/Discord/app-"+dver+"/resources"; } else if (_os == "darwin") { _importSplice = 67; _functionCallSplice = 446; _functionSplice = 547; _discordPath = "/Applications/Discord.app/Contents/Resources" // Defaults to Applications directory } else if (_os == "linux") { _discordPath = "/opt/DiscordCanary/resources"; _index = "/app/index.js"; } } console.log("Looking for discord resources at: " + _discordPath); fs.exists(_discordPath, function(exists) { if(exists) { console.log("Discord resources found at: " + _discordPath + "\nLooking for app folder"); if(fs.existsSync(_discordPath + _appFolder)) { console.log("Deleting " + _discordPath + _appFolder + " folder."); wrench.rmdirSyncRecursive(_discordPath + _appFolder); console.log("Deleted " + _discordPath + _appFolder + " folder."); } if(fs.existsSync(_discordPath + "/node_modules/BetterDiscord")) { console.log("Deleting " + _discordPath + "/node_modules/BetterDiscord" + " folder."); wrench.rmdirSyncRecursive(_discordPath + "/node_modules/BetterDiscord"); console.log("Deleted " + _discordPath + "/node_modules/BetterDiscord" + " folder."); } console.log("Looking for app archive"); if(fs.existsSync(_discordPath + _appArchive)) { console.log("App archive found at: " + _discordPath + _appArchive); } else { console.log("Failed to locate app archive at: " + _discordPath + _appArchive); process.exit(); } console.log("Extracting app archive"); asar.extractAll(_discordPath + _appArchive, _discordPath + _appFolder); console.log("Copying BetterDiscord"); if(_os == "linux") { fs.mkdirSync(_discordPath + _appFolder + "/node_modules/BetterDiscord"); } else { fs.mkdirSync(_discordPath + "/node_modules/BetterDiscord"); } wrench.copyDirSyncRecursive(__dirname + "/BetterDiscord/", _discordPath + _appFolder + "/node_modules/BetterDiscord/", {forceDelete: true}); if(!fs.existsSync("splice")) { console.log("Missing splice file"); process.exit(); } var splice = fs.readFileSync("splice"); fs.exists(_discordPath + _appFolder, function(exists) { if(exists) { console.log("Extracted to: " + _discordPath + _appFolder); console.log("Injecting index.js"); var data = fs.readFileSync(_discordPath + _index).toString().split("\n"); if(_os == "linux") { data = data.join("\n"); data = data.replace('var _GPUSettings2 = _interopRequireDefault(_GPUSettings);','var _GPUSettings2 = _interopRequireDefault(_GPUSettings);\n\nvar _betterDiscord = require(\'BetterDiscord\');\n'); data = data.replace('mainWindow.setMenuBarVisibility(false);','mainWindow.setMenuBarVisibility(false);\n' + splice + '\n'); data = data.split("\n"); } else { data.splice(_importSplice, 0, 'var _betterDiscord = require(\'betterdiscord\');\n'); data.splice(_functionCallSplice, 0, splice); } fs.writeFile(_discordPath + _index, data.join("\n"), function(err) { if(err) return console.log(err); console.log("Injected index.js"); console.log("Deleting old cache files"); var counter = 0; var _prefsPath = '/Library/Preferences/BetterDiscord/'; var emotes_twitch_global = 'emotes_twitch_global.json'; fs.exists(process.env.HOME + _prefsPath + emotes_twitch_global, (exists) => { if (exists) { console.log("Deleting " + emotes_twitch_global); fs.unlinkSync(process.env.HOME + _prefsPath + emotes_twitch_global, (err) => { if(err) throw err; }); console.log("Deleted " + emotes_twitch_global); } counter++; finished(); }); var emotes_twitch_subscriber = 'emotes_twitch_subscriber.json'; fs.exists(process.env.HOME + _prefsPath + emotes_twitch_subscriber, (exists) => { if (exists) { console.log("Deleting " + emotes_twitch_subscriber); fs.unlinkSync(process.env.HOME + _prefsPath + emotes_twitch_subscriber, (err) => { if(err) throw err; }); console.log("Deleted " + emotes_twitch_subscriber); } counter++; finished(); }); var emotes_bttv = 'emotes_bttv.json'; fs.exists(process.env.HOME + _prefsPath + emotes_bttv, (exists) => { if (exists) { console.log("Deleting " + emotes_bttv); fs.unlinkSync(process.env.HOME + _prefsPath + emotes_bttv, (err) => { if(err) throw err; }); console.log("Deleted " + emotes_bttv); } counter++; finished(); }); var emotes_bttv_2 = "emotes_bttv_2.json"; fs.exists(process.env.HOME + _prefsPath + emotes_bttv_2, (exists) => { if (exists) { console.log("Deleting " + emotes_bttv_2); fs.unlinkSync(process.env.HOME + _prefsPath + emotes_bttv_2, (err) => { if(err) throw err; }); console.log("Deleted " + emotes_bttv_2); } counter++; finished(); }); var emotes_ffz = "emotes_ffz.json"; fs.exists(process.env.HOME + _prefsPath + emotes_ffz, (exists) => { if (exists) { console.log("Deleting " + emotes_ffz); fs.unlinkSync(process.env.HOME + _prefsPath + emotes_ffz, (err) => { if(err) throw err; }); console.log("Deleted " + emotes_ffz); } counter++; finished(); }); var user_pref = "user.json"; fs.exists(process.env.HOME + _prefsPath + user_pref, (exists) => { if (exists) { console.log("Deleting " + user_pref); fs.unlinkSync(process.env.HOME + _prefsPath + user_pref, (err) => { if(err) throw err; }); console.log("Deleted " + user_pref); } counter++; finished(); }); function finished() { if(counter => 6) { console.log("Looks like we're done here"); process.exit(); } } }); } else { console.log("Something went wrong. Please try again."); process.exit(); } }); } else { console.log("Discord resources not found at: " + _discordPath); process.exit(); } }); } function init() { console.log("BetterDiscord Simple Installer v0.3 for Discord "+dver+" by Jiiks."); console.log("If Discord has updated then download the latest installer."); var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); if (_force == false) { rl.question("The following directories will be deleted if they exists: discorpath/app, discordpath/node_modules/BetterDiscord, is this ok? Y/N", function(answer) { var alc = answer.toLowerCase(); switch(alc) { case "y": case "yes": install(); break; case "n": case "no": process.exit(); break; } }); } else { install(); } } init();