diff --git a/src/plugins/permissionFreeWill/README.md b/src/plugins/permissionFreeWill/README.md new file mode 100644 index 00000000..ca30575f --- /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 00000000..f3fdf159 --- /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 +});