diff --git a/README.md b/README.md index f0b87abb..0f92fb32 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,6 @@ You can join our [discord server](https://discord.gg/5Xh2W87egW) for commits, ch - GlobalBadges by HypedDomi & Hosted by Wolfie - GoogleThat by Samwich - HideChatButtons by iamme -- HideServers by bepvte - HolyNotes by Wolfie - HomeTyping by Samwich - HopOn by ImLvna diff --git a/src/equicordplugins/hideServers/HiddenServersStore.ts b/src/equicordplugins/hideServers/HiddenServersStore.ts deleted file mode 100644 index bdad64fd..00000000 --- a/src/equicordplugins/hideServers/HiddenServersStore.ts +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Vencord, a Discord client mod - * Copyright (c) 2024 Vendicated and contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -import * as DataStore from "@api/DataStore"; -import { findStoreLazy, proxyLazyWebpack } from "@webpack"; -import { Flux, FluxDispatcher, GuildStore } from "@webpack/common"; -import { Guild } from "discord-types/general"; - - -export const HiddenServersStore = proxyLazyWebpack(() => { - const { Store } = Flux; - - const SortedGuildStore = findStoreLazy("SortedGuildStore"); - const DB_KEY = "HideServers_servers"; - - class HiddenServersStore extends Store { - private _hiddenGuilds: Set = new Set(); - public get hiddenGuilds() { - return this._hiddenGuilds; - } - // id try to use .initialize() but i dont know how it works - public async load() { - const data = await DataStore.get(DB_KEY); - if (data) { - this._hiddenGuilds = data; - } - } - public unload() { - this._hiddenGuilds.clear(); - } - - public addHidden(guild: Guild) { - this._hiddenGuilds.add(guild.id); - DataStore.set(DB_KEY, this._hiddenGuilds); - this.emitChange(); - } - public removeHidden(id: string) { - this._hiddenGuilds.delete(id); - DataStore.set(DB_KEY, this._hiddenGuilds); - this.emitChange(); - } - public clearHidden() { - this._hiddenGuilds.clear(); - DataStore.del(DB_KEY); - this.emitChange(); - } - public hiddenGuildsDetail(): Guild[] { - const sortedGuildIds = SortedGuildStore.getFlattenedGuildIds() as string[]; - // otherwise the list is in order of increasing id number which is confusing - return sortedGuildIds.filter(id => this._hiddenGuilds.has(id)).map(id => GuildStore.getGuild(id)); - } - } - - return new HiddenServersStore(FluxDispatcher); -}); diff --git a/src/equicordplugins/hideServers/components/HiddenServersButton.tsx b/src/equicordplugins/hideServers/components/HiddenServersButton.tsx deleted file mode 100644 index d9c25408..00000000 --- a/src/equicordplugins/hideServers/components/HiddenServersButton.tsx +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Vencord, a Discord client mod - * Copyright (c) 2024 Vendicated and contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -import "./style.css"; - -import { classNameFactory } from "@api/Styles"; -import { Button, GuildStore, useStateFromStores } from "@webpack/common"; - -import { HiddenServersStore } from "../HiddenServersStore"; -import { openHiddenServersModal } from "./HiddenServersMenu"; - -const cl = classNameFactory("vc-hideservers-"); - -function HiddenServersButton() { - const hiddenGuilds = useStateFromStores([HiddenServersStore], () => HiddenServersStore.hiddenGuilds, undefined, (old, newer) => old.size === newer.size); - // if youve left a server dont show it in the count - const actuallyHidden = Array.from(hiddenGuilds).filter(x => GuildStore.getGuild(x)).length; - return ( -
- {actuallyHidden > 0 ? ( - - ) : null} -
- ); -} - -export default () => { return ; }; diff --git a/src/equicordplugins/hideServers/components/HiddenServersMenu.tsx b/src/equicordplugins/hideServers/components/HiddenServersMenu.tsx deleted file mode 100644 index 2673e1d4..00000000 --- a/src/equicordplugins/hideServers/components/HiddenServersMenu.tsx +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Vencord, a Discord client mod - * Copyright (c) 2024 Vendicated and contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -import { classNameFactory } from "@api/Styles"; -import { classes } from "@utils/misc"; -import { - closeModal, - ModalCloseButton, - ModalContent, - ModalHeader, - ModalProps, - ModalRoot, - ModalSize, - openModal, -} from "@utils/modal"; -import { findByPropsLazy } from "@webpack"; -import { Button, Forms, IconUtils, Text, useStateFromStores } from "@webpack/common"; -import { Guild } from "discord-types/general"; - -import { HiddenServersStore } from "../HiddenServersStore"; - -const cl = classNameFactory("vc-hideservers-"); -const IconClasses = findByPropsLazy("icon", "acronym", "childWrapper"); - -function HiddenServersModal({ - modalProps, - close, -}: { - modalProps: ModalProps; - close(): void; -}) { - const servers = useStateFromStores([HiddenServersStore], () => HiddenServersStore.hiddenGuildsDetail()); - return ( - - - - Hidden Servers - - - - - - - - - ); -} - -export function HiddenServersMenu({ servers }: { servers: Guild[]; }) { - return
- {servers.length > 0 ? ( - servers.map(server => ( -
-
- {server.icon - ? - :
- {server.acronym} -
- } -
- - {server.name} - - -
- )) - ) : ( - - No hidden servers - - )} -
; -} - -export function openHiddenServersModal() { - const key = openModal(modalProps => { - return ( - closeModal(key)} - /> - ); - }); -} diff --git a/src/equicordplugins/hideServers/components/style.css b/src/equicordplugins/hideServers/components/style.css deleted file mode 100644 index ee553841..00000000 --- a/src/equicordplugins/hideServers/components/style.css +++ /dev/null @@ -1,47 +0,0 @@ -.vc-hideservers-button-wrapper { - display: flex; - justify-content: center; - margin: 0 0 8px; -} - -.vc-hideservers-button { - max-width: 48px; - font-size: 60%; - background-color: var(--background-primary); - color: var(--header-secondary); -} - -.vc-hideservers-list { - flex: 1 1 auto; -} - -/* copied from blocked row */ -.vc-hideservers-row { - height: 62px; - display: flex; - align-items: center; - flex-direction: row; - margin-left: 20px; - margin-right: 20px; - border-top: 1px solid var(--background-modifier-accent); - border-bottom: 1px solid transparent; - justify-content: space-between; -} - -.vc-hideservers-guildicon { - display: flex; - align-items: center; - margin-right: 1em; -} - -.vc-hideservers-guildicon img { - border-radius: 50%; -} - -.vc-hideservers-name { - flex-grow: 1; -} - -.vc-hideservers-row-button { - margin-left: auto; -} diff --git a/src/equicordplugins/hideServers/index.tsx b/src/equicordplugins/hideServers/index.tsx deleted file mode 100644 index 0d8aded7..00000000 --- a/src/equicordplugins/hideServers/index.tsx +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Vencord, a Discord client mod - * Copyright (c) 2024 Vendicated and contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -// additional thanks to mwittrien/DevilBro and nexpid for their server hiding plugins, which served as inspiration - -import { - findGroupChildrenByChildId, - NavContextMenuPatchCallback, -} from "@api/ContextMenu"; -import { - addServerListElement, - removeServerListElement, - ServerListRenderPosition, -} from "@api/ServerList"; -import { EquicordDevs } from "@utils/constants"; -import definePlugin from "@utils/types"; -import { Menu, React, useStateFromStores } from "@webpack/common"; -import { Guild } from "discord-types/general"; - -import hiddenServersButton from "./components/HiddenServersButton"; -import { HiddenServersStore } from "./HiddenServersStore"; -import settings from "./settings"; - -type guildsNode = { - type: "guild" | "folder"; - id: number | string; - children: guildsNode[]; -}; - -type qsResult = { - type: "GUILD" | string; - record?: { - id?: string; - guild_id?: string; - }; -}; - -const Patch: NavContextMenuPatchCallback = ( - children, - { guild }: { guild: Guild; } -) => { - const group = findGroupChildrenByChildId("privacy", children); - - group?.push( - HiddenServersStore.addHidden(guild)} - /> - ); -}; - -export function addIndicator() { - addServerListElement(ServerListRenderPosition.Below, hiddenServersButton); -} - -export function removeIndicator() { - removeServerListElement(ServerListRenderPosition.Below, hiddenServersButton); -} - -export default definePlugin({ - name: "HideServers", - description: "Allows you to hide servers from the guild list and quick switcher by right clicking them", - authors: [EquicordDevs.bep], - tags: ["guild", "server", "hide"], - - dependencies: ["ServerListAPI"], - contextMenus: { - "guild-context": Patch, - "guild-header-popout": Patch, - }, - patches: [ - { - find: '("guildsnav")', - replacement: [ - { - match: /(?<=#{intl::SERVERS}\),children:)(\i)(\)?\.map\(\i\))/g, - replace: "$self.useFilteredGuilds($1)$2", - }, - // despite my best efforts, the above doesnt trigger a rerender - { - match: /let{disableAppDownload.{0,10}isPlatformEmbedded/, - replace: "$self.useStore();$&", - } - ] - }, - { - find: "#{intl::QUICKSWITCHER_PROTIP}", - replacement: { - match: /(?<=renderResults\(\){)let{query/, - replace: "this.props.results = $self.filteredGuildResults(this.props.results);$&", - }, - }, - ], - settings, - useStore: () => { useStateFromStores([HiddenServersStore], () => HiddenServersStore.hiddenGuilds, undefined, (old, newer) => old.size === newer.size); }, - - async start() { - if (settings.store.showIndicator) { - addIndicator(); - } - await HiddenServersStore.load(); - }, - - async stop() { - removeIndicator(); - HiddenServersStore.unload(); - }, - - useFilteredGuilds(guilds: guildsNode[]): guildsNode[] { - const hiddenGuilds = useStateFromStores([HiddenServersStore], () => HiddenServersStore.hiddenGuilds, undefined, (old, newer) => old.size === newer.size); - return guilds.flatMap(guild => { - if (!(hiddenGuilds instanceof Set)) return [guild]; - if (hiddenGuilds.has(guild.id.toString())) { - return []; - } - const newGuild = Object.assign({}, guild); - newGuild.children = guild.children.filter( - child => !hiddenGuilds.has(child.id.toString()) - ); - - return [newGuild]; - }); - }, - - filteredGuildResults(results: qsResult[]): qsResult[] { - // not used in a component so no useStateFromStore - const { hiddenGuilds } = HiddenServersStore; - return results.filter(result => { - if (result?.record?.guild_id && hiddenGuilds.has(result.record.guild_id)) { - return false; - } - if (result.type === "GUILD" && hiddenGuilds.has(result.record!.id!)) { - return false; - } - return true; - }); - }, -}); diff --git a/src/equicordplugins/hideServers/settings.tsx b/src/equicordplugins/hideServers/settings.tsx deleted file mode 100644 index 1f684824..00000000 --- a/src/equicordplugins/hideServers/settings.tsx +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Vencord, a Discord client mod - * Copyright (c) 2024 Vendicated and contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -import { definePluginSettings } from "@api/Settings"; -import { OptionType } from "@utils/types"; -import { Button, useStateFromStores } from "@webpack/common"; - -import { addIndicator, removeIndicator } from "."; -import { HiddenServersMenu } from "./components/HiddenServersMenu"; -import { HiddenServersStore } from "./HiddenServersStore"; - -export default definePluginSettings({ - showIndicator: { - type: OptionType.BOOLEAN, - description: "Show menu to unhide servers at the bottom of the list", - default: true, - onChange: val => { - if (val) { - addIndicator(); - } else { - removeIndicator(); - } - } - }, - guildsList: { - type: OptionType.COMPONENT, - description: "Remove hidden servers", - component: () => { - const detail = useStateFromStores([HiddenServersStore], () => HiddenServersStore.hiddenGuildsDetail()); - return ; - } - }, - resetHidden: { - type: OptionType.COMPONENT, - description: "Remove all hidden guilds from the list", - component: () => ( -
- -
- ), - }, -}); diff --git a/src/plugins/_api/serverList.ts b/src/plugins/_api/serverList.ts index 37ed626a..8dd4bd39 100644 --- a/src/plugins/_api/serverList.ts +++ b/src/plugins/_api/serverList.ts @@ -37,10 +37,6 @@ export default definePlugin({ { match: /(?<=#{intl::SERVERS}\),children:)\i\.map\(\i\)/, replace: "Vencord.Api.ServerList.renderAll(Vencord.Api.ServerList.ServerListRenderPosition.In).concat($&)" - }, - { - match: /children:\i\}\)\]/, - replace: "$&.concat(Vencord.Api.ServerList.renderAll(Vencord.Api.ServerList.ServerListRenderPosition.Below))" } ] }