From df1c2a232f9549712d1eec1a600b8fc7a62a7d6d Mon Sep 17 00:00:00 2001 From: Ruthenic Date: Sun, 19 Dec 2021 20:32:54 -0500 Subject: [PATCH] Do unspeakable travesties --- CCExt/content.js | 9 -- CCExt/manifest.json | 19 --- index.html | 14 -- main.js | 47 +----- package.json | 15 +- pnpm-lock.yaml | 152 +++++++++++++++++- src/index.js | 24 +++ src/init/index.js | 10 ++ .../discord_desktop_core/.pnpm-debug.log | 14 ++ .../discord_desktop_core/contextMenu.js | 16 ++ .../discord_native/index.js | 31 ++++ src/modules/discord_desktop_core/index.js | 23 +++ .../discord_desktop_core/mainWindow.js | 30 ++++ src/modules/discord_desktop_core/preload.js | 7 + src/modules/index.js | 5 + 15 files changed, 324 insertions(+), 92 deletions(-) delete mode 100644 CCExt/content.js delete mode 100644 CCExt/manifest.json delete mode 100644 index.html create mode 100644 src/index.js create mode 100644 src/init/index.js create mode 100644 src/modules/discord_desktop_core/.pnpm-debug.log create mode 100644 src/modules/discord_desktop_core/contextMenu.js create mode 100644 src/modules/discord_desktop_core/discord_native/index.js create mode 100644 src/modules/discord_desktop_core/index.js create mode 100644 src/modules/discord_desktop_core/mainWindow.js create mode 100644 src/modules/discord_desktop_core/preload.js create mode 100644 src/modules/index.js diff --git a/CCExt/content.js b/CCExt/content.js deleted file mode 100644 index 013b433..0000000 --- a/CCExt/content.js +++ /dev/null @@ -1,9 +0,0 @@ -const load = async () => { - console.log("[CCExt] Loading Cumcord..."); - const response = await fetch("https://cors.bridged.cc/https://raw.githubusercontent.com/Cumcord/Cumcord/stable/dist/build.js"); - const text = await response.text() - eval(text); -} -const el = document.createElement('script'); -el.appendChild(document.createTextNode(`(${load.toString()})();`)); -document.body.appendChild(el); diff --git a/CCExt/manifest.json b/CCExt/manifest.json deleted file mode 100644 index 9677b41..0000000 --- a/CCExt/manifest.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Cumcord for Web", - "description": "A heavy, throbbing, and easy to use cum expeller; now in your browser.", - "version": "0.0.1", - "author": "Drake", - "content_scripts": [ - { - "matches": ["*://*.discord.com/*"], - "js": ["content.js"] - } - ], - "permissions": [ - "storage", - "webRequest", - "webRequestBlocking", - "*" - ], - "manifest_version": 2 -} diff --git a/index.html b/index.html deleted file mode 100644 index d2c4689..0000000 --- a/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - Hello World! - - - - - diff --git a/main.js b/main.js index 8c6504c..90b4182 100644 --- a/main.js +++ b/main.js @@ -1,46 +1 @@ -const { app, BrowserWindow, webContents, session } = require('electron'); -const Path = require('path') -const contextMenu = require('electron-context-menu'); - -const rightClickMenu = contextMenu({ - append: (defaultActions, parameters, browserWindow) => [ - { - label: 'Search DuckDuckGo for “{selection}”', - visible: parameters.selectionText.trim().length > 0, - click: () => { - shell.openExternal(`https://duckduckgo.com/?q=${encodeURIComponent(parameters.selectionText)}`); - } - } - ], - showSearchWithGoogle: false -}); - - -function createWindow() { - const win = new BrowserWindow({ - width: 800, - height: 600, - backgroundColor: "#2F3136" - }); - win.removeMenu(); - win.loadFile("index.html") - win.webContents.on('before-input-event', (event, input) => { - if (input.control && input.shift && input.key.toLowerCase() === 'i') { - win.webContents.openDevTools() - } //Why does electron not have devtools on a shortcut by default - }); - let ses = win.webContents.session; - ses.webRequest.onHeadersReceived(({ responseHeaders, url }, done) => { - delete responseHeaders['content-security-policy']; //Cumcord (and other client mods, if I use them) requires removing CSP - done({responseHeaders}); - }); - ses.loadExtension(Path.join(__dirname, 'CCExt')); - return win; -} -app.whenReady().then(() => { - let win = createWindow(); - app.on('window-all-closed', function () { - rightClickMenu(); - app.quit(); - }); -}); +require('./src') diff --git a/package.json b/package.json index 8adcb26..51059da 100644 --- a/package.json +++ b/package.json @@ -22,9 +22,22 @@ "make": "electron-forge make" }, "dependencies": { + "cli-truncate": "^3.1.0", "electron-context-menu": "^3.1.1", + "electron-dl": "^3.3.0", + "electron-is-dev": "^2.0.0", "electron-squirrel-startup": "^1.0.0", - "node-fetch": "^2.6.1" + "escape-goat": "^4.0.0", + "ext-list": "^4.0.0", + "ext-name": "^5.0.0", + "is-plain-obj": "^4.0.0", + "length-sort": "^2.0.0", + "node-fetch": "^2.6.1", + "pupa": "^3.1.0", + "slice-ansi": "^5.0.0", + "sort-keys": "^5.0.0", + "sort-keys-length": "^2.0.0", + "unused-filename": "^4.0.0" }, "config": { "forge": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bb918c5..6e64422 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,15 +6,41 @@ specifiers: '@electron-forge/maker-rpm': ^6.0.0-beta.60 '@electron-forge/maker-squirrel': ^6.0.0-beta.60 '@electron-forge/maker-zip': ^6.0.0-beta.60 + cli-truncate: ^3.1.0 electron: ^14.0.0 electron-context-menu: ^3.1.1 + electron-dl: ^3.3.0 + electron-is-dev: ^2.0.0 electron-squirrel-startup: ^1.0.0 + escape-goat: ^4.0.0 + ext-list: ^4.0.0 + ext-name: ^5.0.0 + is-plain-obj: ^4.0.0 + length-sort: ^2.0.0 node-fetch: ^2.6.1 + pupa: ^3.1.0 + slice-ansi: ^5.0.0 + sort-keys: ^5.0.0 + sort-keys-length: ^2.0.0 + unused-filename: ^4.0.0 dependencies: + cli-truncate: 3.1.0 electron-context-menu: 3.1.1 + electron-dl: 3.3.0 + electron-is-dev: 2.0.0 electron-squirrel-startup: 1.0.0 + escape-goat: 4.0.0 + ext-list: 4.0.0 + ext-name: 5.0.0 + is-plain-obj: 4.0.0 + length-sort: 2.0.0 node-fetch: 2.6.1 + pupa: 3.1.0 + slice-ansi: 5.0.0 + sort-keys: 5.0.0 + sort-keys-length: 2.0.0 + unused-filename: 4.0.0 devDependencies: '@electron-forge/cli': 6.0.0-beta.60 @@ -539,12 +565,22 @@ packages: resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==} engines: {node: '>=8'} + /ansi-regex/6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: false + /ansi-styles/4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 + /ansi-styles/6.1.0: + resolution: {integrity: sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==} + engines: {node: '>=12'} + dev: false + /aproba/1.2.0: resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} dev: true @@ -828,6 +864,14 @@ packages: string-width: 4.2.2 dev: false + /cli-truncate/3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + slice-ansi: 5.0.0 + string-width: 5.0.1 + dev: false + /cli-width/3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} @@ -1106,12 +1150,12 @@ packages: resolution: {integrity: sha512-LJhwaKf6XHwk2LQ5SdwoGNODoA8lRwks9bbEeAqqMf4e3hsrT7pZtX6MaHKYNFZKxF14JjI/VR+VRjGvxmaQoA==} dependencies: cli-truncate: 2.1.0 - electron-dl: 3.2.1 + electron-dl: 3.3.0 electron-is-dev: 2.0.0 dev: false - /electron-dl/3.2.1: - resolution: {integrity: sha512-k5DFjocJlXbrjshO1zeWe/Gz7HkGwCgnehHPemiyzN2B/LfLlnbIX7sCj5F+huTwZ2l+nQehTI4IR37xvCn6FQ==} + /electron-dl/3.3.0: + resolution: {integrity: sha512-Zwaz/OMGPIfBLV2SQH4sTsdDOs/U4y5AOHfremMBXEpjIxX+SiTx845DZAvJJwgb5hfowyWOBLiJhd/emBNLLQ==} dependencies: ext-name: 5.0.0 pupa: 2.1.1 @@ -1290,6 +1334,10 @@ packages: /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + /emoji-regex/9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: false + /encodeurl/1.0.2: resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=} engines: {node: '>= 0.8'} @@ -1340,6 +1388,11 @@ packages: engines: {node: '>=8'} dev: false + /escape-goat/4.0.0: + resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} + engines: {node: '>=12'} + dev: false + /escape-string-regexp/1.0.5: resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} engines: {node: '>=0.8.0'} @@ -1351,6 +1404,11 @@ packages: dev: true optional: true + /escape-string-regexp/5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: false + /execa/1.0.0: resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} @@ -1378,6 +1436,13 @@ packages: mime-db: 1.49.0 dev: false + /ext-list/4.0.0: + resolution: {integrity: sha512-rE0dJ56wCGSBtF5h/KQqIXXJIL9fCnnwc1YLkK6VBHSvcEtPOKcgIsHoTcqbmNh5CHqV+RNTqF6PYjcUZYQtGA==} + engines: {node: '>=4'} + dependencies: + mime-db: 1.49.0 + dev: false + /ext-name/5.0.0: resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} engines: {node: '>=4'} @@ -2000,6 +2065,11 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + /is-fullwidth-code-point/4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + dev: false + /is-glob/4.0.1: resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==} engines: {node: '>=0.10.0'} @@ -2026,6 +2096,11 @@ packages: engines: {node: '>=0.10.0'} dev: false + /is-plain-obj/4.0.0: + resolution: {integrity: sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==} + engines: {node: '>=12'} + dev: false + /is-stream/1.1.0: resolution: {integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ=} engines: {node: '>=0.10.0'} @@ -2144,6 +2219,11 @@ packages: json-buffer: 3.0.1 dev: true + /length-sort/2.0.0: + resolution: {integrity: sha512-6YpARKXYERdcLDs2UpySsWRBHpUfsNDKjJSEiqs9sbRCZ87demnuESTWVaXC/Ma7QvY5rjTjAhNfe/Ood9ng/A==} + engines: {node: '>=4'} + dev: false + /load-json-file/1.1.0: resolution: {integrity: sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=} engines: {node: '>=0.10.0'} @@ -2762,6 +2842,11 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + /path-exists/5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + /path-is-absolute/1.0.1: resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} engines: {node: '>=0.10.0'} @@ -2925,6 +3010,13 @@ packages: escape-goat: 2.1.1 dev: false + /pupa/3.1.0: + resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} + engines: {node: '>=12.20'} + dependencies: + escape-goat: 4.0.0 + dev: false + /qs/6.5.2: resolution: {integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==} engines: {node: '>=0.6'} @@ -3249,6 +3341,14 @@ packages: is-fullwidth-code-point: 3.0.0 dev: false + /slice-ansi/5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.1.0 + is-fullwidth-code-point: 4.0.0 + dev: false + /smart-buffer/4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -3280,6 +3380,14 @@ packages: sort-keys: 1.1.2 dev: false + /sort-keys-length/2.0.0: + resolution: {integrity: sha512-+ebc02C2ftAXFvzw5bW3JEsEuZnlJ0rAB+nlb/tm4b9U1zs7wQYkxurxce8KX38zi736BZv9ABYb9iBDUb5OMA==} + engines: {node: '>=4'} + dependencies: + length-sort: 2.0.0 + sort-keys: 2.0.0 + dev: false + /sort-keys/1.1.2: resolution: {integrity: sha1-RBttTTRnmPG05J6JIK37oOVD+a0=} engines: {node: '>=0.10.0'} @@ -3287,6 +3395,20 @@ packages: is-plain-obj: 1.1.0 dev: false + /sort-keys/2.0.0: + resolution: {integrity: sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=} + engines: {node: '>=4'} + dependencies: + is-plain-obj: 1.1.0 + dev: false + + /sort-keys/5.0.0: + resolution: {integrity: sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw==} + engines: {node: '>=12'} + dependencies: + is-plain-obj: 4.0.0 + dev: false + /source-map-support/0.5.19: resolution: {integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==} dependencies: @@ -3370,6 +3492,15 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.0 + /string-width/5.0.1: + resolution: {integrity: sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==} + engines: {node: '>=12'} + dependencies: + emoji-regex: 9.2.2 + is-fullwidth-code-point: 4.0.0 + strip-ansi: 7.0.1 + dev: false + /string_decoder/0.10.31: resolution: {integrity: sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=} dev: true @@ -3393,6 +3524,13 @@ packages: dependencies: ansi-regex: 5.0.0 + /strip-ansi/7.0.1: + resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: false + /strip-bom/2.0.0: resolution: {integrity: sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=} engines: {node: '>=0.10.0'} @@ -3621,6 +3759,14 @@ packages: path-exists: 4.0.0 dev: false + /unused-filename/4.0.0: + resolution: {integrity: sha512-6CyVM8YwcGecQTSNhP6NaALlBzYvHLLrAlX9PWfZRA5jZJiUe5inwXwIUUmfBxzLAxXeZ4n9AxqyOTruRFrWkA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + escape-string-regexp: 5.0.0 + path-exists: 5.0.0 + dev: false + /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..9ca4cb1 --- /dev/null +++ b/src/index.js @@ -0,0 +1,24 @@ +const electron = require('electron') + +const Init = require("./init") +const Modules = require("./modules") + +let loader = Init.bootstrap() + +//TODO: actually do things with the loader +let options = loader.getOptions() + +loader.destroySplash() + +global.DiscordNative = { + nativeModules: { + ensureModule: (name) => {return true /* TODO: ensure stuff */}, + requireModule: (name) => {if (Modules[name]) return Modules[name]; else throw `Error: Cannot find module '${name}'`;} + } +} + +const ddc = DiscordNative.nativeModules.requireModule("discord_desktop_core") + +ddc.startup({ + options +}) diff --git a/src/init/index.js b/src/init/index.js new file mode 100644 index 0000000..fdac6d2 --- /dev/null +++ b/src/init/index.js @@ -0,0 +1,10 @@ +function bootstrap() { + return { + getOptions: () => { return {} /* TODO: actually read options file (`~/.config/drakecord/settings.json`?) */ }, + destroySplash: () => { return true /* actually destroy splash if/when splash screen is created for updater */} + } +} + +module.exports = { + bootstrap +} diff --git a/src/modules/discord_desktop_core/.pnpm-debug.log b/src/modules/discord_desktop_core/.pnpm-debug.log new file mode 100644 index 0000000..b71e946 --- /dev/null +++ b/src/modules/discord_desktop_core/.pnpm-debug.log @@ -0,0 +1,14 @@ +{ + "0 debug pnpm:scope": { + "selected": 1 + }, + "1 error pnpm": { + "code": "ERR_PNPM_NO_SCRIPT", + "err": { + "name": "pnpm", + "message": "Missing script: build", + "code": "ERR_PNPM_NO_SCRIPT", + "stack": "pnpm: Missing script: build\n at Object.handler (/usr/lib/node_modules/pnpm/dist/pnpm.cjs:178500:15)\n at async /usr/lib/node_modules/pnpm/dist/pnpm.cjs:182688:21\n at async run (/usr/lib/node_modules/pnpm/dist/pnpm.cjs:182662:34)\n at async runPnpm (/usr/lib/node_modules/pnpm/dist/pnpm.cjs:182874:5)\n at async /usr/lib/node_modules/pnpm/dist/pnpm.cjs:182866:7" + } + } +} \ No newline at end of file diff --git a/src/modules/discord_desktop_core/contextMenu.js b/src/modules/discord_desktop_core/contextMenu.js new file mode 100644 index 0000000..aaed9ef --- /dev/null +++ b/src/modules/discord_desktop_core/contextMenu.js @@ -0,0 +1,16 @@ +const contextMenu = require('electron-context-menu'); + +const rightClickMenu = contextMenu({ + append: (defaultActions, parameters, browserWindow) => [ + { + label: 'Search DuckDuckGo for “{selection}”', + visible: parameters.selectionText.trim().length > 0, + click: () => { + shell.openExternal(`https://duckduckgo.com/?q=${encodeURIComponent(parameters.selectionText)}`); + } + } + ], + showSearchWithGoogle: false +}); + +module.exports = rightClickMenu; diff --git a/src/modules/discord_desktop_core/discord_native/index.js b/src/modules/discord_desktop_core/discord_native/index.js new file mode 100644 index 0000000..0e68d2a --- /dev/null +++ b/src/modules/discord_desktop_core/discord_native/index.js @@ -0,0 +1,31 @@ +const process = require("process") +const Modules = require("../../index.js") + +const { + app +} = require("renderer") + +const env = process.env + + +let DiscordNative = { + app, + isRenderer: true, + nativeModules: { + ensureModule: (name) => {return true /* TODO: ensure stuff */}, + requireModule: (name) => {if (Modules[name]) return Modules[name]; else throw `Error: Cannot find module '${name}'`;} + }, + 'process': { + platform: process.platform, + arch: process.arch, + env: { + LOCALAPPDATA: env['LOCALAPPDATA'], + 'PROGRAMFILES(X86)': env['PROGRAMFILES(X86)'], + PROGRAMFILES: env['PROGRAMFILES'], + PROGRAMW6432: env['PROGRAMW6432'], + PROGRAMDATA: env['PROGRAMDATA'] + } + } +} + +module.exports = DiscordNative diff --git a/src/modules/discord_desktop_core/index.js b/src/modules/discord_desktop_core/index.js new file mode 100644 index 0000000..6377ab3 --- /dev/null +++ b/src/modules/discord_desktop_core/index.js @@ -0,0 +1,23 @@ +console.log(process.title) + +const { createWindow } = require("./mainWindow") +const { app } = require('electron') + +const rightClickMenu = require("./contextMenu") + +function startup(opts) { + app.whenReady().then(() => { + let win = createWindow(opts) + win.webContents.openDevTools() + win.once('ready-to-show', () => { + win.show() + }) + app.on('window-all-closed', () => { + rightClickMenu(); + app.quit(); + }) + }) +} +module.exports = { + startup +} diff --git a/src/modules/discord_desktop_core/mainWindow.js b/src/modules/discord_desktop_core/mainWindow.js new file mode 100644 index 0000000..e707def --- /dev/null +++ b/src/modules/discord_desktop_core/mainWindow.js @@ -0,0 +1,30 @@ +const { app, BrowserWindow, webContents, session } = require('electron') +const Path = require('path') + +function createWindow(options) { + const win = new BrowserWindow({ + width: options.width, + height: options.height, + backgroundColor: "#2F3136", + webPreferences: { + preload: Path.join(__dirname, "preload.js") + } + }) + let ses = win.webContents.session + win.removeMenu() + win.loadURL("https://discord.com/app") + win.webContents.on('before-input-event', (event, input) => { + if (input.control && input.shift && input.key.toLowerCase() == 'i') { + win.webContents.openDevTools() + } + }) + ses.webRequest.onHeadersRecieved(({responseHeaders, url}, done) => { + delete responseHeaders['content-security-policy']; //CSP, die in a pit. + done({responseHeaders}) + }) + return win +} + +module.exports = { + createWindow: createWindow +} diff --git a/src/modules/discord_desktop_core/preload.js b/src/modules/discord_desktop_core/preload.js new file mode 100644 index 0000000..7a086cb --- /dev/null +++ b/src/modules/discord_desktop_core/preload.js @@ -0,0 +1,7 @@ +const { contextBridge } = require('electron') + +const DiscordNative = require("./discord_native") + +contextBridge.exposeInMainWorld( + 'DiscordNative', DiscordNative +) diff --git a/src/modules/index.js b/src/modules/index.js new file mode 100644 index 0000000..afbaa17 --- /dev/null +++ b/src/modules/index.js @@ -0,0 +1,5 @@ +const ddc = require("./discord_desktop_core") + +module.exports = { + discord_desktop_core: ddc +}