mirror of
https://github.com/zerpoak/AlwaysPush.git
synced 2025-09-10 07:42:34 +00:00
Initial commit
This commit is contained in:
74
index.ts
Normal file
74
index.ts
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
import definePlugin from "@utils/types"; // Standard Vencord plugin wrapper
|
||||||
|
import { FluxDispatcher } from "@webpack/common"; // Event dispatcher used to simulate presence events
|
||||||
|
|
||||||
|
export default definePlugin({
|
||||||
|
name: "AlwaysPush",
|
||||||
|
description: "Force Discord to always mark you as AFK to receive push notifications — without changing your DND or Online status.",
|
||||||
|
authors: [{ name: "zerpoak", id: 0 }],
|
||||||
|
|
||||||
|
// --- Patch internal AFK state handling ---
|
||||||
|
patches: [
|
||||||
|
{
|
||||||
|
// Look for code where Discord dispatches AFK changes (e.g. AFK: false)
|
||||||
|
find: 'type:"AFK",afk:',
|
||||||
|
replacement: [
|
||||||
|
{
|
||||||
|
// Intercept attempts to mark the user as AFK: false
|
||||||
|
match: /\i\.\i\.dispatch\({type:"AFK",afk:!1}\)/,
|
||||||
|
replace: "$self.enforceAfk()" // Replace with our own override method
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Also patch the AFK_SET event
|
||||||
|
find: 'type:"AFK_SET",afk:',
|
||||||
|
replacement: [
|
||||||
|
{
|
||||||
|
// Same logic for the AFK_SET false event
|
||||||
|
match: /\i\.\i\.dispatch\({type:"AFK_SET",afk:!1}\)/,
|
||||||
|
replace: "$self.enforceAfkSet()" // Override with our enforced version
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
// Called when the plugin is turned on
|
||||||
|
start() {
|
||||||
|
console.log("[AlwaysPush] Plugin started. Dispatching AFK and AFK_SET.");
|
||||||
|
|
||||||
|
// Immediately dispatch AFK true so the user appears inactive
|
||||||
|
FluxDispatcher.dispatch({ type: "AFK", afk: true });
|
||||||
|
FluxDispatcher.dispatch({ type: "AFK_SET", afk: true });
|
||||||
|
|
||||||
|
// Optionally: refresh every 60 seconds to keep state consistent (adjustable)
|
||||||
|
this.interval = setInterval(() => {
|
||||||
|
FluxDispatcher.dispatch({ type: "AFK", afk: true });
|
||||||
|
FluxDispatcher.dispatch({ type: "AFK_SET", afk: true });
|
||||||
|
console.log("[AlwaysPush] Re-dispatched AFK and AFK_SET.");
|
||||||
|
}, 60000);
|
||||||
|
},
|
||||||
|
|
||||||
|
// Called when the plugin is turned off
|
||||||
|
stop() {
|
||||||
|
// Clean up interval
|
||||||
|
clearInterval(this.interval);
|
||||||
|
|
||||||
|
// Optionally return to AFK: false if you want to clean state (optional)
|
||||||
|
FluxDispatcher.dispatch({ type: "AFK", afk: false });
|
||||||
|
FluxDispatcher.dispatch({ type: "AFK_SET", afk: false });
|
||||||
|
|
||||||
|
console.log("[AlwaysPush] Plugin stopped. AFK state cleared.");
|
||||||
|
},
|
||||||
|
|
||||||
|
// Override Discord’s AFK: false dispatch with AFK: true
|
||||||
|
enforceAfk() {
|
||||||
|
FluxDispatcher.dispatch({ type: "AFK", afk: true });
|
||||||
|
console.log("[AlwaysPush] Blocked AFK:false → Forced AFK:true");
|
||||||
|
},
|
||||||
|
|
||||||
|
// Override Discord’s AFK_SET: false dispatch with AFK_SET: true
|
||||||
|
enforceAfkSet() {
|
||||||
|
FluxDispatcher.dispatch({ type: "AFK_SET", afk: true });
|
||||||
|
console.log("[AlwaysPush] Blocked AFK_SET:false → Forced AFK_SET:true");
|
||||||
|
}
|
||||||
|
});
|
Reference in New Issue
Block a user