Improve Fake Nitro client themes bypass (#654)
This commit is contained in:
parent
55a66dbb39
commit
a1c1fec8cb
1 changed files with 56 additions and 9 deletions
|
@ -22,12 +22,13 @@ import { Devs } from "@utils/constants";
|
||||||
import { ApngDisposeOp, getGifEncoder, importApngJs } from "@utils/dependencies";
|
import { ApngDisposeOp, getGifEncoder, importApngJs } from "@utils/dependencies";
|
||||||
import { getCurrentGuild } from "@utils/discord";
|
import { getCurrentGuild } from "@utils/discord";
|
||||||
import definePlugin, { OptionType } from "@utils/types";
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
import { findByCodeLazy, findByPropsLazy, findStoreLazy } from "@webpack";
|
import { findByCodeLazy, findByPropsLazy, findLazy, findStoreLazy } from "@webpack";
|
||||||
import { ChannelStore, PermissionStore, UserStore } from "@webpack/common";
|
import { ChannelStore, FluxDispatcher, PermissionStore, UserStore } from "@webpack/common";
|
||||||
|
|
||||||
const DRAFT_TYPE = 0;
|
const DRAFT_TYPE = 0;
|
||||||
const promptToUpload = findByCodeLazy("UPLOAD_FILE_LIMIT_ERROR");
|
const promptToUpload = findByCodeLazy("UPLOAD_FILE_LIMIT_ERROR");
|
||||||
const UserSettingsProtoStore = findStoreLazy("UserSettingsProtoStore");
|
const UserSettingsProtoStore = findStoreLazy("UserSettingsProtoStore");
|
||||||
|
const ProtoPreloadedUserSettings = findLazy(m => m.typeName === "discord_protos.discord_users.v1.PreloadedUserSettings");
|
||||||
|
|
||||||
const USE_EXTERNAL_EMOJIS = 1n << 18n;
|
const USE_EXTERNAL_EMOJIS = 1n << 18n;
|
||||||
const USE_EXTERNAL_STICKERS = 1n << 37n;
|
const USE_EXTERNAL_STICKERS = 1n << 37n;
|
||||||
|
@ -162,6 +163,13 @@ export default definePlugin({
|
||||||
replace: (m, props) => `${m}${props}.local||$self.handleProtoChange(${props}.settings.proto);`
|
replace: (m, props) => `${m}${props}.local||$self.handleProtoChange(${props}.settings.proto);`
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
find: "updateTheme:function",
|
||||||
|
replacement: {
|
||||||
|
match: /(function \i\(\i\){var (\i)=\i\.backgroundGradientPresetId.+?)\i\.\i\.updateAsync.+?theme=(.+?);.+?\),\i\)/,
|
||||||
|
replace: (_, rest, backgroundGradientPresetId, theme) => `${rest}$self.handleGradientThemeSelect(${backgroundGradientPresetId},${theme});`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
|
@ -211,20 +219,59 @@ export default definePlugin({
|
||||||
},
|
},
|
||||||
|
|
||||||
handleProtoChange(proto: any, user: any) {
|
handleProtoChange(proto: any, user: any) {
|
||||||
const premiumType = user?.premium_type ?? UserStore.getCurrentUser()?.premiumType ?? 0;
|
const premiumType: number = user?.premium_type ?? UserStore.getCurrentUser()?.premiumType ?? 0;
|
||||||
|
|
||||||
if (premiumType === 0) {
|
if (premiumType === 0) {
|
||||||
const themeId = UserSettingsProtoStore.settings.appearance?.clientThemeSettings?.backgroundGradientPresetId?.value;
|
const appearanceDummyProto = ProtoPreloadedUserSettings.create({
|
||||||
|
appearance: {}
|
||||||
|
});
|
||||||
|
|
||||||
if (themeId != null) {
|
proto.appearance ??= appearanceDummyProto.appearance;
|
||||||
proto.appearance ??= {};
|
|
||||||
proto.appearance.clientThemeSettings ??= {};
|
if (UserSettingsProtoStore.settings.appearance?.theme != null) {
|
||||||
proto.appearance.clientThemeSettings.backgroundGradientPresetId ??= {};
|
proto.appearance.theme = UserSettingsProtoStore.settings.appearance.theme;
|
||||||
proto.appearance.clientThemeSettings.backgroundGradientPresetId.value = themeId;
|
}
|
||||||
|
|
||||||
|
if (UserSettingsProtoStore.settings.appearance?.clientThemeSettings?.backgroundGradientPresetId?.value != null) {
|
||||||
|
const clientThemeSettingsDummyProto = ProtoPreloadedUserSettings.create({
|
||||||
|
appearance: {
|
||||||
|
clientThemeSettings: {
|
||||||
|
backgroundGradientPresetId: {
|
||||||
|
value: UserSettingsProtoStore.settings.appearance.clientThemeSettings.backgroundGradientPresetId.value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
proto.appearance.clientThemeSettings ??= clientThemeSettingsDummyProto.appearance.clientThemeSettings;
|
||||||
|
proto.appearance.clientThemeSettings.backgroundGradientPresetId = clientThemeSettingsDummyProto.appearance.clientThemeSettings.backgroundGradientPresetId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
handleGradientThemeSelect(backgroundGradientPresetId: number | undefined, theme: number) {
|
||||||
|
const proto = ProtoPreloadedUserSettings.create({
|
||||||
|
appearance: {
|
||||||
|
theme,
|
||||||
|
clientThemeSettings: {
|
||||||
|
backgroundGradientPresetId: backgroundGradientPresetId != null ? {
|
||||||
|
value: backgroundGradientPresetId
|
||||||
|
} : void 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
FluxDispatcher.dispatch({
|
||||||
|
type: "USER_SETTINGS_PROTO_UPDATE",
|
||||||
|
local: true,
|
||||||
|
partial: true,
|
||||||
|
settings: {
|
||||||
|
type: 1,
|
||||||
|
proto
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
hasPermissionToUseExternalEmojis(channelId: string) {
|
hasPermissionToUseExternalEmojis(channelId: string) {
|
||||||
const channel = ChannelStore.getChannel(channelId);
|
const channel = ChannelStore.getChannel(channelId);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue