Do unspeakable travesties

master
Drake 2 years ago
parent c15c0f45f1
commit df1c2a232f

@ -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);

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

@ -1,14 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<script>
window.onload = function() {
window.location.href = "https://discord.com/app"
}
</script>
</head>
<body>
</body>
</html>

@ -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')

@ -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": {

@ -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:

@ -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
})

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

@ -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"
}
}
}

@ -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;

@ -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

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

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

@ -0,0 +1,7 @@
const { contextBridge } = require('electron')
const DiscordNative = require("./discord_native")
contextBridge.exposeInMainWorld(
'DiscordNative', DiscordNative
)

@ -0,0 +1,5 @@
const ddc = require("./discord_desktop_core")
module.exports = {
discord_desktop_core: ddc
}
Loading…
Cancel
Save