Compare commits

..

No commits in common. "4f4ec74fcdbc216723180d68306de9f2d68dc94c" and "7e9e43fa6ac749d965132c64c34062a94651f8b4" have entirely different histories.

12 changed files with 46 additions and 42 deletions

View file

@ -1,13 +0,0 @@
name: Publish to WinGet
on:
release:
types: [released]
jobs:
publish:
runs-on: windows-latest # Action can only be run on windows
steps:
- uses: vedantmgoyal2009/winget-releaser@latest
with:
identifier: ArmCord.ArmCord
token: ${{ secrets.WINGET_TOKEN }}

View file

@ -34,19 +34,6 @@
### Recommended: ### Recommended:
Check releases tab for precompiled packages for Linux, Windows and Mac OS. Alternatively use our Sourceforge mirror. Check releases tab for precompiled packages for Linux, Windows and Mac OS. Alternatively use our Sourceforge mirror.
<a href="https://sourceforge.net/projects/armcord/files/latest/download"><img alt="Download ArmCord" src="https://a.fsdn.com/con/app/sf-download-button" width=276 height=48 srcset="https://a.fsdn.com/con/app/sf-download-button?button_size=2x 2x"></a> <a href="https://sourceforge.net/projects/armcord/files/latest/download"><img alt="Download ArmCord" src="https://a.fsdn.com/con/app/sf-download-button" width=276 height=48 srcset="https://a.fsdn.com/con/app/sf-download-button?button_size=2x 2x"></a>
### Winget Package
ArmCord is also available on the [winget-pkgs](https://github.com/microsoft/winget-pkgs) repository:
```
winget install ArmCord.ArmCord
```
### Scoop package
ArmCord is also available on [Scoop extras](https://github.com/ScoopInstaller/Extras) repo:
```
scoop bucket add extras
```
```
scoop install armcord
```
### AUR Package ### AUR Package
ArmCord is also available on the Arch User Repository (AUR) [here](https://aur.archlinux.org/packages/armcord-bin/). ArmCord is also available on the Arch User Repository (AUR) [here](https://aur.archlinux.org/packages/armcord-bin/).

View file

@ -7,7 +7,6 @@
"build": "tsc && copyfiles -u 1 src/**/*.html src/**/**/*.css ts-out/ && copyfiles package.json ts-out/ && copyfiles assets/**/** ts-out/", "build": "tsc && copyfiles -u 1 src/**/*.html src/**/**/*.css ts-out/ && copyfiles package.json ts-out/ && copyfiles assets/**/** ts-out/",
"watch": "tsc -w", "watch": "tsc -w",
"start": "npm run build && electron ./ts-out/main.js", "start": "npm run build && electron ./ts-out/main.js",
"startNoSandbox": "npm run build && electron ./ts-out/main.js --no-sandbox",
"package": "npm run build && electron-builder", "package": "npm run build && electron-builder",
"packageQuick": "npm run build && electron-builder --dir", "packageQuick": "npm run build && electron-builder --dir",
"format": "prettier --write src/**/*", "format": "prettier --write src/**/*",

View file

@ -111,6 +111,7 @@ div {
width: 292px; width: 292px;
} }
[armcord-platform="win32"] .titlebar #window-controls-container #maximize, [armcord-platform="win32"] .titlebar #window-controls-container #maximize,
[armcord-platform="linux"] .titlebar #window-controls-container #maximize { [armcord-platform="linux"] .titlebar #window-controls-container #maximize {
display: none; display: none;

View file

@ -2,7 +2,7 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/ico" href="./favicon.ico" /> <link rel="icon" type="image/ico" href="./favicon.ico">
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>ArmCord Setup</title> <title>ArmCord Setup</title>
@ -53,7 +53,9 @@
<p class="text-center setup-ask" id="setup_question4">Select a client mod you want to install:</p> <p class="text-center setup-ask" id="setup_question4">Select a client mod you want to install:</p>
<div class="center"> <div class="center">
<select name="mod" id="mod" class="dropdown-button"> <select name="mod" id="mod" class="dropdown-button">
<option value="none">None (check Discord)</option> <option value="cumcord">Cumcord</option>
<option value="goosemod">GooseMod</option>
<option value="flicker">Flicker (Heavily WIP)</option>
</select> </select>
</div> </div>
<p class="text-center" id="setup_question4_clientmodnotice"> <p class="text-center" id="setup_question4_clientmodnotice">
@ -118,7 +120,7 @@
minimizeToTray: true, minimizeToTray: true,
alternativePaste: false, alternativePaste: false,
automaticPatches: false, automaticPatches: false,
mods: "none", mods: "cumcord",
inviteWebsocket: true, inviteWebsocket: true,
mobileMode: false, mobileMode: false,
trayIcon: "default", trayIcon: "default",

View file

@ -2,7 +2,7 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/ico" href="./favicon.ico" /> <link rel="icon" type="image/ico" href="./favicon.ico">
<title>ArmCord</title> <title>ArmCord</title>
<style> <style>
@import url("css/splash.css"); @import url("css/splash.css");

View file

@ -21,7 +21,15 @@ const unstrictCSP = () => {
const cspAllowAll = ["connect-src", "style-src", "img-src", "font-src"]; const cspAllowAll = ["connect-src", "style-src", "img-src", "font-src"];
const corsAllowUrls = ["https://raw.githubusercontent.com/Cordwood/builds/master/index.js"]; const corsAllowUrls = [
"https://github.com/GooseMod/GooseMod/releases/download/dev/index.js",
"https://github-releases.githubusercontent.com/",
"https://api.goosemod.com/inject.js",
"https://raw.githubusercontent.com/Cumcord/Cumcord/stable/dist/build.js",
"https://raw.githubusercontent.com/Cumcord/Cumcord/master/dist/build.js",
"https://raw.githubusercontent.com/FlickerMod/dist/main/build.js",
"https://raw.githubusercontent.com/Cordwood/builds/master/index.js"
];
electron.session.defaultSession.webRequest.onHeadersReceived(({responseHeaders, url}, done) => { electron.session.defaultSession.webRequest.onHeadersReceived(({responseHeaders, url}, done) => {
let csp = responseHeaders!["content-security-policy"]; let csp = responseHeaders!["content-security-policy"];

View file

@ -15,6 +15,7 @@ contextBridge.exposeInMainWorld("armcord", {
}, },
electron: process.versions.electron, electron: process.versions.electron,
channel: ipcRenderer.sendSync("channel"), channel: ipcRenderer.sendSync("channel"),
setLang: (lang: string) => ipcRenderer.send("setLang", lang),
setPingCount: (pingCount: number) => ipcRenderer.send("setPing", pingCount), setPingCount: (pingCount: number) => ipcRenderer.send("setPing", pingCount),
setTrayIcon: (favicon: string) => ipcRenderer.send("sendTrayIcon", favicon), setTrayIcon: (favicon: string) => ipcRenderer.send("sendTrayIcon", favicon),
getLang: (toGet: string) => getLang: (toGet: string) =>

View file

@ -4,7 +4,7 @@ import "./patch";
import * as fs from "fs"; import * as fs from "fs";
import * as path from "path"; import * as path from "path";
import {injectHummusTitlebar, injectTitlebar} from "./titlebar"; import {injectHummusTitlebar, injectTitlebar} from "./titlebar";
import {sleep, addStyle, injectJS} from "../utils"; import {sleep, addStyle, injectJS, addScript} from "../utils";
import {ipcRenderer} from "electron"; import {ipcRenderer} from "electron";
import {injectMobileStuff} from "./mobile"; import {injectMobileStuff} from "./mobile";
var version = ipcRenderer.sendSync("displayVersion"); var version = ipcRenderer.sendSync("displayVersion");
@ -13,9 +13,9 @@ async function updateLang() {
if (window.location.href.indexOf("setup.html") > -1) { if (window.location.href.indexOf("setup.html") > -1) {
console.log("Setup, skipping lang update"); console.log("Setup, skipping lang update");
} else { } else {
const value = `; ${document.cookie}`; addScript(`function getDiscordLang() {
const parts: any = value.split(`; locale=`); {const _w=webpackChunkdiscord_app;let lang;_w.push([[Symbol()],{},e=>{for(const k in e.c){const m=e.c[k].exports;const mDef=m?.default&&m.__esModule?m.default:m;if(mDef?._chosenLocale&&!lang)lang=mDef}}]);_w.pop();window.armcord.setLang(lang._chosenLocale);return lang._chosenLocale;void 0}}
if (parts.length === 2) ipcRenderer.send("setLang", parts.pop().split(";").shift()); getDiscordLang();`);
} }
} }
declare global { declare global {
@ -25,6 +25,8 @@ declare global {
} }
const clientMods = { const clientMods = {
goosemod: "https://api.goosemod.com/inject.js", goosemod: "https://api.goosemod.com/inject.js",
cumcord: "https://raw.githubusercontent.com/Cumcord/Cumcord/stable/dist/build.js",
flicker: "https://raw.githubusercontent.com/FlickerMod/dist/main/build.js",
cordwood: "https://raw.githubusercontent.com/Cordwood/builds/master/index.js" cordwood: "https://raw.githubusercontent.com/Cordwood/builds/master/index.js"
}; };
@ -55,6 +57,16 @@ if (window.location.href.indexOf("splash.html") > -1) {
console.log("Loading GooseMod..."); console.log("Loading GooseMod...");
await updateLang(); await updateLang();
break; break;
case "cumcord":
injectJS(clientMods.cumcord);
console.log("Loading Cumcord...");
await updateLang();
break;
case "flicker":
injectJS(clientMods.flicker);
console.log("Loading FlickerMod...");
await updateLang();
break;
case "cordwood": case "cordwood":
injectJS(clientMods.cordwood); injectJS(clientMods.cordwood);
console.log("Loading Cordwood..."); console.log("Loading Cordwood...");

View file

@ -143,8 +143,8 @@
<br /> <br />
<div class="switch acAdvSettings"> <div class="switch acAdvSettings">
<h1 class="center advancedText">⚠️ Advanced User Zone ⚠️</h1> <h1 class="center advancedText">⚠️ Advanced User Zone ⚠️</h1>
<br /> <br>
<br /> <br>
<label class="header" id="settings-skipSplash">Skip Splash Screen (Experimental)</label> <label class="header" id="settings-skipSplash">Skip Splash Screen (Experimental)</label>
<input class="tgl tgl-light left" id="skipSplash" type="checkbox" /> <input class="tgl tgl-light left" id="skipSplash" type="checkbox" />
<label class="tgl-btn left" for="skipSplash"></label> <label class="tgl-btn left" for="skipSplash"></label>
@ -210,7 +210,7 @@
doneSetup: true doneSetup: true
}); });
alert(`Your settings have been saved! alert(`Your settings have been saved!
Some changes may require the app to restart before taking effect.`); Some changes may require the app to restart before taking effect.`)
}); });
document.getElementById("settings-restart").addEventListener("click", function () { document.getElementById("settings-restart").addEventListener("click", function () {
settings.restart(); settings.restart();

View file

@ -123,7 +123,9 @@
<br /> <br />
<div class="switch acClientMod"> <div class="switch acClientMod">
<select name="mod" id="mod" class="left dropdown"> <select name="mod" id="mod" class="left dropdown">
<option value="cumcord">Cumcord</option>
<option value="goosemod">GooseMod</option> <option value="goosemod">GooseMod</option>
<option value="flicker">Flicker</option>
<option value="none">None</option> <option value="none">None</option>
</select> </select>
<p class="header" id="settings-mod">Client mod</p> <p class="header" id="settings-mod">Client mod</p>
@ -131,8 +133,13 @@
Client mods are programs that allow you customize your Discord experience. They can change appearance of Client mods are programs that allow you customize your Discord experience. They can change appearance of
the client, modify behaviours or add new features! the client, modify behaviours or add new features!
<br /> <br />
<b>Cumcord</b> - focuses on making the Discord plugin development experience easier. Minimal and
lightweight.
<br />
<b>GooseMod</b> - light, secure, and easy to use, with out of the box experience. Features a built-in <b>GooseMod</b> - light, secure, and easy to use, with out of the box experience. Features a built-in
store for plugins. store for plugins.
<br />
<b>Flicker</b> - heavily work in progress, doesn't have a working UI.
</p> </p>
</div> </div>
<br /> <br />
@ -171,8 +178,8 @@
<br /> <br />
<div class="switch acAdvSettings"> <div class="switch acAdvSettings">
<h1 class="center advancedText">⚠️ Advanced User Zone ⚠️</h1> <h1 class="center advancedText">⚠️ Advanced User Zone ⚠️</h1>
<br /> <br>
<br /> <br>
<label class="header" id="settings-skipSplash">Skip Splash Screen (Experimental)</label> <label class="header" id="settings-skipSplash">Skip Splash Screen (Experimental)</label>
<input class="tgl tgl-light left" id="skipSplash" type="checkbox" /> <input class="tgl tgl-light left" id="skipSplash" type="checkbox" />
<label class="tgl-btn left" for="skipSplash"></label> <label class="tgl-btn left" for="skipSplash"></label>

View file

@ -40,7 +40,7 @@ export function setup() {
minimizeToTray: true, minimizeToTray: true,
automaticPatches: false, automaticPatches: false,
alternativePaste: false, alternativePaste: false,
mods: "none", mods: "cumcord",
performanceMode: "none", performanceMode: "none",
skipSplash: false, skipSplash: false,
inviteWebsocket: true, inviteWebsocket: true,