NoNitroUpsell: Use Override Store
This commit is contained in:
parent
190003d648
commit
1d7dd68d9f
5 changed files with 20 additions and 59 deletions
|
|
@ -6,61 +6,23 @@
|
|||
|
||||
import { Devs } from "@utils/constants";
|
||||
import definePlugin from "@utils/types";
|
||||
import { User } from "@vencord/discord-types";
|
||||
import { UserStore } from "@webpack/common";
|
||||
|
||||
let user: ModifiedUser | undefined;
|
||||
let lastUserId: string | undefined;
|
||||
|
||||
interface ModifiedUser extends User {
|
||||
_realPremiumType?: number;
|
||||
}
|
||||
|
||||
const onChange = () => {
|
||||
const newUser = UserStore.getCurrentUser();
|
||||
if (newUser && newUser.id !== lastUserId) {
|
||||
user = newUser;
|
||||
ready(user);
|
||||
}
|
||||
};
|
||||
|
||||
function ready(user: ModifiedUser) {
|
||||
if (!user) return;
|
||||
if ("_realPremiumType" in user) return;
|
||||
|
||||
user._realPremiumType = user.premiumType ?? 0;
|
||||
user.premiumType = 2;
|
||||
lastUserId = user.id;
|
||||
}
|
||||
import { OverridePremiumTypeStore } from "@webpack/common";
|
||||
|
||||
export default definePlugin({
|
||||
name: "NoNitroUpsell",
|
||||
description: "Removes ALL of Discord's nitro upsells by tricking the client into thinking you have nitro.",
|
||||
authors: [Devs.thororen],
|
||||
patches: [
|
||||
{
|
||||
find: "#{intl::USER_PROFILE_ENTRY_POINTS_AMP_UP_YOUR_PROFILE}",
|
||||
replacement: [
|
||||
{
|
||||
match: /}\);return \i\?.*?}\)}}/,
|
||||
replace: "});return null}}"
|
||||
}
|
||||
],
|
||||
flux: {
|
||||
CONNECTION_OPEN() {
|
||||
const state = OverridePremiumTypeStore.getState();
|
||||
if (state.premiumTypeActual !== 2 || state.premiumTypeOverride === 2) return;
|
||||
state.premiumTypeOverride = 2;
|
||||
}
|
||||
],
|
||||
},
|
||||
start() {
|
||||
user = UserStore.getCurrentUser();
|
||||
if (user) ready(user);
|
||||
|
||||
UserStore.addChangeListener(onChange);
|
||||
OverridePremiumTypeStore.getState().premiumTypeOverride = 2;
|
||||
},
|
||||
stop() {
|
||||
const user = UserStore.getCurrentUser();
|
||||
if (!user) return;
|
||||
if (!("_realPremiumType" in user)) return;
|
||||
// @ts-ignore
|
||||
user.premiumType = user._realPremiumType;
|
||||
delete user._realPremiumType;
|
||||
UserStore.removeChangeListener(onChange);
|
||||
OverridePremiumTypeStore.getState().premiumTypeOverride = undefined;
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ import { openModalLazy } from "@utils/modal";
|
|||
import { useForceUpdater } from "@utils/react";
|
||||
import definePlugin, { OptionType, StartAt } from "@utils/types";
|
||||
import { extractAndLoadChunksLazy, findByPropsLazy, findComponentByCodeLazy, findModuleId, wreq } from "@webpack";
|
||||
import { Clickable, Menu, Toasts, UserStore, useState } from "@webpack/common";
|
||||
import { Clickable, Menu, OverridePremiumTypeStore, Toasts, useState } from "@webpack/common";
|
||||
|
||||
import managedStyle from "./fixActionBar.css?managed";
|
||||
|
||||
|
|
@ -126,8 +126,7 @@ const RenderStatusMenuItem = ({ status, update, disabled }: { status: DiscordSta
|
|||
|
||||
|
||||
const StatusSubMenuComponent = () => {
|
||||
// @ts-ignore
|
||||
const premiumType = UserStore?.getCurrentUser()?._realPremiumType ?? UserStore?.getCurrentUser()?.premiumType ?? 0;
|
||||
const premiumType = OverridePremiumTypeStore.getState().premiumTypeActual ?? 0;
|
||||
const update = useForceUpdater();
|
||||
return <Menu.Menu navId="sp-custom-status-submenu" onClose={() => { }}>
|
||||
{Object.entries((settings.store.StatusPresets as { [k: string]: DiscordStatus | undefined; })).map(([index, status]) => status != null ? <Menu.MenuItem
|
||||
|
|
|
|||
|
|
@ -27,13 +27,10 @@ import definePlugin, { OptionType, Patch } from "@utils/types";
|
|||
import type { Emoji, Message } from "@vencord/discord-types";
|
||||
import { StickerFormatType } from "@vencord/discord-types/enums";
|
||||
import { findByCodeLazy, findByPropsLazy, findStoreLazy, proxyLazyWebpack } from "@webpack";
|
||||
import { Alerts, ChannelStore, DraftType, EmojiStore, FluxDispatcher, GuildMemberStore, lodash, Parser, PermissionsBits, PermissionStore, StickersStore, UploadHandler, UserSettingsActionCreators, UserStore } from "@webpack/common";
|
||||
import { Alerts, ChannelStore, DraftType, EmojiStore, FluxDispatcher, GuildMemberStore, lodash, OverridePremiumTypeStore, Parser, PermissionsBits, PermissionStore, StickersStore, UploadHandler, UserSettingsActionCreators } from "@webpack/common";
|
||||
import { applyPalette, GIFEncoder, quantize } from "gifenc";
|
||||
import type { ReactElement, ReactNode } from "react";
|
||||
|
||||
// @ts-ignore
|
||||
const premiumType = UserStore?.getCurrentUser()?._realPremiumType ?? UserStore?.getCurrentUser()?.premiumType ?? 0;
|
||||
|
||||
const UserSettingsProtoStore = findStoreLazy("UserSettingsProtoStore");
|
||||
|
||||
const BINARY_READ_OPTIONS = findByPropsLazy("readerFactory");
|
||||
|
|
@ -389,16 +386,17 @@ export default definePlugin({
|
|||
},
|
||||
|
||||
get canUseEmotes() {
|
||||
return (premiumType) > 0;
|
||||
return (OverridePremiumTypeStore.getState().premiumTypeActual ?? 0) > 0;
|
||||
},
|
||||
|
||||
get canUseStickers() {
|
||||
return (premiumType) > 1;
|
||||
return (OverridePremiumTypeStore.getState().premiumTypeActual ?? 0) > 1;
|
||||
},
|
||||
|
||||
handleProtoChange(proto: any, user: any) {
|
||||
try {
|
||||
if (proto == null || typeof proto === "string") return;
|
||||
const premiumType = OverridePremiumTypeStore.getState().premiumTypeActual ?? 0;
|
||||
|
||||
if (premiumType !== 2) {
|
||||
proto.appearance ??= AppearanceSettingsActionCreators.create();
|
||||
|
|
@ -419,6 +417,7 @@ export default definePlugin({
|
|||
},
|
||||
|
||||
handleGradientThemeSelect(backgroundGradientPresetId: number | undefined, theme: number, original: () => void) {
|
||||
const premiumType = OverridePremiumTypeStore.getState().premiumTypeActual ?? 0;
|
||||
if (premiumType === 2 || backgroundGradientPresetId == null) return original();
|
||||
|
||||
if (!PreloadedUserSettingsActionCreators || !AppearanceSettingsActionCreators || !ClientThemeSettingsActionsCreators || !BINARY_READ_OPTIONS) return;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
import { definePluginSettings } from "@api/Settings";
|
||||
import { Devs } from "@utils/constants";
|
||||
import definePlugin, { OptionType } from "@utils/types";
|
||||
import { UserStore } from "@webpack/common";
|
||||
import { OverridePremiumTypeStore } from "@webpack/common";
|
||||
|
||||
export const settings = definePluginSettings({
|
||||
superReactByDefault: {
|
||||
|
|
@ -77,7 +77,6 @@ export default definePlugin({
|
|||
},
|
||||
|
||||
get shouldSuperReactByDefault() {
|
||||
// @ts-ignore
|
||||
return settings.store.superReactByDefault && (UserStore.getCurrentUser()?._realPremiumType ?? UserStore.getCurrentUser().premiumType != null);
|
||||
return settings.store.superReactByDefault && (OverridePremiumTypeStore.getState().premiumTypeActual != null);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ export let ThemeStore: t.ThemeStore;
|
|||
export let WindowStore: t.WindowStore;
|
||||
export let DraftStore: t.DraftStore;
|
||||
export let StreamerModeStore: t.StreamerModeStore;
|
||||
export let OverridePremiumTypeStore: GenericStore;
|
||||
|
||||
/**
|
||||
* @see jsdoc of {@link t.useStateFromStores}
|
||||
|
|
@ -88,6 +89,7 @@ waitForStore("StickersStore", m => StickersStore = m);
|
|||
waitForStore("TypingStore", m => TypingStore = m);
|
||||
waitForStore("VoiceStateStore", m => VoiceStateStore = m);
|
||||
waitForStore("StreamerModeStore", m => StreamerModeStore = m);
|
||||
waitForStore("OverridePremiumTypeStore", m => OverridePremiumTypeStore = m);
|
||||
waitForStore("ThemeStore", m => {
|
||||
ThemeStore = m;
|
||||
// Importing this directly can easily cause circular imports. For this reason, use a non import access here.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue