fix arRPC

This commit is contained in:
smartfrigde 2023-11-05 18:39:46 +01:00
parent 4cb480cf93
commit 0dfb518082
3 changed files with 83 additions and 71 deletions

View file

@ -1,79 +1,87 @@
(() => { window.addEventListener(
let Dispatcher, "load",
lookupAsset, (() => {
lookupApp, let Dispatcher,
apps = {}; lookupAsset,
lookupApp,
apps = {};
ArmCordRPC.listen(async (data) => { ArmCordRPC.listen(async (data) => {
msg = data; //already parsed msg = data; //already parsed
//console.log(msg); //console.log(msg);
if (!Dispatcher) { if (!Dispatcher) {
const wpRequire = window.webpackChunkdiscord_app.push([[Symbol()], {}, (x) => x]); const wpRequire = window.webpackChunkdiscord_app.push([[Symbol()], {}, (x) => x]);
const cache = wpRequire.c; const cache = wpRequire.c;
window.webpackChunkdiscord_app.pop(); window.webpackChunkdiscord_app.pop();
for (const id in cache) { for (const id in cache) {
let mod = cache[id].exports; let mod = cache[id].exports;
mod = mod && (mod.Z ?? mod.ZP); for (const prop in mod) {
const candidate = mod[prop];
if (candidate && candidate.register && candidate.wait) {
Dispatcher = candidate;
break;
}
}
if (Dispatcher) break; // make sure to exit outer loop as well
}
if (mod && mod.register && mod.wait) { const factories = wpRequire.m;
Dispatcher = mod; for (const id in factories) {
break; if (factories[id].toString().includes("getAssetImage: size must === [number, number] for Twitch")) {
const mod = wpRequire(id);
// fetchAssetIds
const _lookupAsset = Object.values(mod).find(
(e) => typeof e === "function" && e.toString().includes("APPLICATION_ASSETS_FETCH_SUCCESS")
);
if (_lookupAsset)
lookupAsset = async (appId, name) => (await _lookupAsset(appId, [name, undefined]))[0];
}
if (lookupAsset) break;
}
for (const id in factories) {
if (factories[id].toString().includes("APPLICATION_RPC")) {
const mod = wpRequire(id);
// fetchApplicationsRPC
const _lookupApp = Object.values(mod).find(
(e) => typeof e === "function" && e.toString().includes(",coverImage:")
);
if (_lookupApp)
lookupApp = async (appId) => {
let socket = {};
await _lookupApp(socket, appId);
return socket.application;
};
}
if (lookupApp) break;
} }
} }
const factories = wpRequire.m; if (msg.activity?.assets?.large_image)
for (const id in factories) { msg.activity.assets.large_image = await lookupAsset(
if (factories[id].toString().includes("getAssetImage: size must === [number, number] for Twitch")) { msg.activity.application_id,
const mod = wpRequire(id); msg.activity.assets.large_image
);
if (msg.activity?.assets?.small_image)
msg.activity.assets.small_image = await lookupAsset(
msg.activity.application_id,
msg.activity.assets.small_image
);
const _lookupAsset = Object.values(mod).find( // prevent errors when activity is null and let activity stop
(e) => typeof e === "function" && e.toString().includes("apply(") if (msg.activity) {
); const appId = msg.activity.application_id;
lookupAsset = async (appId, name) => (await _lookupAsset(appId, [name, undefined]))[0]; if (!apps[appId]) apps[appId] = await lookupApp(appId);
break; const app = apps[appId];
} if (!msg.activity.name) msg.activity.name = app.name;
} }
for (const id in factories) { Dispatcher.dispatch({type: "LOCAL_ACTIVITY_UPDATE", ...msg}); // set RPC status
if (factories[id].toString().includes(`e.application={`)) { });
const mod = wpRequire(id); })()
);
const _lookupApp = Object.values(mod).find(
(e) => typeof e === "function" && e.toString().includes(`e.application={`)
);
lookupApp = async (appId) => {
let socket = {};
await _lookupApp(socket, appId);
return socket.application;
};
break;
}
}
}
if (msg.activity?.assets?.large_image)
msg.activity.assets.large_image = await lookupAsset(
msg.activity.application_id,
msg.activity.assets.large_image
);
if (msg.activity?.assets?.small_image)
msg.activity.assets.small_image = await lookupAsset(
msg.activity.application_id,
msg.activity.assets.small_image
);
if (msg.activity) {
const appId = msg.activity.application_id;
if (!apps[appId]) apps[appId] = await lookupApp(appId);
const app = apps[appId];
if (!msg.activity.name) msg.activity.name = app.name;
}
Dispatcher.dispatch({type: "LOCAL_ACTIVITY_UPDATE", ...msg}); // set RPC status
});
})();

View file

@ -67,5 +67,6 @@ contextBridge.exposeInMainWorld("ArmCordRPC", {
} }
}); });
ipcRenderer.on("rpc", (_event, data: object) => { ipcRenderer.on("rpc", (_event, data: object) => {
console.log(data);
windowCallback(data); windowCallback(data);
}); });

View file

@ -73,7 +73,10 @@ sleep(5000).then(async () => {
// Settings info version injection // Settings info version injection
setInterval(() => { setInterval(() => {
const host = document.querySelector<HTMLDivElement>("nav > [class|=side] [class|=info]"); // @ts-expect-error
const host = [...document.querySelectorAll('[class*="sidebar"] [class*="info"] [class*="line"]')].find((x) =>
x.textContent.startsWith("Host ")
);
if (!host || host.querySelector("#ac-ver")) { if (!host || host.querySelector("#ac-ver")) {
return; return;
} }
@ -84,8 +87,8 @@ setInterval(() => {
el.onclick = () => ipcRenderer.send("openSettingsWindow"); el.onclick = () => ipcRenderer.send("openSettingsWindow");
host.append(el); host.append(el);
let advanced = document let advanced = document
.querySelector('[class*="socialLinks-"]')! .querySelector('[class*="socialLinks"]')
.parentElement!.querySelector( ?.parentElement?.querySelector(
'[class*="header"] + [class*="item"] + [class*="item"] + [class*="item"] + [class*="item"] + [class*="item"] + [class*="item"] + [class*="item"] + [class*="item"] + [class*="item"]' '[class*="header"] + [class*="item"] + [class*="item"] + [class*="item"] + [class*="item"] + [class*="item"] + [class*="item"] + [class*="item"] + [class*="item"] + [class*="item"]'
); );
if (!advanced) return; if (!advanced) return;