From 8dd5eeead2f4f48ec7dfa3dd812475e97b322146 Mon Sep 17 00:00:00 2001 From: Lewis Crichton Date: Tue, 3 Oct 2023 00:26:57 +0100 Subject: [PATCH] feat(plugin): PermissionFreeWill (#1763) Co-authored-by: V --- src/plugins/permissionFreeWill/README.md | 9 ++++ src/plugins/permissionFreeWill/index.ts | 56 ++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/plugins/permissionFreeWill/README.md create mode 100644 src/plugins/permissionFreeWill/index.ts diff --git a/src/plugins/permissionFreeWill/README.md b/src/plugins/permissionFreeWill/README.md new file mode 100644 index 000000000..ca30575ff --- /dev/null +++ b/src/plugins/permissionFreeWill/README.md @@ -0,0 +1,9 @@ +# PermissionFreeWill + +Removes the client-side restrictions that prevent editing channel permissions, such as permission lockouts ("Pretty sure +you don't want to do this") and onboarding requirements ("Making this change will make your server incompatible [...]") + +## Warning + +This plugin will let you create permissions in servers that **WILL** lock you out of channels until an administrator +can resolve it for you. Please be careful with the overwrites you are making and check carefully. diff --git a/src/plugins/permissionFreeWill/index.ts b/src/plugins/permissionFreeWill/index.ts new file mode 100644 index 000000000..f3fdf159a --- /dev/null +++ b/src/plugins/permissionFreeWill/index.ts @@ -0,0 +1,56 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2023 Vendicated and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { definePluginSettings } from "@api/Settings"; +import { Devs } from "@utils/constants"; +import definePlugin, { OptionType } from "@utils/types"; + +const settings = definePluginSettings({ + lockout: { + type: OptionType.BOOLEAN, + default: true, + description: 'Bypass the permission lockout prevention ("Pretty sure you don\'t want to do this")', + restartNeeded: true + }, + onboarding: { + type: OptionType.BOOLEAN, + default: true, + description: 'Bypass the onboarding requirements ("Making this change will make your server incompatible [...]")', + restartNeeded: true + } +}); + +export default definePlugin({ + name: "PermissionFreeWill", + description: "Disables the client-side restrictions for channel permission management.", + authors: [Devs.lewisakura], + + patches: [ + // Permission lockout, just set the check to true + { + find: "Messages.SELF_DENY_PERMISSION_BODY", + replacement: [ + { + match: /case"DENY":.{0,50}if\((?=\i\.\i\.can)/, + replace: "$&true||" + } + ], + predicate: () => settings.store.lockout + }, + // Onboarding, same thing but we need to prevent the check + { + find: "Messages.ONBOARDING_CHANNEL_THRESHOLD_WARNING", + replacement: [ + { + match: /case 1:if\((?=!\i\.sent.{20,30}Messages\.CANNOT_CHANGE_CHANNEL_PERMS)/, + replace: "$&false&&" + } + ], + predicate: () => settings.store.onboarding + } + ], + settings +});