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
+}