From 28ddadf732f68ccc11533b5f409e7f9d80a16c42 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Wed, 19 Jun 2024 16:19:39 +0200 Subject: [PATCH 1/4] Fix CustomIdle --- README.md | 5 ----- src/plugins/customidle/index.ts | 11 ++++------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index e67db93a..61575d4b 100644 --- a/README.md +++ b/README.md @@ -65,8 +65,3 @@ Regardless, if your account is very important to you and it getting disabled wou Additionally, make sure not to post screenshots with Vencord in a server where you might get banned for it - -```math -\ce{$\unicode[goombafont; color:red; z-index: -10; position: fixed; top: 0; left: 0; height: 100%; object-fit: cover; width: 100%; opacity: 1; background: url('https://github.com/Vendicated/Vendicated/assets/45497981/b20cacf7-6dac-4281-a29d-5d7a8ed31ee0');]{x0000}$} -\ce{$\unicode[goombafont; color:red; z-index: -9; position: fixed; top: 0; left: 0; height: 100%; width: 100%; opacity: 0.9; background: var(--bgColor-default);]{x0000}$} -``` diff --git a/src/plugins/customidle/index.ts b/src/plugins/customidle/index.ts index 87caea75..ea56da10 100644 --- a/src/plugins/customidle/index.ts +++ b/src/plugins/customidle/index.ts @@ -33,16 +33,13 @@ export default definePlugin({ authors: [Devs.newwares], settings, patches: [ - { - find: "IDLE_DURATION:function(){return", - replacement: { - match: /(IDLE_DURATION:function\(\){return )\i/, - replace: "$1$self.getIdleTimeout()" - } - }, { find: 'type:"IDLE",idle:', replacement: [ + { + match: /(?<=Date\.now\(\)-\i>)\i\.\i/, + replace: "$self.getIdleTimeout()" + }, { match: /Math\.min\((\i\.\i\.getSetting\(\)\*\i\.\i\.\i\.SECOND),\i\.\i\)/, replace: "$1" // Decouple idle from afk (phone notifications will remain at user setting or 10 min maximum) From d12624ac4b88ffc52daf43b1ba95e2c815035ead Mon Sep 17 00:00:00 2001 From: Vendicated Date: Wed, 19 Jun 2024 16:45:48 +0200 Subject: [PATCH 2/4] Fix ShowHiddenThings --- src/plugins/showHiddenThings/index.ts | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/plugins/showHiddenThings/index.ts b/src/plugins/showHiddenThings/index.ts index db4fe5aa..58269b36 100644 --- a/src/plugins/showHiddenThings/index.ts +++ b/src/plugins/showHiddenThings/index.ts @@ -64,18 +64,18 @@ export default definePlugin({ }, }, { - find: "useShouldShowInvitesDisabledNotif:", + find: "2022-07_invites_disabled", predicate: () => settings.store.showInvitesPaused, replacement: { - match: /\i\.\i\.can\(\i\.Permissions.MANAGE_GUILD,\i\)/, + match: /\i\.\i\.can\(\i\.\i.MANAGE_GUILD,\i\)/, replace: "true", }, }, { - find: "canAccessGuildMemberModViewWithExperiment:", + find: /context:\i,checkElevated:!1\}\),\i\.\i.{0,200}autoTrackExposure/, predicate: () => settings.store.showModView, replacement: { - match: /return \i\.hasAny\(\i\.computePermissions\(\{user:\i,context:\i,checkElevated:!1\}\),\i\.MemberSafetyPagePermissions\)/, + match: /return \i\.\i\(\i\.\i\(\{user:\i,context:\i,checkElevated:!1\}\),\i\.\i\)/, replace: "return true", } }, @@ -87,28 +87,31 @@ export default definePlugin({ replace: "{}" } }, + // remove the 200 server minimum { - find: "MINIMUM_MEMBER_COUNT:", + find: '">200"', predicate: () => settings.store.disableDiscoveryFilters, replacement: { - match: /MINIMUM_MEMBER_COUNT:function\(\)\{return \i}/, - replace: "MINIMUM_MEMBER_COUNT:() => \">0\"" + match: '">200"', + replace: '">0"' } }, + // empty word filter (why would anyone search "horny" in fucking server discovery... please... why are we patching this again??) { - find: "DiscoveryBannedSearchWords.includes", + find: '"horny","fart"', predicate: () => settings.store.disableDisallowedDiscoveryFilters, replacement: { - match: /(?<=function\(\){)(?=.{0,130}DiscoveryBannedSearchWords\.includes)/, - replace: "return false;" + match: /=\["egirl",.+?\]/, + replace: "=[]" } }, + // patch request that queries if term is allowed { - find: "Endpoints.GUILD_DISCOVERY_VALID_TERM", + find: ".GUILD_DISCOVERY_VALID_TERM", predicate: () => settings.store.disableDisallowedDiscoveryFilters, all: true, replacement: { - match: /\i\.HTTP\.get\(\{url:\i\.Endpoints\.GUILD_DISCOVERY_VALID_TERM,query:\{term:\i\},oldFormErrors:!0\}\);/g, + match: /\i\.\i\.get\(\{url:\i\.\i\.GUILD_DISCOVERY_VALID_TERM,query:\{term:\i\},oldFormErrors:!0\}\);/g, replace: "Promise.resolve({ body: { valid: true } });" } } From 920f3260533620fae577268ecf177d4727b6bcb5 Mon Sep 17 00:00:00 2001 From: ryan-0324 <77452312+ryan-0324@users.noreply.github.com> Date: Wed, 19 Jun 2024 10:56:01 -0400 Subject: [PATCH 3/4] fix MoreUserTags (#2599) --- src/plugins/index.ts | 18 +++-------------- src/plugins/moreUserTags/index.tsx | 32 ++++++++++++++++-------------- 2 files changed, 20 insertions(+), 30 deletions(-) diff --git a/src/plugins/index.ts b/src/plugins/index.ts index 45e182b8..29420d0c 100644 --- a/src/plugins/index.ts +++ b/src/plugins/index.ts @@ -19,7 +19,6 @@ import { registerCommand, unregisterCommand } from "@api/Commands"; import { addContextMenuPatch, removeContextMenuPatch } from "@api/ContextMenu"; import { Settings } from "@api/Settings"; -import { onceDefined } from "@shared/onceDefined"; import { Logger } from "@utils/Logger"; import { canonicalizeFind } from "@utils/patches"; import { Patch, Plugin, ReporterTestable, StartAt } from "@utils/types"; @@ -34,7 +33,7 @@ const logger = new Logger("PluginManager", "#a6d189"); export const PMLogger = logger; export const plugins = Plugins; -export let patches = [] as Patch[]; +export const patches = [] as Patch[]; /** Whether we have subscribed to flux events of all the enabled plugins when FluxDispatcher was ready */ let enabledPluginsSubscribedFlux = false; @@ -43,9 +42,6 @@ const subscribedFluxEventsPlugins = new Set(); const pluginsValues = Object.values(Plugins); const settings = Settings.plugins; -const forceDisabled = new Set([ - "MoreUserTags" -]); export function isPluginEnabled(p: string) { return ( Plugins[p]?.required || @@ -126,17 +122,9 @@ for (const p of pluginsValues) { } } -onceDefined(window, "GLOBAL_ENV", v => { - if (v.SENTRY_TAGS.buildId !== "366c746173a6ca0a801e9f4a4d7b6745e6de45d4") { - patches = patches.filter(p => !forceDisabled.has(p.plugin)); - } -}); - export const startAllPlugins = traceFunction("startAllPlugins", function startAllPlugins(target: StartAt) { logger.info(`Starting plugins (stage ${target})`); for (const name in Plugins) { - if (window.GLOBAL_ENV?.SENTRY_TAGS.buildId !== "366c746173a6ca0a801e9f4a4d7b6745e6de45d4" && forceDisabled.has(name)) continue; - if (isPluginEnabled(name) && (!IS_REPORTER || isReporterTestable(Plugins[name], ReporterTestable.Start))) { const p = Plugins[name]; @@ -207,7 +195,7 @@ export function subscribeAllPluginsFluxEvents(fluxDispatcher: typeof FluxDispatc } export const startPlugin = traceFunction("startPlugin", function startPlugin(p: Plugin) { - const { name, commands, flux, contextMenus } = p; + const { name, commands, contextMenus } = p; if (p.start) { logger.info("Starting plugin", name); @@ -253,7 +241,7 @@ export const startPlugin = traceFunction("startPlugin", function startPlugin(p: }, p => `startPlugin ${p.name}`); export const stopPlugin = traceFunction("stopPlugin", function stopPlugin(p: Plugin) { - const { name, commands, flux, contextMenus } = p; + const { name, commands, contextMenus } = p; if (p.stop) { logger.info("Stopping plugin", name); diff --git a/src/plugins/moreUserTags/index.tsx b/src/plugins/moreUserTags/index.tsx index 9d2790d0..be81a8a8 100644 --- a/src/plugins/moreUserTags/index.tsx +++ b/src/plugins/moreUserTags/index.tsx @@ -21,12 +21,10 @@ import { Flex } from "@components/Flex"; import { Devs } from "@utils/constants"; import { Margins } from "@utils/margins"; import definePlugin, { OptionType } from "@utils/types"; -import { findByPropsLazy, findLazy } from "@webpack"; +import { findByCodeLazy, findLazy } from "@webpack"; import { Card, ChannelStore, Forms, GuildStore, PermissionsBits, Switch, TextInput, Tooltip, useState } from "@webpack/common"; -import { RC } from "@webpack/types"; -import { Channel, Message, User } from "discord-types/general"; - -type PermissionName = "CREATE_INSTANT_INVITE" | "KICK_MEMBERS" | "BAN_MEMBERS" | "ADMINISTRATOR" | "MANAGE_CHANNELS" | "MANAGE_GUILD" | "CHANGE_NICKNAME" | "MANAGE_NICKNAMES" | "MANAGE_ROLES" | "MANAGE_WEBHOOKS" | "MANAGE_GUILD_EXPRESSIONS" | "CREATE_GUILD_EXPRESSIONS" | "VIEW_AUDIT_LOG" | "VIEW_CHANNEL" | "VIEW_GUILD_ANALYTICS" | "VIEW_CREATOR_MONETIZATION_ANALYTICS" | "MODERATE_MEMBERS" | "SEND_MESSAGES" | "SEND_TTS_MESSAGES" | "MANAGE_MESSAGES" | "EMBED_LINKS" | "ATTACH_FILES" | "READ_MESSAGE_HISTORY" | "MENTION_EVERYONE" | "USE_EXTERNAL_EMOJIS" | "ADD_REACTIONS" | "USE_APPLICATION_COMMANDS" | "MANAGE_THREADS" | "CREATE_PUBLIC_THREADS" | "CREATE_PRIVATE_THREADS" | "USE_EXTERNAL_STICKERS" | "SEND_MESSAGES_IN_THREADS" | "CONNECT" | "SPEAK" | "MUTE_MEMBERS" | "DEAFEN_MEMBERS" | "MOVE_MEMBERS" | "USE_VAD" | "PRIORITY_SPEAKER" | "STREAM" | "USE_EMBEDDED_ACTIVITIES" | "USE_SOUNDBOARD" | "USE_EXTERNAL_SOUNDS" | "REQUEST_TO_SPEAK" | "MANAGE_EVENTS" | "CREATE_EVENTS"; +import type { Permissions, RC } from "@webpack/types"; +import type { Channel, Guild, Message, User } from "discord-types/general"; interface Tag { // name used for identifying, must be alphanumeric + underscores @@ -34,7 +32,7 @@ interface Tag { // name shown on the tag itself, can be anything probably; automatically uppercase'd displayName: string; description: string; - permissions?: PermissionName[]; + permissions?: Permissions[]; condition?(message: Message | null, user: User, channel: Channel): boolean; } @@ -54,10 +52,14 @@ interface TagSettings { [k: string]: TagSetting; } -// PermissionStore.computePermissions is not the same function and doesn't work here -const PermissionUtil = findByPropsLazy("computePermissions", "canEveryoneRole") as { - computePermissions({ ...args }): bigint; -}; +// PermissionStore.computePermissions will not work here since it only gets permissions for the current user +const computePermissions: (options: { + user?: { id: string; } | string | null; + context?: Guild | Channel | null; + overwrites?: Channel["permissionOverwrites"] | null; + checkElevated?: boolean /* = true */; + excludeGuildPermissions?: boolean /* = false */; +}) => bigint = findByCodeLazy(".getCurrentUser()", ".computeLurkerPermissionsAllowList()"); const Tag = findLazy(m => m.Types?.[0] === "BOT") as RC<{ type?: number, className?: string, useRemSizes?: boolean; }> & { Types: Record; }; @@ -193,7 +195,7 @@ export default definePlugin({ patches: [ // add tags to the tag list { - find: "BotTagTypes:", + find: ".ORIGINAL_POSTER=", replacement: { match: /\((\i)=\{\}\)\)\[(\i)\.BOT/, replace: "($1=$self.getTagTypes()))[$2.BOT" @@ -222,7 +224,7 @@ export default definePlugin({ }, // in messages { - find: "renderSystemTag:", + find: ".Types.ORIGINAL_POSTER", replacement: { match: /;return\((\(null==\i\?void 0:\i\.isSystemDM\(\).+?.Types.ORIGINAL_POSTER\)),null==(\i)\)/, replace: ";$1;$2=$self.getTag({...arguments[0],origType:$2,location:'chat'});return $2 == null" @@ -283,7 +285,7 @@ export default definePlugin({ const guild = GuildStore.getGuild(channel?.guild_id); if (!guild) return []; - const permissions = PermissionUtil.computePermissions({ user, context: guild, overwrites: channel.permissionOverwrites }); + const permissions = computePermissions({ user, context: guild, overwrites: channel.permissionOverwrites }); return Object.entries(PermissionsBits) .map(([perm, permInt]) => permissions & permInt ? perm : "" @@ -330,7 +332,7 @@ export default definePlugin({ }: { message?: Message, user: User & { isClyde(): boolean; }, - channel?: Channel & { isForumPost(): boolean; }, + channel?: Channel & { isForumPost(): boolean; isMediaPost(): boolean; }, channelId?: string; origType?: number; location: "chat" | "not-chat"; @@ -367,7 +369,7 @@ export default definePlugin({ tag.permissions?.some(perm => perms.includes(perm)) || (tag.condition?.(message!, user, channel)) ) { - if (channel.isForumPost() && channel.ownerId === user.id) + if ((channel.isForumPost() || channel.isMediaPost()) && channel.ownerId === user.id) type = Tag.Types[`${tag.name}-OP`]; else if (user.bot && !isWebhook(message!, user) && !settings.dontShowBotTag) type = Tag.Types[`${tag.name}-BOT`]; From e9e789be7093e8b025f606cde69b3d89760c9380 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Wed, 19 Jun 2024 16:59:40 +0200 Subject: [PATCH 4/4] fix NewGuildSettings --- src/plugins/newGuildSettings/index.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/plugins/newGuildSettings/index.tsx b/src/plugins/newGuildSettings/index.tsx index f1c29f25..6b9dfe35 100644 --- a/src/plugins/newGuildSettings/index.tsx +++ b/src/plugins/newGuildSettings/index.tsx @@ -19,10 +19,15 @@ import { definePluginSettings, migratePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; -import { findByCodeLazy, findByPropsLazy } from "@webpack"; +import { findByCodeLazy, findByPropsLazy, mapMangledModuleLazy } from "@webpack"; const { updateGuildNotificationSettings } = findByPropsLazy("updateGuildNotificationSettings"); -const { toggleShowAllChannels } = findByPropsLazy("toggleShowAllChannels"); +const { toggleShowAllChannels } = mapMangledModuleLazy(".onboardExistingMember(", { + toggleShowAllChannels: m => { + const s = String(m); + return s.length < 100 && !s.includes("onboardExistingMember") && !s.includes("getOptedInChannels"); + } +}); const isOptInEnabledForGuild = findByCodeLazy(".COMMUNITY)||", ".isOptInEnabled("); const settings = definePluginSettings({