From 3ad76b7f0ffbd42d2601ca90c976634dc6a33054 Mon Sep 17 00:00:00 2001 From: Scyye <97131358+Scyye@users.noreply.github.com> Date: Wed, 26 Jun 2024 07:10:39 -0400 Subject: [PATCH] NewGuildSettings: Add "Apply NewGuildSettings" button in menu (#2556) Co-authored-by: vee --- src/plugins/newGuildSettings/index.tsx | 73 ++++++++++++++++++-------- 1 file changed, 50 insertions(+), 23 deletions(-) diff --git a/src/plugins/newGuildSettings/index.tsx b/src/plugins/newGuildSettings/index.tsx index 6b9dfe355..7cfb073fa 100644 --- a/src/plugins/newGuildSettings/index.tsx +++ b/src/plugins/newGuildSettings/index.tsx @@ -16,10 +16,17 @@ * along with this program. If not, see . */ +import { + findGroupChildrenByChildId, + NavContextMenuPatchCallback +} from "@api/ContextMenu"; import { definePluginSettings, migratePluginSettings } from "@api/Settings"; +import { CogWheel } from "@components/Icons"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; import { findByCodeLazy, findByPropsLazy, mapMangledModuleLazy } from "@webpack"; +import { Menu } from "@webpack/common"; +import { Guild } from "discord-types/general"; const { updateGuildNotificationSettings } = findByPropsLazy("updateGuildNotificationSettings"); const { toggleShowAllChannels } = mapMangledModuleLazy(".onboardExistingMember(", { @@ -73,48 +80,68 @@ const settings = definePluginSettings({ } }); +const makeContextMenuPatch: (shouldAddIcon: boolean) => NavContextMenuPatchCallback = (shouldAddIcon: boolean) => (children, { guild }: { guild: Guild, onClose(): void; }) => { + if (!guild) return; + + const group = findGroupChildrenByChildId("privacy", children); + group?.push( + applyDefaultSettings(guild.id)} + /> + ); +}; + +function applyDefaultSettings(guildId: string | null) { + if (guildId === "@me" || guildId === "null" || guildId == null) return; + updateGuildNotificationSettings(guildId, + { + muted: settings.store.guild, + suppress_everyone: settings.store.everyone, + suppress_roles: settings.store.role, + mute_scheduled_events: settings.store.events, + notify_highlights: settings.store.highlights ? 1 : 0 + }); + if (settings.store.messages !== 3) { + updateGuildNotificationSettings(guildId, + { + message_notifications: settings.store.messages, + }); + } + if (settings.store.showAllChannels && isOptInEnabledForGuild(guildId)) { + toggleShowAllChannels(guildId); + } +} + + migratePluginSettings("NewGuildSettings", "MuteNewGuild"); export default definePlugin({ name: "NewGuildSettings", description: "Automatically mute new servers and change various other settings upon joining", tags: ["MuteNewGuild", "mute", "server"], authors: [Devs.Glitch, Devs.Nuckyz, Devs.carince, Devs.Mopi, Devs.GabiRP], + contextMenus: { + "guild-context": makeContextMenuPatch(false), + "guild-header-popout": makeContextMenuPatch(true) + }, patches: [ { find: ",acceptInvite(", replacement: { match: /INVITE_ACCEPT_SUCCESS.+?,(\i)=null!==.+?;/, - replace: (m, guildId) => `${m}$self.handleMute(${guildId});` + replace: (m, guildId) => `${m}$self.applyDefaultSettings(${guildId});` } }, { find: "{joinGuild:", replacement: { match: /guildId:(\i),lurker:(\i).{0,20}}\)\);/, - replace: (m, guildId, lurker) => `${m}if(!${lurker})$self.handleMute(${guildId});` + replace: (m, guildId, lurker) => `${m}if(!${lurker})$self.applyDefaultSettings(${guildId});` } } ], settings, - - handleMute(guildId: string | null) { - if (guildId === "@me" || guildId === "null" || guildId == null) return; - updateGuildNotificationSettings(guildId, - { - muted: settings.store.guild, - suppress_everyone: settings.store.everyone, - suppress_roles: settings.store.role, - mute_scheduled_events: settings.store.events, - notify_highlights: settings.store.highlights ? 1 : 0 - }); - if (settings.store.messages !== 3) { - updateGuildNotificationSettings(guildId, - { - message_notifications: settings.store.messages, - }); - } - if (settings.store.showAllChannels && isOptInEnabledForGuild(guildId)) { - toggleShowAllChannels(guildId); - } - } + applyDefaultSettings });