Unbrick Vencord - Pt 1

This commit is contained in:
Vendicated 2022-09-27 14:34:57 +02:00
parent d0940a8b19
commit 6398dd25d2
No known key found for this signature in database
GPG Key ID: EC781ADFB93EFFA3
9 changed files with 34 additions and 48 deletions

@ -7,8 +7,8 @@ export default definePlugin({
patches: [{ patches: [{
find: "setDevtoolsCallbacks", find: "setDevtoolsCallbacks",
replacement: { replacement: {
match: /\.default=function.+$/, match: /\.setDevtoolsCallbacks\(.+?else/,
replace: ".default=function(){}}" replace: ".setDevtoolsCallbacks(null,null);else"
} }
}] }]
}); });

@ -8,20 +8,20 @@ export default definePlugin({
{ {
find: "sendMessage:function", find: "sendMessage:function",
replacement: [{ replacement: [{
match: /(?<=sendMessage:function\(.{1,2},.{1,2},.{1,2},.{1,2}\)){/, match: /(?<=_sendMessage:function\([^)]+\)){/,
replace: "{Vencord.Api.MessageEvents._handlePreSend(...arguments);" replace: "{Vencord.Api.MessageEvents._handlePreSend(...arguments);"
}, { }, {
match: /(?<=editMessage:function\(.{1,2},.{1,2},.{1,2}\)){/, match: /(?<=\beditMessage:function\([^)]+\)){/,
replace: "{Vencord.Api.MessageEvents._handlePreEdit(...arguments);" replace: "{Vencord.Api.MessageEvents._handlePreEdit(...arguments);"
}] }]
}, },
{ {
find: "if(e.altKey){", find: "if(e.altKey){",
replacement: { replacement: {
match: /\.useClickMessage=function\((.{1,2}),(.{1,2})\).+?function\((.{1,2})\){/, match: /var \w=(\w)\.id,\w=(\w)\.id;return .{1,2}\.useCallback\(\(?function\((.{1,2})\){/,
replace: (m, message, channel, event) => replace: (m, message, channel, event) =>
// the message param is shadowed by the event param, so need to alias them // the message param is shadowed by the event param, so need to alias them
`${m.replace("{", `{var _msg=${message};var _chan=${channel};`)}Vencord.Api.MessageEvents._handleClick(_msg, _chan, ${event});` `var _msg=${message},_chan=${channel};${m}Vencord.Api.MessageEvents._handleClick(_msg, _chan, ${event});`
} }
} }
] ]

@ -1,14 +0,0 @@
import definePlugin from "../utils/types";
export default definePlugin({
name: "cumcord",
description: "Loads cumcord. That's it",
author: "Vendicated",
async start() {
const cum = await fetch("https://raw.githubusercontent.com/Cumcord/Cumcord/stable/dist/build.js");
(0, eval)(await cum.text());
},
stop() {
window.cumcord?.uninject();
},
});

@ -7,17 +7,14 @@ export default definePlugin({
patches: [ patches: [
{ {
find: '.displayName="SpotifyStore"', find: '.displayName="SpotifyStore"',
replacement: { replacement: [{
match: /\.isPremium=.;/, match: /\.isPremium=.;/,
replace: ".isPremium=true;", replace: ".isPremium=true;",
}, }, ...["SPEAKING", "VOICE_STATE_UPDATES", "MEDIA_ENGINE_SET_DESKTOP_SOURCE"].map(event => ({
},
{
find: '.displayName="SpotifyStore"',
replacement: ["SPEAKING", "VOICE_STATE_UPDATES", "MEDIA_ENGINE_SET_DESKTOP_SOURCE"].map(event => ({
match: new RegExp(`${event}:function\\(.\\){.+?}(,|}\\))`), match: new RegExp(`${event}:function\\(.\\){.+?}(,|}\\))`),
replace: (_, ending) => `${event}:function(){}${ending}`, replace: (_, ending) => `${event}:function(){}${ending}`,
})), })),
],
}, },
] ]
}); });

@ -16,7 +16,7 @@ export default definePlugin({
start() { start() {
const { deleteMessage, startEditMessage } = findByProps("deleteMessage"); const { deleteMessage, startEditMessage } = findByProps("deleteMessage");
const { can } = findByProps("can", "initialize"); const { can } = findByProps("can", "initialize");
const { Permissions: { MANAGE_MESSAGES } } = find(m => m.Permissions?.MANAGE_MESSAGES); const { MANAGE_MESSAGES } = find(m => typeof m.MANAGE_MESSAGES === "bigint");
const { isEditing } = findByProps("isEditing"); const { isEditing } = findByProps("isEditing");
document.addEventListener("keydown", keydown); document.addEventListener("keydown", keydown);

@ -9,14 +9,14 @@ export default definePlugin({
{ {
find: "TRACKING_URL:", find: "TRACKING_URL:",
replacement: { replacement: {
match: /=\(0,.\.analyticsTrackingStoreMaker\)/, match: /^.+$/,
replace: "=(function(){})", replace: "()=>{}",
}, },
}, },
{ {
find: "window.DiscordSentry=", find: "window.DiscordSentry=",
replacement: { replacement: {
match: /window\.DiscordSentry=\(0,.\.initSentry\)\(\)/, match: /window\.DiscordSentry=function.+\}\(\)/,
replace: "", replace: "",
} }
} }

@ -7,33 +7,27 @@ export default definePlugin({
author: "Vendicated", author: "Vendicated",
required: true, required: true,
patches: [{ patches: [{
find: "default.versionHash", find: "().versionHash",
replacement: [ replacement: [
{ {
match: /return .{1,2}\("div"/, match: /\w\.createElement\(.{1,2}.Fragment,.{0,30}\{[^}]+\},"Host ".+?\):null/,
replace: (m) => {
return `var versions=VencordNative.getVersions();${m}`;
}
},
{
match: /\w\.createElement.+?["']Host ["'].+?\):null/,
replace: m => { replace: m => {
const idx = m.indexOf("Host") - 1; const idx = m.indexOf("Host") - 1;
const template = m.slice(0, idx); const template = m.slice(0, idx);
return `${m}, ${template}"Vencord ", "${gitHash}"), " "), ` + return `${m}, ${template}"Vencord ", "${gitHash}"), " "), ` +
`${template} "Electron ", versions.electron), " "), ` + `${template} "Electron ",VencordNative.getVersions().electron)," "), ` +
`${template} "Chrome ", versions.chrome), " ")`; `${template} "Chrome ",VencordNative.getVersions().chrome)," ")`;
} }
} }
] ]
}, { }, {
find: "Messages.ACTIVITY_SETTINGS", find: "Messages.ACTIVITY_SETTINGS",
replacement: { replacement: {
match: /\{section:(.{1,2})\.SectionTypes\.HEADER,\s*label:(.{1,2})\.default\.Messages\.ACTIVITY_SETTINGS\}/, match: /\{section:(.{1,2})\.ID\.HEADER,\s*label:(.{1,2})\..{1,2}\.Messages\.ACTIVITY_SETTINGS\}/,
replace: (m, mod) => replace: (m, mod) =>
`{section:${mod}.SectionTypes.HEADER,label:"Vencord"},` + `{section:${mod}.ID.HEADER,label:"Vencord"},` +
`{section:"Vencord",label:"Vencord",element:Vencord.Components.Settings},` + `{section:"Vencord",label:"Vencord",element:Vencord.Components.Settings},` +
`{section:${mod}.SectionTypes.DIVIDER},${m}` `{section:${mod}.ID.DIVIDER},${m}`
} }
}] }]

@ -65,9 +65,11 @@ function patchPush() {
if (filter(exports)) { if (filter(exports)) {
subscriptions.delete(filter); subscriptions.delete(filter);
callback(exports); callback(exports);
} else if (exports.default && filter(exports.default)) { } else for (const nested in exports) {
subscriptions.delete(filter); if (exports[nested] && filter(exports[nested])) {
callback(exports.default); subscriptions.delete(filter);
callback(exports[nested]);
}
} }
} catch (err) { } catch (err) {
logger.error("Error while firing callback for webpack chunk", err); logger.error("Error while firing callback for webpack chunk", err);

@ -32,15 +32,22 @@ export function find(filter: FilterFn, getDefault = true) {
for (const key in cache) { for (const key in cache) {
const mod = cache[key]; const mod = cache[key];
if (mod?.exports && filter(mod.exports)) if (!mod?.exports) continue;
if (filter(mod.exports))
return mod.exports; return mod.exports;
if (mod?.exports?.default && filter(mod.exports.default)) if (mod.exports.default && filter(mod.exports.default))
return getDefault ? mod.exports.default : mod.exports; return getDefault ? mod.exports.default : mod.exports;
for (const nestedMod in mod.exports) {
const nested = mod.exports[nestedMod];
if (nested && filter(nested)) return nested;
}
} }
return null; return null;
} }
// TODO fix
export function findAll(filter: FilterFn, getDefault = true) { export function findAll(filter: FilterFn, getDefault = true) {
if (typeof filter !== "function") throw new Error("Invalid filter. Expected a function got", filter); if (typeof filter !== "function") throw new Error("Invalid filter. Expected a function got", filter);