fix arRPC (again) (#531)

* fix arRPC

* Re-apply the rpc handler every 30 seconds

Co-authored-by: millistice <148235157+millistice@users.noreply.github.com>

* apply ven's suggestions

---------

Co-authored-by: millistice <148235157+millistice@users.noreply.github.com>
This commit is contained in:
Angelos Bouklis 2023-12-28 11:06:21 +02:00 committed by GitHub
parent 4f6d40c129
commit da4463beb8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,97 +1,61 @@
window.addEventListener("load", async () => { {
let Dispatcher = undefined, const cb = () => {
lookupAsset = undefined, let Dispatcher,
lookupApp = undefined; lookupAsset,
lookupApp,
apps = {};
let apps = {}; ArmCordRPC.listen(async (msg) => {
const chunkName = 'webpackChunkdiscord_app'; if (!Dispatcher) {
let wpRequire;
window.webpackChunkdiscord_app.push([[Symbol()], {}, (x) => (wpRequire = x)]);
window.webpackChunkdiscord_app.pop();
const wpRequire = window[chunkName].push( const modules = wpRequire.c;
[ [Symbol()], {}, (x) => x ] lookupAsset = Object.values(modules).find(m => m.exports?.fetchAssetIds).exports.fetchAssetIds;
); lookupApp = Object.values(modules).find(m => m.exports?.fetchApplicationsRPC).exports.fetchApplicationsRPC;
const cache = wpRequire.c; for (const id in modules) {
window[chunkName].pop(); const mod = modules[id].exports;
if (!mod?.__esModule) continue;
for (const id in cache) { for (const prop in mod) {
let mod = cache[id].exports; if (!mod.hasOwnProperty(prop)) continue;
if (typeof mod !== "object") continue;
let candidates; const candidate = mod[prop];
try { if (candidate && candidate.register && candidate.wait) {
candidates = Object.values(mod); Dispatcher = candidate;
} catch { break;
continue; }
} }
for (const candidate of candidates) { if (Dispatcher) break;
if (candidate && candidate.register && candidate.wait) { }
Dispatcher = candidate; }
break;
}
}
}
const factories = wpRequire.m; if (msg.activity?.assets?.large_image)
for (const id in factories) { msg.activity.assets.large_image = await lookupAsset(
if ( msg.activity.application_id,
factories[id] msg.activity.assets.large_image
.toString() );
.includes("getAssetImage: size must === [number, number] for Twitch") if (msg.activity?.assets?.small_image)
) { msg.activity.assets.small_image = await lookupAsset(
const mod = wpRequire(id); msg.activity.application_id,
msg.activity.assets.small_image
);
// fetchAssetIds if (msg.activity) {
const _lookupAsset = Object.values(mod).find( const appId = msg.activity.application_id;
(e) => if (!apps[appId]) apps[appId] = await lookupApp(appId);
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) { const app = apps[appId];
if (factories[id].toString().includes("APPLICATION_RPC")) { if (!msg.activity.name) msg.activity.name = app.name;
const mod = wpRequire(id); }
// fetchApplicationsRPC Dispatcher.dispatch({type: "LOCAL_ACTIVITY_UPDATE", ...msg}); // set RPC status
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;
}
ArmCordRPC.listen(async (msg) => { cb();
if (msg.activity) { setInterval(cb, 30 * 1000);
if (msg.activity?.assets?.large_image && lookupAsset) }
msg.activity.assets.large_image = await lookupAsset(
msg.activity.application_id,
msg.activity.assets.large_image,
);
if (msg.activity?.assets?.small_image && lookupAsset)
msg.activity.assets.small_image = await lookupAsset(
msg.activity.application_id,
msg.activity.assets.small_image,
);
const appId = msg.activity.application_id;
if (!apps[appId] && lookupApp) 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
});
});