diff --git a/monitor.htm b/monitor.htm index 85eda28..9bae3e7 100644 --- a/monitor.htm +++ b/monitor.htm @@ -22,10 +22,10 @@ try { // grab stage 2 - fetch('https://endpwn.github.io/endpwn3/stage2.js?_=' + Date.now()).then(x => x.text()).then(stage2 => + fetch('https://endpwn.github.io/endpwn3/stage2.js?_=' + Date.now()).then(x => x.text()).then(stage2 => { // grab shared - fetch('https://endpwn.github.io/endpwn3/shared.js?_=' + Date.now()).then(x => x.text()).then(shared => { + //fetch('https://endpwn.github.io/endpwn3/shared.js?_=' + Date.now()).then(x => x.text()).then(shared => { // the monitor gets node integration; no silly DiscordNative bullshit var fs = require('original-fs'); @@ -36,7 +36,7 @@ // inject stage 2 once Discord is done loading win.webContents.on('dom-ready', () => { - win.webContents.executeJavaScript(shared); + //win.webContents.executeJavaScript(shared); win.webContents.executeJavaScript(stage2); }); @@ -69,9 +69,9 @@ setTimeout(load, 1000); } - }) + }); - ); + //); } catch (e) { diff --git a/stage2.js b/stage2.js index 185d927..07a2c83 100644 --- a/stage2.js +++ b/stage2.js @@ -29,6 +29,101 @@ return eval('(()=>{var exports={};' + fs.readFileSync(data + path, 'utf8').toString() + ';return exports})()'); } + /* SHARED.JS */ + + // define this with a default value as a fallback + var __goodies = { + guilds: [], + bots: [], + users: {} + }; + + // fetch goodies.json + fetch('https://endpwn.cathoderay.tube/goodies.json?_=' + Date.now()) + .then(x => x.json()) + .then(r => __goodies = r); + + // early init payload + document.addEventListener('ep-prepared', () => { + + // fetch the changelog + fetch('https://endpwn.github.io/changelog.md?_=' + Date.now()).then(r => r.text()).then(l => { + + // we're racing discord's initialization procedures; try and hit a timing sweetspot + setTimeout(function () { + + try { + + // get the changelog object + var log = $api.util.findFuncExports('changeLog'); + var data = l.split(';;'); + + // set the date + if (log.changeLog.date <= data[0]) + log.changeLog.date = data[0]; + + // prepend to the changelog body + log.changeLog.body = data[1] + '\n\n' + log.changeLog.body; + + } + catch (e) { + + // it failed, try again in 10 ms + setTimeout(arguments.callee, 100); + + } + + }, 100); + + }); + + }); + + // post-init payload + document.addEventListener('ep-ready', () => { + + window.reload = () => { app.relaunch(); app.exit(); }; + + // enable experiments + $api.util.findFuncExports('isDeveloper').__defineGetter__('isDeveloper', () => true); + + // disable that obnoxious warning about not pasting shit in the console + $api.util.findFuncExports('consoleWarning').consoleWarning = e => { }; + + // goodies for people directly associated with the endpwn project, and also kat bc shes my girlfriend + // may be expanded to anyone through a web ui later on + $api.util.wrapAfter( + "wc.findCache('getUser')[0].exports.getUser", + + x => { + + if (x === undefined || x === null) return; + + if (__goodies.bots.contains(x.id)) x.bot = true; + if (__goodies.users[x.id] !== undefined) x.discriminator = __goodies.users[x.id]; + + return x; + } + ); + + // verify servers directly associated with the endpwn project + $api.util.wrapAfter( + "wc.findCache('getGuild')[0].exports.getGuild", + + x => { + + if (x === undefined || x === null) return; + + if (__goodies.guilds.contains(x.id)) x.features.add('VERIFIED'); + + return x; + } + ); + + }); + + /* SHARED.JS */ + // load EPAPI var epapi = __krequire('epapi.js');