Skip to content

spixyy7/bd-ghostusers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GhostUsers

Hide people locally on Discord — quietly, and only for you.

License BetterDiscord Aliucord

GhostUsers settings Right-click menu with Hide user (Ghost)

Their messages, reactions and calls stop at your client. Nothing is sent anywhere, nothing is blocked on Discord's side, and there is no trace on their end — for them everything looks completely normal.

Install

  1. Download GhostUsers.plugin.js into %APPDATA%\BetterDiscord\plugins
  2. Open Discord → Settings → Plugins and turn GhostUsers on

Requires BetterDiscord. Press Ctrl+R if the plugin doesn't show up right away.

On Android use the Revenge version — it runs on the official Discord app, so calls still work. The older Aliucord build is frozen: Discord now requires its DAVE encryption for voice and refuses that client entirely.

What it does

Right-click anyone and pick Hide user (Ghost). From that moment:

  • their messages never show up, new or old, and there is no notification or sound
  • no "X is typing…"
  • their reactions don't appear, and a chip only they left disappears
  • in calls they leave no tile and no ringing circle — not even an empty slot, the layout just closes up — and they are muted on your side
  • a call where every participant is hidden doesn't ring and doesn't show up at all
  • they are not in member lists, and the counters count without them
  • replies to their messages don't show the quoted preview

The same can optionally apply to anyone else's message that tags or replies to them.

Settings

Every hidden person carries their own switches, shown as pills on their card: where hiding applies (group DMs, servers, DMs), auto mute in calls, member lists, tags and replies. Click a name to open their pills, click a pill to toggle it, and the red Remove button unhides. The switches at the bottom are only the defaults handed to newly hidden people, with an "Apply to all" button when you want them everywhere.

Good to know

Search results are not filtered.

An old reaction chip can keep its number for a while. Discord sends the count with an old message but never says who reacted, and this plugin refuses to ask the server — that is what keeps it free of any network traffic of its own. It works with what Discord has already fetched: those lists get swept when you hide someone and every time a channel opens, so most counts drop on their own. For an older chip nobody has looked into, hovering it once is enough.

Unhide someone in the middle of a call and they'll reappear on their next voice update, or when they rejoin.

Discord changes its internals every now and then. When something no longer matches, the plugin says so with a toast and a console warning instead of breaking quietly.

Privacy

Nothing leaves your computer. There is no fetch, XMLHttpRequest or WebSocket anywhere in the file, no telemetry and no remote code.

No message is ever stored. The config file holds two things: who you hid along with their options, and which of those people reacted to which message — the second one only so a hidden reaction stays hidden after a restart instead of flashing back.

The plugin only ever takes things away. Nothing hidden from you is revealed: no hidden channels, no deleted messages, nothing you couldn't already see. There is no self-botting, no automation and not a single API call, so the server sees a perfectly ordinary session. Disabling it undoes everything — patches, styles, listeners, DOM changes, timers and queued frames.

The source is one plain file with no bundler, no minification and no require, child_process or eval, and it never touches tokens, emails or passwords.

Under the hood

Patcher.instead on the FluxDispatcher swallows their MESSAGE_CREATE/UPDATE, TYPING_START, reaction and stream events, filters LOAD_MESSAGES_SUCCESS, masks a call join as a leave, and filters the ringing lists in CALL_CREATE/UPDATE.

Voice getters are filtered on every module that has them (VoiceStateStore, SortedVoiceStateStore, CallStore.ringing, ApplicationStreamingStore), so Discord computes the call layout without that person rather than leaving a hole where they were.

Messages are filtered at read level in getMessages, so hidden ones are never rendered and the store is left untouched. Whatever slips past that is caught by a MutationObserver and a React fiber walk, which don't depend on CSS class names.

Reporting a problem

Open an issue with your Discord build and what you were doing. If it involves calls, the plugin's settings panel shows the last call event it saw at the bottom — that line is usually enough to pin it down.

License

MIT — © spixyy7

About

GhostUsers — locally hide selected people on Discord (BetterDiscord + Aliucord). Their messages, reactions, typing, calls and member-list entries never reach your client.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages