diff --git a/src/equicordplugins/advancedPermissions/index.tsx b/src/equicordplugins/advancedPermissions/index.tsx
new file mode 100644
index 000000000..09f90f925
--- /dev/null
+++ b/src/equicordplugins/advancedPermissions/index.tsx
@@ -0,0 +1,134 @@
+/*
+ * Vencord, a Discord client mod
+ * Copyright (c) 2026 Vendicated and contributors
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+import "./style.css";
+
+import { definePluginSettings } from "@api/Settings";
+import { BaseText } from "@components/BaseText";
+import ErrorBoundary from "@components/ErrorBoundary";
+import { EquicordDevs } from "@utils/constants";
+import { Margins } from "@utils/margins";
+import definePlugin, { OptionType } from "@utils/types";
+import { findCssClassesLazy } from "@webpack";
+import { Clickable, useState } from "@webpack/common";
+import type { ReactNode } from "react";
+
+const AdvancedClasses = findCssClassesLazy("trigger", "advancedTitle", "titleCaret");
+const CollapsibleCard = ErrorBoundary.wrap(
+ ({ children }: { children: ReactNode; }) => {
+ const [open, setOpen] = useState(!settings.store.collapsedByDefault);
+
+ return (
+
+
setOpen(v => !v)}
+ >
+
+ Simplified permissions
+
+
+
+ {open ? children : null}
+
+ );
+ },
+ { noop: true },
+);
+
+const settings = definePluginSettings({
+ simplifiedCard: {
+ type: OptionType.SELECT,
+ description: "What to do with Discord's simplified permissions card",
+ options: [
+ { label: "Hide it", value: "hide", default: true },
+ { label: "Make it collapsible", value: "collapse" },
+ { label: "Leave it visible", value: "show" },
+ ],
+ },
+ collapsedByDefault: {
+ type: OptionType.BOOLEAN,
+ default: false,
+ description: "Start the simplified permissions collapsed.",
+ disabled: () => settings.store.simplifiedCard !== "collapse",
+ },
+});
+
+export default definePlugin({
+ name: "AdvancedPermissions",
+ description: "Show advanced permissions card by default.",
+ authors: [EquicordDevs.bastih18],
+ settings,
+
+ patches: [
+ {
+ find: 'id:"PrivateChannelSettingCard"',
+ replacement: [
+ {
+ // simplified card renderer
+ match: /(?<=permissionUpdates:\i\}\):null,).{0,100}roles:\i,members:\i\}\)/,
+ replace: "$self.renderCard($&)",
+ },
+ {
+ // hide divider when card hidden, else tighten it
+ match: /(?<=advancedMode\);.{0,30}children:\[)/,
+ replace: "$self.cardHidden()?null:",
+ },
+ {
+ // hide divider when card hidden, else tighten it
+ match: /className:\i\.\i(?=.{0,50}onExpandedChange)/,
+ replace: '$&+" vc-iamadvanced-divider"',
+ },
+ {
+ // always force advanced open
+ match: /isExpanded:\i(?=,onExpandedChange:)/,
+ replace: "isExpanded:!0",
+ },
+ {
+ // drop advanced header
+ match: /component:(?=.{0,50}slot:"trigger")/,
+ replace: "component:null&&",
+ },
+ ],
+ },
+ ],
+
+ cardHidden() {
+ return settings.store.simplifiedCard === "hide";
+ },
+
+ renderCard(card: ReactNode) {
+ switch (settings.store.simplifiedCard) {
+ case "hide":
+ return null;
+ case "collapse":
+ return {card};
+ default:
+ return card;
+ }
+ },
+});
diff --git a/src/equicordplugins/advancedPermissions/style.css b/src/equicordplugins/advancedPermissions/style.css
new file mode 100644
index 000000000..008e9c4ee
--- /dev/null
+++ b/src/equicordplugins/advancedPermissions/style.css
@@ -0,0 +1,5 @@
+.vc-iamadvanced-divider {
+ /* override advancedModeDivider's large margins */
+ margin-top: 8px !important;
+ margin-bottom: 8px !important;
+}
diff --git a/src/utils/constants.ts b/src/utils/constants.ts
index 714621b8a..6175799ca 100644
--- a/src/utils/constants.ts
+++ b/src/utils/constants.ts
@@ -1382,6 +1382,10 @@ export const EquicordDevs = Object.freeze({
name: "August (auggeeo)",
id: 594864203102158859n
},
+ bastih18: {
+ name: "bastih18",
+ id: 273797150880563201n
+ }
} satisfies Record);
// iife so #__PURE__ works correctly