Add Web/Desktop specific plugin capabilities; misc fixes
This commit is contained in:
parent
3b945b87b8
commit
5d1283bd85
@ -33,6 +33,8 @@ export const banner = {
|
|||||||
`.trim()
|
`.trim()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const isWeb = process.argv.slice(0, 2).some(f => f.endsWith("buildWeb.mjs"));
|
||||||
|
|
||||||
// https://github.com/evanw/esbuild/issues/619#issuecomment-751995294
|
// https://github.com/evanw/esbuild/issues/619#issuecomment-751995294
|
||||||
/**
|
/**
|
||||||
* @type {import("esbuild").Plugin}
|
* @type {import("esbuild").Plugin}
|
||||||
@ -70,7 +72,13 @@ export const globPlugins = {
|
|||||||
for (const file of files) {
|
for (const file of files) {
|
||||||
if (file.startsWith(".")) continue;
|
if (file.startsWith(".")) continue;
|
||||||
if (file === "index.ts") continue;
|
if (file === "index.ts") continue;
|
||||||
if (!watch && (file.endsWith(".dev.ts") || file.endsWith(".dev.tsx"))) continue;
|
const fileBits = file.split(".");
|
||||||
|
if (fileBits.length > 2 && ["ts", "tsx"].includes(fileBits.at(-1))) {
|
||||||
|
const mod = fileBits.at(-2);
|
||||||
|
if (mod === "dev" && !watch) continue;
|
||||||
|
if (mod === "web" && !isWeb) continue;
|
||||||
|
if (mod === "desktop" && isWeb) continue;
|
||||||
|
}
|
||||||
|
|
||||||
const mod = `p${i}`;
|
const mod = `p${i}`;
|
||||||
code += `import ${mod} from "./${dir}/${file.replace(/\.tsx?$/, "")}";\n`;
|
code += `import ${mod} from "./${dir}/${file.replace(/\.tsx?$/, "")}";\n`;
|
||||||
|
3
src/globals.d.ts
vendored
3
src/globals.d.ts
vendored
@ -51,8 +51,7 @@ declare global {
|
|||||||
* Only available when running in Electron, undefined on web.
|
* Only available when running in Electron, undefined on web.
|
||||||
* Thus, avoid using this or only use it inside an {@link IS_WEB} guard.
|
* Thus, avoid using this or only use it inside an {@link IS_WEB} guard.
|
||||||
*
|
*
|
||||||
* If you really must use it, mark your plugin as Desktop App only via
|
* If you really must use it, mark your plugin as Desktop App only by naming it Foo.desktop.ts(x)
|
||||||
* `target: "DESKTOP"`
|
|
||||||
*/
|
*/
|
||||||
export var DiscordNative: any;
|
export var DiscordNative: any;
|
||||||
|
|
||||||
|
@ -48,7 +48,6 @@ export default definePlugin({
|
|||||||
name: "WebRichPresence (arRPC)",
|
name: "WebRichPresence (arRPC)",
|
||||||
description: "Client plugin for arRPC to enable RPC on Discord Web (experimental)",
|
description: "Client plugin for arRPC to enable RPC on Discord Web (experimental)",
|
||||||
authors: [Devs.Ducko],
|
authors: [Devs.Ducko],
|
||||||
target: "WEB",
|
|
||||||
|
|
||||||
settingsAboutComponent: () => (
|
settingsAboutComponent: () => (
|
||||||
<>
|
<>
|
||||||
@ -60,6 +59,9 @@ export default definePlugin({
|
|||||||
),
|
),
|
||||||
|
|
||||||
async start() {
|
async start() {
|
||||||
|
// ArmCord comes with its own arRPC implementation, so this plugin just confuses users
|
||||||
|
if ("armcord" in window) return;
|
||||||
|
|
||||||
if (ws) ws.close();
|
if (ws) ws.close();
|
||||||
ws = new WebSocket("ws://127.0.0.1:1337"); // try to open WebSocket
|
ws = new WebSocket("ws://127.0.0.1:1337"); // try to open WebSocket
|
||||||
|
|
@ -32,14 +32,14 @@ export default definePlugin({
|
|||||||
authors: [Devs.Ven],
|
authors: [Devs.Ven],
|
||||||
|
|
||||||
getShortcuts() {
|
getShortcuts() {
|
||||||
function newFindWrapper(filterFactory: (props: any) => Webpack.FilterFn) {
|
function newFindWrapper(filterFactory: (...props: any[]) => Webpack.FilterFn) {
|
||||||
const cache = new Map<string, any>();
|
const cache = new Map<string, unknown>();
|
||||||
|
|
||||||
return function (filterProps: any) {
|
return function (...filterProps: unknown[]) {
|
||||||
const cacheKey = String(filterProps);
|
const cacheKey = String(filterProps);
|
||||||
if (cache.has(cacheKey)) return cache.get(cacheKey);
|
if (cache.has(cacheKey)) return cache.get(cacheKey);
|
||||||
|
|
||||||
const matches = findAll(filterFactory(filterProps));
|
const matches = findAll(filterFactory(...filterProps));
|
||||||
|
|
||||||
const result = (() => {
|
const result = (() => {
|
||||||
switch (matches.length) {
|
switch (matches.length) {
|
||||||
|
@ -112,7 +112,7 @@ function initWs(isManual = false) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
ws.addEventListener("close", e => {
|
ws.addEventListener("close", e => {
|
||||||
if (!wasConnected && !hasErrored) return;
|
if (!wasConnected || hasErrored) return;
|
||||||
|
|
||||||
logger.info("Dev Companion Disconnected:", e.code, e.reason);
|
logger.info("Dev Companion Disconnected:", e.code, e.reason);
|
||||||
|
|
||||||
@ -204,8 +204,9 @@ function initWs(isManual = false) {
|
|||||||
return reply("Unknown Find Type " + type);
|
return reply("Unknown Find Type " + type);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (results.length === 0) throw "No results";
|
const uniqueResultsCount = new Set(results).size;
|
||||||
if (results.length > 1) throw "Found more than one result! Make this filter more specific";
|
if (uniqueResultsCount === 0) throw "No results";
|
||||||
|
if (uniqueResultsCount > 1) throw "Found more than one result! Make this filter more specific";
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return reply("Failed to find: " + err);
|
return reply("Failed to find: " + err);
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,6 @@ export default definePlugin({
|
|||||||
name: "NoRPC",
|
name: "NoRPC",
|
||||||
description: "Disables Discord's RPC server.",
|
description: "Disables Discord's RPC server.",
|
||||||
authors: [Devs.Cyn],
|
authors: [Devs.Cyn],
|
||||||
target: "DESKTOP",
|
|
||||||
patches: [
|
patches: [
|
||||||
{
|
{
|
||||||
find: '.ensureModule("discord_rpc")',
|
find: '.ensureModule("discord_rpc")',
|
@ -23,7 +23,6 @@ export default definePlugin({
|
|||||||
name: "NoSystemBadge",
|
name: "NoSystemBadge",
|
||||||
description: "Disables the taskbar and system tray unread count badge.",
|
description: "Disables the taskbar and system tray unread count badge.",
|
||||||
authors: [Devs.rushii],
|
authors: [Devs.rushii],
|
||||||
target: "DESKTOP",
|
|
||||||
patches: [
|
patches: [
|
||||||
{
|
{
|
||||||
find: "setSystemTrayApplications:function",
|
find: "setSystemTrayApplications:function",
|
@ -1,67 +1,67 @@
|
|||||||
/*
|
/*
|
||||||
* Vencord, a modification for Discord's desktop app
|
* Vencord, a modification for Discord's desktop app
|
||||||
* Copyright (c) 2022 OpenAsar
|
* Copyright (c) 2022 OpenAsar
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Link } from "@components/Link";
|
import { Link } from "@components/Link";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
import { Forms } from "@webpack/common";
|
import { Forms } from "@webpack/common";
|
||||||
const appIds = [
|
const appIds = [
|
||||||
"911790844204437504",
|
"911790844204437504",
|
||||||
"886578863147192350",
|
"886578863147192350",
|
||||||
"1020414178047041627",
|
"1020414178047041627",
|
||||||
"1032800329332445255"
|
"1032800329332445255"
|
||||||
];
|
];
|
||||||
export default definePlugin({
|
export default definePlugin({
|
||||||
name: "richerCider",
|
name: "richerCider",
|
||||||
description: "Enhances Cider (More details in info button) by adding the \"Listening to\" type prefix to the user's rich presence when an applicable ID is found.",
|
description: "Enhances Cider (More details in info button) by adding the \"Listening to\" type prefix to the user's rich presence when an applicable ID is found.",
|
||||||
authors: [{
|
authors: [{
|
||||||
id: 191621342473224192n,
|
id: 191621342473224192n,
|
||||||
name: "cryptofyre",
|
name: "cryptofyre",
|
||||||
}],
|
}],
|
||||||
patches: [
|
patches: [
|
||||||
{
|
{
|
||||||
find: '.displayName="LocalActivityStore"',
|
find: '.displayName="LocalActivityStore"',
|
||||||
replacement: {
|
replacement: {
|
||||||
match: /LOCAL_ACTIVITY_UPDATE:function\((\i)\)\{/,
|
match: /LOCAL_ACTIVITY_UPDATE:function\((\i)\)\{/,
|
||||||
replace: "$&$self.patchActivity($1.activity);",
|
replace: "$&$self.patchActivity($1.activity);",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
settingsAboutComponent: () => (
|
settingsAboutComponent: () => (
|
||||||
<>
|
<>
|
||||||
<Forms.FormTitle tag="h3">Install Cider to use this Plugin</Forms.FormTitle>
|
<Forms.FormTitle tag="h3">Install Cider to use this Plugin</Forms.FormTitle>
|
||||||
<Forms.FormText>
|
<Forms.FormText>
|
||||||
<Link href="https://cider.sh">Follow the link to our website</Link> to get Cider up and running, and then enable the plugin.
|
<Link href="https://cider.sh">Follow the link to our website</Link> to get Cider up and running, and then enable the plugin.
|
||||||
</Forms.FormText>
|
</Forms.FormText>
|
||||||
<br></br>
|
<br></br>
|
||||||
<Forms.FormTitle tag="h3">What is Cider?</Forms.FormTitle>
|
<Forms.FormTitle tag="h3">What is Cider?</Forms.FormTitle>
|
||||||
<Forms.FormText>
|
<Forms.FormText>
|
||||||
Cider is an open-source and community oriented Apple Music client for Windows, macOS, and Linux.
|
Cider is an open-source and community oriented Apple Music client for Windows, macOS, and Linux.
|
||||||
</Forms.FormText>
|
</Forms.FormText>
|
||||||
<br></br>
|
<br></br>
|
||||||
<Forms.FormTitle tag="h3">Recommended Optional Plugins</Forms.FormTitle>
|
<Forms.FormTitle tag="h3">Recommended Optional Plugins</Forms.FormTitle>
|
||||||
<Forms.FormText>
|
<Forms.FormText>
|
||||||
I'd recommend using TimeBarAllActivities alongside this plugin to give off a much better visual to the eye (Keep in mind this only affects your client and will not show for other users)
|
I'd recommend using TimeBarAllActivities alongside this plugin to give off a much better visual to the eye (Keep in mind this only affects your client and will not show for other users)
|
||||||
</Forms.FormText>
|
</Forms.FormText>
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
patchActivity(activity: any) {
|
patchActivity(activity: any) {
|
||||||
if (appIds.includes(activity.application_id)) {
|
if (appIds.includes(activity.application_id)) {
|
||||||
activity.type = 2; /* LISTENING type */
|
activity.type = 2; /* LISTENING type */
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
@ -23,7 +23,7 @@ export default definePlugin({
|
|||||||
name: "WebContextMenus",
|
name: "WebContextMenus",
|
||||||
description: "Re-adds some of context menu items missing on the web version of Discord, namely Copy/Open Link",
|
description: "Re-adds some of context menu items missing on the web version of Discord, namely Copy/Open Link",
|
||||||
authors: [Devs.Ven],
|
authors: [Devs.Ven],
|
||||||
target: "WEB",
|
enabledByDefault: true,
|
||||||
|
|
||||||
patches: [{
|
patches: [{
|
||||||
// There is literally no reason for Discord to make this Desktop only.
|
// There is literally no reason for Discord to make this Desktop only.
|
@ -79,10 +79,6 @@ export interface PluginDef {
|
|||||||
* Whether this plugin should be enabled by default, but can be disabled
|
* Whether this plugin should be enabled by default, but can be disabled
|
||||||
*/
|
*/
|
||||||
enabledByDefault?: boolean;
|
enabledByDefault?: boolean;
|
||||||
/**
|
|
||||||
* Set this if your plugin only works on Browser or Desktop, not both
|
|
||||||
*/
|
|
||||||
target?: "WEB" | "DESKTOP" | "BOTH";
|
|
||||||
/**
|
/**
|
||||||
* Optionally provide settings that the user can configure in the Plugins tab of settings.
|
* Optionally provide settings that the user can configure in the Plugins tab of settings.
|
||||||
* @deprecated Use `settings` instead
|
* @deprecated Use `settings` instead
|
||||||
|
Loading…
Reference in New Issue
Block a user