From 3b8d2305b7f49f24b2b82d3bff35ce5aebbcc7fb Mon Sep 17 00:00:00 2001 From: 1024x2 <2pow11@gmail.com> Date: Sat, 8 Jun 2024 23:11:43 +0100 Subject: [PATCH 3/6] Experiments: Re-add isStaff and staging banner (it's funny) --- src/plugins/experiments/index.tsx | 54 +++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/src/plugins/experiments/index.tsx b/src/plugins/experiments/index.tsx index cf4dbf24..5a01ffad 100644 --- a/src/plugins/experiments/index.tsx +++ b/src/plugins/experiments/index.tsx @@ -16,19 +16,37 @@ * along with this program. If not, see . */ +import { definePluginSettings } from "@api/Settings"; import { disableStyle, enableStyle } from "@api/Styles"; import ErrorBoundary from "@components/ErrorBoundary"; import { ErrorCard } from "@components/ErrorCard"; import { Devs } from "@utils/constants"; +import { Logger } from "@utils/Logger"; import { Margins } from "@utils/margins"; -import definePlugin from "@utils/types"; +import definePlugin, { OptionType } from "@utils/types"; import { findByPropsLazy } from "@webpack"; -import { Forms, React } from "@webpack/common"; +import { Forms, React, UserStore } from "@webpack/common"; +import { User } from "discord-types/general"; import hideBugReport from "./hideBugReport.css?managed"; const KbdStyles = findByPropsLazy("key", "removeBuildOverride"); +const settings = definePluginSettings({ + enableIsStaff: { + description: "Enable isStaff", + type: OptionType.BOOLEAN, + default: false, + restartNeeded: true + }, + forceStagingBanner: { + description: "Whether to force Staging banner under user area.", + type: OptionType.BOOLEAN, + default: false, + restartNeeded: true + } +}); + export default definePlugin({ name: "Experiments", description: "Enable Access to Experiments & other dev-only features in Discord!", @@ -39,6 +57,7 @@ export default definePlugin({ Devs.BanTheNons, Devs.Nuckyz ], + settings, patches: [ { @@ -69,12 +88,43 @@ export default definePlugin({ match: /\i\.isStaff\(\)/, replace: "true" } + }, + { + find: '"isStaff",', + predicate: () => settings.store.enableIsStaff, + replacement: [ + { + match: /(?<=>)(\i)\.hasFlag\((\i\.\i)\.STAFF\)(?=})/, + replace: (_, user, flags) => `$self.isStaff(${user},${flags})` + }, + { + match: /hasFreePremium\(\){return this.isStaff\(\)\s*?\|\|/, + replace: "hasFreePremium(){return ", + } + ] + }, + { + find: ".Messages.DEV_NOTICE_STAGING", + predicate: () => settings.store.forceStagingBanner, + replacement: { + match: /window\.GLOBAL_ENV\.RELEASE_CHANNEL/, + replace: "\"staging\"" + } } ], start: () => enableStyle(hideBugReport), stop: () => disableStyle(hideBugReport), + isStaff(user: User, flags: any) { + try { + return UserStore.getCurrentUser()?.id === user.id || user.hasFlag(flags.STAFF); + } catch (err) { + new Logger("Experiments").error(err); + return user.hasFlag(flags.STAFF); + } + }, + settingsAboutComponent: () => { const isMacOS = navigator.platform.includes("Mac"); const modKey = isMacOS ? "cmd" : "ctrl"; -- 2.45.2