{"GhostUsers": {"version": "1.19.0", "build": "https://raw.githubusercontent.com/spixyy7/ghostusers-aliucord/builds/GhostUsers.zip", "buildCrc32": "5BA8BF8D", "changelog": "# 1.19.0\n* A hidden person calling a group no longer rings. The incoming-call payload for a group carries no participant list, so the plugin now asks the app who is actually in that call — and if every one of them is hidden, the call is dropped and a ring that already started is cleared. A call that merely looks empty because the data is late still rings normally.\n# 1.18.1\n* Cleaner shutdown: disabling the plugin now also cancels everything it had queued — a pending reactor lookup can no longer hit the network and a pending redraw can no longer touch the chat after the plugin is off.\n# 1.18.0\n* This is the one that makes it automatic. A chip used to come back after every restart and only disappear once you long-pressed it and opened the reactions list, because what the plugin had learned did not survive being saved: a Discord id has 19 digits, more than a JSON number keeps exactly, so every remembered id came back a few units off. The plugin then believed it already knew that chip — so it never asked the server again — while the id it held matched nobody. Ids are now stored as text, and entries saved in the old format are thrown away and asked about again.\n* Nothing has to be pressed any more: the reactor list is asked for the moment messages load (not only when the chips are drawn), chips on screen jump the queue, and the redraw is quicker — a chip seen for the first time disappears in well under a second, and it never shows up again for as long as that user is hidden.\n# 1.17.0\n* Fixed the redraw after an answer arrives: a row is not attached to the chat list while it is being drawn, so the plugin could not find the list to refresh — the first lookups of a session only took effect after reopening the channel. The list is now resolved when the redraw is actually due, and retried.\n* Backstop on the view side: should the corrected data ever not reach the screen, the chips that must disappear are hidden directly.\n* /ghost now also prints diagnostics — the running version, which hooks are alive, how many reactor lists were asked for and answered, and what happened to the last chips drawn. A hook that does not fire is now visible on the phone instead of having to be guessed at from the outside.\n# 1.16.0\n* Reaction chips actually fixed. The row of chips draws a reaction map that Discord caches ON the message — 1.15 corrected a different copy of the data, which is why the number never moved. That map is now rebuilt without hidden users right before the row is drawn: the count drops, and a chip only hidden users reacted to disappears together with its row. Who reacted is asked from the server through Discord's own \"who reacted\" request (once per chip, remembered for good), so old reactions are covered without pressing anything.\n* Live reactions from hidden users are learned from instead of being swallowed, so the count Discord keeps always matches the server and a chip can never come back or be counted twice. (The old hook looked for a method name that does not exist in Discord 126021 — it never ran.)\n* A hidden user's message no longer leaves its row of reaction chips behind.\n# 1.15.0\n* Reactions fixed at the root — nothing has to be pressed any more: for every reaction chip the plugin asks the server WHO reacted (the very request Discord sends when you long-press a reaction), in the background, once per chip. Hidden users are subtracted from the count — OLD reactions too, ones nobody witnessed live — and a chip that only hidden users reacted to disappears. In an open chat the count drops on its own within a second; the answer is cached, so from then on the correction happens before anything renders.\n# 1.14.0\n* Reactions: opening \"who reacted\" now LEARNS at the data level — hidden users are filtered from the fetched list itself (not just the sheet UI) and cached, so their OLD reactions get subtracted from chip counts on the next reload/restart, permanently. For a pre-existing reaction: long-press it once, restart — the chip is corrected forever.\n# 1.13.0\n* Persistent reaction cache: hidden users' reactions witnessed live are remembered in the plugin config and subtracted from reaction counts at message INGEST after every restart — corrected before anything renders (no flicker). RemoveAll/RemoveEmoji clean the cache.\n# 1.12.0\n* Incoming calls: a call whose only participants are hidden does not exist for you — no ring, no incoming-call UI (now also covers GROUP calls started by a hidden user). It appears normally the moment a non-hidden person is in the call.\n# 1.11.0\n* Reactions: live reactions from hidden users are swallowed at the source (never shown), and hidden users are dropped from the \"who reacted\" sheet. Note: chip counts loaded with old history can't identify reactors, so those may keep their number — but the name is never listed.\n# 1.10.0\n* Full English localization of the UI and settings\n# 1.9.1\n* Settings: every hidden user is a COLLAPSIBLE section — tap the name to open/close their options, with a red \"Remove\" button inside (tapping the name no longer unhides by accident); the \"Defaults\" section is collapsible too\n# 1.9.0\n* PER-USER settings: every hidden user has THEIR OWN switches (group DMs / servers / 1-on-1 / auto mute / member lists / tags-replies) — edited on the user in settings; the global switches are now \"defaults for newly hidden\" + an \"Apply to all\" button\n# 1.8.0\n* Calls: participants are also filtered at the data SOURCE (CallModel.getParticipants) — covers the participant bottom sheet and PIP, so a hidden user never leaves a row or an empty slot anywhere in a call (grid/ringing screens were already covered and re-flow on their own)\n# 1.7.0\n* Missed/Ongoing Call rows in chat: a hidden user's call row is not shown, and in the participant circles the next user fills the spot (no gray placeholder)\n# 1.6.1\n* DM list \"N Members\": fixed hidden-user counting (reads recipient objects, not ids)\n# 1.6.0\n* Notifications (tray + in-app) from hidden users are not shown while the app is alive — applies to DMs, groups and server channels (per scope)\n* \"N Members\" in the DM list decreased by the hidden count\n# 1.5.0\n* No more flicker on open — hidden users' messages are hidden at draw time instead of deleted afterwards\n# 1.4.0\n* Servers: hidden users removed from the member list (+ ONLINE/OFFLINE counts decreased) and from under voice channels. Enable the \"Servers\" scope in settings.\n# 1.3.0\n* Hidden users also removed from the group member list; \"MEMBERS — N\" shows the count without them\n# 1.2.0\n* Hidden users are not shown on the ringing/preview call screen either (before joining) — the layout re-centers on its own\n# 1.1.0\n* Fixed auto-mute (toggleUserMuted from Discord 126021)\n* Hidden users are dropped from calls — the grid re-flows on its own\n# 1.0.0\n* Initial release — port of the BetterDiscord GhostUsers plugin", "minimumDiscordVersion": 126021, "minimumAliucordVersion": "2.9.1", "minimumKotlinVersion": "1.5.21", "minimumApiLevel": 21}}