diff --git a/src/plugins/_api/notices.ts b/src/plugins/_api/notices.ts index ceec6f825..0c6f6e1db 100644 --- a/src/plugins/_api/notices.ts +++ b/src/plugins/_api/notices.ts @@ -33,8 +33,8 @@ export default definePlugin({ replace: "if(Vencord.Api.Notices.currentNotice)return false;$&" }, { - match: /(?<=function (\i)\(\i\){)return null!=(\i)(?=.*NOTICE_DISMISS:\1)/, - replace: "if($2.id==\"VencordNotice\")return($2=null,Vencord.Api.Notices.nextNotice(),true);$&" + match: /(?<=,NOTICE_DISMISS:function\(\i\){)return null!=(\i)/, + replace: "if($1.id==\"VencordNotice\")return($1=null,Vencord.Api.Notices.nextNotice(),true);$&" } ] } diff --git a/src/plugins/consoleJanitor/index.ts b/src/plugins/consoleJanitor/index.ts index 1cb705541..b0c8905f7 100644 --- a/src/plugins/consoleJanitor/index.ts +++ b/src/plugins/consoleJanitor/index.ts @@ -119,7 +119,7 @@ export default definePlugin({ { find: "Slow dispatch on", replacement: { - match: /\i\.totalTime>\i&&\i\.verbose\("Slow dispatch on ".+?\)\);/, + match: /\i\.totalTime>100&&\i\.verbose\("Slow dispatch on ".+?\)\);/, replace: "" } }, diff --git a/src/plugins/fakeNitro/index.tsx b/src/plugins/fakeNitro/index.tsx index cfffedb99..fb2c67c33 100644 --- a/src/plugins/fakeNitro/index.tsx +++ b/src/plugins/fakeNitro/index.tsx @@ -22,7 +22,7 @@ import { Devs } from "@utils/constants"; import { ApngBlendOp, ApngDisposeOp, importApngJs } from "@utils/dependencies"; import { getCurrentGuild } from "@utils/discord"; import { Logger } from "@utils/Logger"; -import definePlugin, { OptionType } from "@utils/types"; +import definePlugin, { OptionType, Patch } from "@utils/types"; import { findByCodeLazy, findByPropsLazy, findStoreLazy, proxyLazyWebpack } from "@webpack"; import { Alerts, ChannelStore, DraftType, EmojiStore, FluxDispatcher, Forms, GuildMemberStore, IconUtils, lodash, Parser, PermissionsBits, PermissionStore, UploadHandler, UserSettingsActionCreators, UserStore } from "@webpack/common"; import type { Emoji } from "@webpack/types"; @@ -194,6 +194,26 @@ const hasExternalStickerPerms = (channelId: string) => hasPermission(channelId, const hasEmbedPerms = (channelId: string) => hasPermission(channelId, PermissionsBits.EMBED_LINKS); const hasAttachmentPerms = (channelId: string) => hasPermission(channelId, PermissionsBits.ATTACH_FILES); +function makeBypassPatches(): Omit { + const mapping: Array<{ func: string, predicate?: () => boolean; }> = [ + { func: "canUseCustomStickersEverywhere", predicate: () => settings.store.enableStickerBypass }, + { func: "canUseHighVideoUploadQuality", predicate: () => settings.store.enableStreamQualityBypass }, + { func: "canStreamQuality", predicate: () => settings.store.enableStreamQualityBypass }, + { func: "canUseClientThemes" }, + { func: "canUseCustomNotificationSounds" }, + { func: "canUsePremiumAppIcons" } + ]; + + return { + find: "canUseCustomStickersEverywhere:", + replacement: mapping.map(({ func, predicate }) => ({ + match: new RegExp(String.raw`(?<=${func}:function\(\i(?:,\i)?\){)`), + replace: "return true;", + predicate + })) + }; +} + export default definePlugin({ name: "FakeNitro", authors: [Devs.Arjix, Devs.D3SOX, Devs.Ven, Devs.fawn, Devs.captain, Devs.Nuckyz, Devs.AutumnVN], @@ -203,6 +223,8 @@ export default definePlugin({ settings, patches: [ + // General bypass patches + makeBypassPatches(), // Patch the emoji picker in voice calls to not be bypassed by fake nitro { find: "emojiItemDisabled]", @@ -252,15 +274,6 @@ export default definePlugin({ replace: (_, rest1, rest2) => `${rest1},fakeNitroOriginal){if(!fakeNitroOriginal)return false;${rest2}` } }, - // Allow stickers to be sent everywhere - { - find: "canUseCustomStickersEverywhere:", - predicate: () => settings.store.enableStickerBypass, - replacement: { - match: /(?<=canUseCustomStickersEverywhere:)\i/, - replace: "()=>true" - }, - }, // Make stickers always available { find: '"SENDABLE"', @@ -270,20 +283,6 @@ export default definePlugin({ replace: "true?" } }, - // Allow streaming with high quality - { - find: "canUseHighVideoUploadQuality:", - predicate: () => settings.store.enableStreamQualityBypass, - replacement: [ - "canUseHighVideoUploadQuality", - "canStreamQuality", - ].map(func => { - return { - match: new RegExp(`(?<=${func}:)\\i`, "g"), - replace: "()=>true" - }; - }) - }, // Remove boost requirements to stream with high quality { find: "STREAM_FPS_OPTION.format", @@ -293,21 +292,13 @@ export default definePlugin({ replace: "" } }, - // Allow client themes to be changeable - { - find: "canUseClientThemes:", - replacement: { - match: /(?<=canUseClientThemes:)\i/, - replace: "()=>true" - } - }, { find: '"UserSettingsProtoStore"', replacement: [ { // Overwrite incoming connection settings proto with our local settings - match: /function (\i)\((\i)\){(?=.*CONNECTION_OPEN:\1)/, - replace: (m, funcName, props) => `${m}$self.handleProtoChange(${props}.userSettingsProto,${props}.user);` + match: /CONNECTION_OPEN:function\((\i)\){/, + replace: (m, props) => `${m}$self.handleProtoChange(${props}.userSettingsProto,${props}.user);` }, { // Overwrite non local proto changes with our local settings @@ -398,14 +389,6 @@ export default definePlugin({ replace: (_, reactNode, props) => `$self.addFakeNotice(${FakeNoticeType.Emoji},${reactNode},!!${props}?.fakeNitroNode?.fake)` } }, - // Allow using custom app icons - { - find: "canUsePremiumAppIcons:", - replacement: { - match: /(?<=canUsePremiumAppIcons:)\i/, - replace: "()=>true" - } - }, // Separate patch for allowing using custom app icons { find: /\.getCurrentDesktopIcon.{0,25}\.isPremium/, @@ -421,14 +404,6 @@ export default definePlugin({ match: /(?<=type:"(?:SOUNDBOARD_SOUNDS_RECEIVED|GUILD_SOUNDBOARD_SOUND_CREATE|GUILD_SOUNDBOARD_SOUND_UPDATE|GUILD_SOUNDBOARD_SOUNDS_UPDATE)".+?available:)\i\.available/g, replace: "true" } - }, - // Allow using custom notification sounds - { - find: "canUseCustomNotificationSounds:", - replacement: { - match: /(?<=canUseCustomNotificationSounds:)\i/, - replace: "()=>true" - } } ], diff --git a/src/plugins/messageLogger/index.tsx b/src/plugins/messageLogger/index.tsx index baa0977a6..a08aeccce 100644 --- a/src/plugins/messageLogger/index.tsx +++ b/src/plugins/messageLogger/index.tsx @@ -323,35 +323,35 @@ export default definePlugin({ replacement: [ { // Add deleted=true to all target messages in the MESSAGE_DELETE event - match: /function (?=.+?MESSAGE_DELETE:(\i))\1\((\i)\){let.+?((?:\i\.){2})getOrCreate.+?}(?=function)/, + match: /MESSAGE_DELETE:function\((\i)\){let.+?((?:\i\.){2})getOrCreate.+?},/, replace: - "function $1($2){" + - " var cache = $3getOrCreate($2.channelId);" + - " cache = $self.handleDelete(cache, $2, false);" + - " $3commit(cache);" + - "}" + "MESSAGE_DELETE:function($1){" + + " var cache = $2getOrCreate($1.channelId);" + + " cache = $self.handleDelete(cache, $1, false);" + + " $2commit(cache);" + + "}," }, { // Add deleted=true to all target messages in the MESSAGE_DELETE_BULK event - match: /function (?=.+?MESSAGE_DELETE_BULK:(\i))\1\((\i)\){let.+?((?:\i\.){2})getOrCreate.+?}(?=function)/, + match: /MESSAGE_DELETE_BULK:function\((\i)\){let.+?((?:\i\.){2})getOrCreate.+?},/, replace: - "function $1($2){" + - " var cache = $3getOrCreate($2.channelId);" + - " cache = $self.handleDelete(cache, $2, true);" + - " $3commit(cache);" + - "}" + "MESSAGE_DELETE_BULK:function($1){" + + " var cache = $2getOrCreate($1.channelId);" + + " cache = $self.handleDelete(cache, $1, true);" + + " $2commit(cache);" + + "}," }, { // Add current cached content + new edit time to cached message's editHistory - match: /(function (\i)\((\i)\).+?)\.update\((\i)(?=.*MESSAGE_UPDATE:\2)/, + match: /(MESSAGE_UPDATE:function\((\i)\).+?)\.update\((\i)/, replace: "$1" + - ".update($4,m =>" + - " (($3.message.flags & 64) === 64 || $self.shouldIgnore($3.message, true)) ? m :" + - " $3.message.edited_timestamp && $3.message.content !== m.content ?" + - " m.set('editHistory',[...(m.editHistory || []), $self.makeEdit($3.message, m)]) :" + + ".update($3,m =>" + + " (($2.message.flags & 64) === 64 || $self.shouldIgnore($2.message, true)) ? m :" + + " $2.message.edited_timestamp && $2.message.content !== m.content ?" + + " m.set('editHistory',[...(m.editHistory || []), $self.makeEdit($2.message, m)]) :" + " m" + ")" + - ".update($4" + ".update($3" }, { // fix up key (edit last message) attempting to edit a deleted message @@ -465,12 +465,12 @@ export default definePlugin({ find: '"ReferencedMessageStore"', replacement: [ { - match: /MESSAGE_DELETE:\i,/, - replace: "MESSAGE_DELETE:()=>{}," + match: /MESSAGE_DELETE:function\((\i)\).+?},/, + replace: "MESSAGE_DELETE:function($1){}," }, { - match: /MESSAGE_DELETE_BULK:\i,/, - replace: "MESSAGE_DELETE_BULK:()=>{}," + match: /MESSAGE_DELETE_BULK:function\((\i)\).+?},/, + replace: "MESSAGE_DELETE_BULK:function($1){}," } ] }, diff --git a/src/plugins/moreUserTags/index.tsx b/src/plugins/moreUserTags/index.tsx index eb0b38600..7a56131a5 100644 --- a/src/plugins/moreUserTags/index.tsx +++ b/src/plugins/moreUserTags/index.tsx @@ -182,8 +182,8 @@ export default definePlugin({ { find: ".ORIGINAL_POSTER=", replacement: { - match: /(\i)=\{\}\)\);(?=let \i=100)/, - replace: "$1=$self.getTagTypes()));" + match: /\((\i)=\{\}\)\)\[(\i)\.BOT/, + replace: "($1=$self.getTagTypes()))[$2.BOT" } }, { diff --git a/src/plugins/noBlockedMessages/index.ts b/src/plugins/noBlockedMessages/index.ts index 3c4a2d751..d3b37b026 100644 --- a/src/plugins/noBlockedMessages/index.ts +++ b/src/plugins/noBlockedMessages/index.ts @@ -47,14 +47,14 @@ export default definePlugin({ }, ...[ '"MessageStore"', - '"displayName","ReadStateStore")' + '"ReadStateStore"' ].map(find => ({ find, predicate: () => Settings.plugins.NoBlockedMessages.ignoreBlockedMessages === true, replacement: [ { - match: /(?<=function (\i)\((\i)\){)(?=.*MESSAGE_CREATE:\1)/, - replace: (_, _funcName, props) => `if($self.isBlocked(${props}.message))return;` + match: /(?<=MESSAGE_CREATE:function\((\i)\){)/, + replace: (_, props) => `if($self.isBlocked(${props}.message))return;` } ] })) diff --git a/src/plugins/noPendingCount/index.ts b/src/plugins/noPendingCount/index.ts index 4619c2f06..84ee8ec19 100644 --- a/src/plugins/noPendingCount/index.ts +++ b/src/plugins/noPendingCount/index.ts @@ -74,10 +74,10 @@ export default definePlugin({ // This prevents the Message Requests tab from always hiding due to the previous patch (and is compatible with spam requests) // In short, only the red badge is hidden. Button visibility behavior isn't changed. { - find: ".getSpamChannelsCount();", + find: ".getSpamChannelsCount()", predicate: () => settings.store.hideMessageRequestsCount, replacement: { - match: /(?<=getSpamChannelsCount\(\);return )\i\.getMessageRequestsCount\(\)/, + match: /(?<=getSpamChannelsCount\(\),\i=)\i\.getMessageRequestsCount\(\)/, replace: "$self.getRealMessageRequestCount()" } }, diff --git a/src/plugins/showHiddenThings/index.ts b/src/plugins/showHiddenThings/index.ts index 847dcd327..bab0b3032 100644 --- a/src/plugins/showHiddenThings/index.ts +++ b/src/plugins/showHiddenThings/index.ts @@ -92,16 +92,7 @@ export default definePlugin({ replace: '">0"' } }, - // empty word filter (why would anyone search "horny" in fucking server discovery... please... why are we patching this again??) - { - find: '"horny","fart"', - predicate: () => settings.store.disableDisallowedDiscoveryFilters, - replacement: { - match: /=\["egirl",.+?\]/, - replace: "=[]" - } - }, - // empty 2nd word filter + // empty word filter { find: '"pepe","nude"', predicate: () => settings.store.disableDisallowedDiscoveryFilters, diff --git a/src/plugins/superReactionTweaks/index.ts b/src/plugins/superReactionTweaks/index.ts index cbcb38ada..188f868a5 100644 --- a/src/plugins/superReactionTweaks/index.ts +++ b/src/plugins/superReactionTweaks/index.ts @@ -42,8 +42,8 @@ export default definePlugin({ { find: ",BURST_REACTION_EFFECT_PLAY", replacement: { - match: /((\i)=\i=>{.{50,100})(\i\(\i,\i\))>=\i(?=.*BURST_REACTION_EFFECT_PLAY:\2)/, - replace: "$1!$self.shouldPlayBurstReaction($3)" + match: /(BURST_REACTION_EFFECT_PLAY:\i=>{.{50,100})(\i\(\i,\i\))>=\d+/, + replace: "$1!$self.shouldPlayBurstReaction($2)" } }, { diff --git a/src/plugins/volumeBooster/index.ts b/src/plugins/volumeBooster/index.ts index db0242664..c38b2d1a5 100644 --- a/src/plugins/volumeBooster/index.ts +++ b/src/plugins/volumeBooster/index.ts @@ -94,7 +94,7 @@ export default definePlugin({ find: "AudioContextSettingsMigrated", replacement: [ { - match: /(?<=isLocalMute\(\i,\i\),volume:(\i).+?\i\(\i,\i,)\1(?=\))/, + match: /(?<=isLocalMute\(\i,\i\),volume:.+?volume:)\i(?=})/, replace: "$&>200?200:$&" }, { @@ -109,7 +109,7 @@ export default definePlugin({ }, // Prevent the MediaEngineStore from overwriting our LocalVolumes above 200 with the ones the Discord Audio Context Settings sync sends { - find: '="MediaEngineStore",', + find: '"MediaEngineStore"', replacement: [ { match: /(\.settings\.audioContextSettings.+?)(\i\[\i\])=(\i\.volume)(.+?setLocalVolume\(\i,).+?\)/, diff --git a/src/plugins/whoReacted/index.tsx b/src/plugins/whoReacted/index.tsx index bcd070792..24be9bef5 100644 --- a/src/plugins/whoReacted/index.tsx +++ b/src/plugins/whoReacted/index.tsx @@ -113,8 +113,8 @@ export default definePlugin({ { find: '"MessageReactionsStore"', replacement: { - match: /function (\i)\(\){(\i)={}(?=.*CONNECTION_OPEN:\1)/, - replace: "$&;$self.reactions=$2;" + match: /(?<=CONNECTION_OPEN:function\(\){)(\i)={}/, + replace: "$&;$self.reactions=$1" } }, {