Compare commits
1 commit
master
...
more-alts-
| Author | SHA1 | Date | |
|---|---|---|---|
| b077927fab |
5 changed files with 88 additions and 20 deletions
24
plugins/MoreAlts/NativeSwitcher.js
Normal file
24
plugins/MoreAlts/NativeSwitcher.js
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
import { findByProps, findByStoreName } from "@vendetta/metro";
|
||||||
|
import { after } from "@vendetta/patcher";
|
||||||
|
import { storage } from "@vendetta/plugin";
|
||||||
|
|
||||||
|
const AccountDispatcher = findByProps("getCanUseMultiAccountMobile");
|
||||||
|
const MultiAccountStore = findByStoreName("MultiAccountStore");
|
||||||
|
|
||||||
|
export default function patchNativeSwitcher() {
|
||||||
|
if (!storage.settings?.enableNativeSwitcher || !AccountDispatcher || !MultiAccountStore) {
|
||||||
|
return () => {};
|
||||||
|
}
|
||||||
|
|
||||||
|
const unpatch = after("getCanUseMultiAccountMobile", AccountDispatcher, () => true);
|
||||||
|
|
||||||
|
Object.defineProperty(MultiAccountStore, "canUseMultiAccountNotifications", {
|
||||||
|
get: () => true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
unpatch();
|
||||||
|
delete MultiAccountStore.canUseMultiAccountNotifications;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -30,7 +30,8 @@ if (!storage.settings) {
|
||||||
enableCLI: true,
|
enableCLI: true,
|
||||||
confirmBeforeDelete: true,
|
confirmBeforeDelete: true,
|
||||||
enableUnsafeFeatures: false,
|
enableUnsafeFeatures: false,
|
||||||
addToSidebar: true
|
addToSidebar: true,
|
||||||
|
enableNativeSwitcher: true
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
|
@ -46,6 +47,9 @@ if (!storage.settings) {
|
||||||
if (storage.settings.addToSidebar === undefined) {
|
if (storage.settings.addToSidebar === undefined) {
|
||||||
storage.settings.addToSidebar = true;
|
storage.settings.addToSidebar = true;
|
||||||
}
|
}
|
||||||
|
if (storage.settings.enableNativeSwitcher === undefined) {
|
||||||
|
storage.settings.enableNativeSwitcher = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (storage.settings.showAccountNames !== undefined) {
|
if (storage.settings.showAccountNames !== undefined) {
|
||||||
delete storage.settings.showAccountNames;
|
delete storage.settings.showAccountNames;
|
||||||
|
|
@ -515,6 +519,44 @@ function SettingsPage({ onBack }) {
|
||||||
})
|
})
|
||||||
]),
|
]),
|
||||||
|
|
||||||
|
React.createElement(ReactNative.View, {
|
||||||
|
key: "enable-native-switcher",
|
||||||
|
style: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
alignItems: 'center',
|
||||||
|
paddingVertical: 12,
|
||||||
|
backgroundColor: '#36393f',
|
||||||
|
paddingHorizontal: 16,
|
||||||
|
borderRadius: 8,
|
||||||
|
marginBottom: 8
|
||||||
|
}
|
||||||
|
}, [
|
||||||
|
React.createElement(ReactNative.View, {
|
||||||
|
key: "text-container",
|
||||||
|
style: { flex: 1 }
|
||||||
|
}, [
|
||||||
|
React.createElement(ReactNative.Text, {
|
||||||
|
key: "label",
|
||||||
|
style: { color: 'white', fontSize: 16 }
|
||||||
|
}, "Enable Native Multi-Account Switcher"),
|
||||||
|
React.createElement(ReactNative.Text, {
|
||||||
|
key: "desc",
|
||||||
|
style: { color: '#72767d', fontSize: 12, marginTop: 2 }
|
||||||
|
}, "Unlocks Discord's own built-in account switcher (restart app to apply)")
|
||||||
|
]),
|
||||||
|
React.createElement(ReactNative.Switch, {
|
||||||
|
key: "toggle",
|
||||||
|
value: storage.settings.enableNativeSwitcher,
|
||||||
|
onValueChange: (v) => {
|
||||||
|
updateSetting("enableNativeSwitcher", v);
|
||||||
|
showToast("Restart app to apply", 0);
|
||||||
|
},
|
||||||
|
trackColor: { false: '#72767d', true: '#7289da' },
|
||||||
|
thumbColor: 'white'
|
||||||
|
})
|
||||||
|
]),
|
||||||
|
|
||||||
React.createElement(ReactNative.View, {
|
React.createElement(ReactNative.View, {
|
||||||
key: "confirm-delete",
|
key: "confirm-delete",
|
||||||
style: {
|
style: {
|
||||||
|
|
|
||||||
|
|
@ -4,24 +4,17 @@ import { getAssetIDByName } from "@vendetta/ui/assets";
|
||||||
import { after } from "@vendetta/patcher";
|
import { after } from "@vendetta/patcher";
|
||||||
import { Forms } from "@vendetta/ui/components";
|
import { Forms } from "@vendetta/ui/components";
|
||||||
import { findInReactTree } from "@vendetta/utils";
|
import { findInReactTree } from "@vendetta/utils";
|
||||||
import { findByProps } from "@vendetta/metro";
|
import { findByProps, findByName } from "@vendetta/metro";
|
||||||
import { logger } from "@vendetta";
|
import { logger } from "@vendetta";
|
||||||
import AccountSwitcherSettings from "./Settings";
|
import AccountSwitcherSettings from "./Settings";
|
||||||
|
|
||||||
const { FormSection, FormRow } = Forms;
|
const { FormSection, FormRow } = Forms;
|
||||||
const { TableRowIcon } = findByProps("TableRowIcon");
|
const { TableRowIcon } = findByProps("TableRowIcon");
|
||||||
|
|
||||||
const bunny = window.bunny;
|
const tabsNavigationRef = findByProps("getRootNavigationRef");
|
||||||
|
const settingConstants = findByProps("SETTING_RENDERER_CONFIG");
|
||||||
const tabsNavigationRef = bunny?.metro?.findByPropsLazy("getRootNavigationRef");
|
const SettingsOverviewScreen = findByName("SettingsOverviewScreen", false);
|
||||||
const settingConstants = bunny?.metro?.findByPropsLazy(
|
const createListModule = findByProps("createList");
|
||||||
"SETTING_RENDERER_CONFIG",
|
|
||||||
);
|
|
||||||
const SettingsOverviewScreen = bunny?.metro?.findByNameLazy(
|
|
||||||
"SettingsOverviewScreen",
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
const createListModule = bunny.metro.findByPropsLazy("createList");
|
|
||||||
|
|
||||||
function Section({ tabs }) {
|
function Section({ tabs }) {
|
||||||
const navigation = NavigationNative.useNavigation();
|
const navigation = NavigationNative.useNavigation();
|
||||||
|
|
@ -48,10 +41,7 @@ function patchPanelUI(tabs, patches) {
|
||||||
patches.push(
|
patches.push(
|
||||||
after(
|
after(
|
||||||
"default",
|
"default",
|
||||||
bunny?.metro?.findByNameLazy(
|
findByName("UserSettingsOverviewWrapper", false),
|
||||||
"UserSettingsOverviewWrapper",
|
|
||||||
false,
|
|
||||||
),
|
|
||||||
(_, ret) => {
|
(_, ret) => {
|
||||||
const UserSettingsOverview = findInReactTree(
|
const UserSettingsOverview = findInReactTree(
|
||||||
ret.props.children,
|
ret.props.children,
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import { storage } from "@vendetta/plugin";
|
||||||
import { React } from "@vendetta/metro/common";
|
import { React } from "@vendetta/metro/common";
|
||||||
import AccountSwitcherSettings from "./Settings";
|
import AccountSwitcherSettings from "./Settings";
|
||||||
import patchSidebar from "./SidebarPatcher";
|
import patchSidebar from "./SidebarPatcher";
|
||||||
|
import patchNativeSwitcher from "./NativeSwitcher";
|
||||||
|
|
||||||
const {
|
const {
|
||||||
meta: { resolveSemanticColor },
|
meta: { resolveSemanticColor },
|
||||||
|
|
@ -37,7 +38,8 @@ if (!storage.settings) {
|
||||||
enableCLI: true,
|
enableCLI: true,
|
||||||
confirmBeforeDelete: true,
|
confirmBeforeDelete: true,
|
||||||
enableUnsafeFeatures: false,
|
enableUnsafeFeatures: false,
|
||||||
addToSidebar: true // Now using the correct patchSettingsPin method
|
addToSidebar: true, // Now using the correct patchSettingsPin method
|
||||||
|
enableNativeSwitcher: true
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
// Ensure all properties exist and migrate old settings
|
// Ensure all properties exist and migrate old settings
|
||||||
|
|
@ -53,6 +55,9 @@ if (!storage.settings) {
|
||||||
if (storage.settings.addToSidebar === undefined) {
|
if (storage.settings.addToSidebar === undefined) {
|
||||||
storage.settings.addToSidebar = true; // Now using correct method
|
storage.settings.addToSidebar = true; // Now using correct method
|
||||||
}
|
}
|
||||||
|
if (storage.settings.enableNativeSwitcher === undefined) {
|
||||||
|
storage.settings.enableNativeSwitcher = true;
|
||||||
|
}
|
||||||
// Remove old setting
|
// Remove old setting
|
||||||
if (storage.settings.showAccountNames !== undefined) {
|
if (storage.settings.showAccountNames !== undefined) {
|
||||||
delete storage.settings.showAccountNames;
|
delete storage.settings.showAccountNames;
|
||||||
|
|
@ -124,6 +129,9 @@ export default {
|
||||||
const sidebarUnpatch = patchSidebar();
|
const sidebarUnpatch = patchSidebar();
|
||||||
this.patches.push(sidebarUnpatch);
|
this.patches.push(sidebarUnpatch);
|
||||||
|
|
||||||
|
const nativeSwitcherUnpatch = patchNativeSwitcher();
|
||||||
|
this.patches.push(nativeSwitcherUnpatch);
|
||||||
|
|
||||||
// Context menu patch for copying tokens
|
// Context menu patch for copying tokens
|
||||||
const optionLabel = "Copy Token";
|
const optionLabel = "Copy Token";
|
||||||
const contextMenuUnpatch = patchBefore("render", findByProps("ScrollView").View, (args) => {
|
const contextMenuUnpatch = patchBefore("render", findByProps("ScrollView").View, (args) => {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,11 @@
|
||||||
{
|
{
|
||||||
"name": "More Alts!",
|
"name": "More Alts!",
|
||||||
"description": "Adds ability to safely add more alts to Discord!",
|
"description": "Adds ability to safely add more alts to Discord, plus unlocks Discord's own native multi-account switcher.",
|
||||||
"authors": [{ "name": "Win8.1VMUser", "id": "793935599702507542" }],
|
"authors": [
|
||||||
|
{ "name": "Win8.1VMUser", "id": "793935599702507542" },
|
||||||
|
{ "name": "John" },
|
||||||
|
{ "name": "cocobo1" }
|
||||||
|
],
|
||||||
"main": "./index.js",
|
"main": "./index.js",
|
||||||
"vendetta": { "icon": "ic_full_server_gating_24px" }
|
"vendetta": { "icon": "ic_full_server_gating_24px" }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue