Enable/Disable Plugin Button For Helpers
This commit is contained in:
parent
ad4363d95a
commit
9d59730381
2 changed files with 136 additions and 3 deletions
102
src/equicordplugins/equicordHelper/utils.tsx
Normal file
102
src/equicordplugins/equicordHelper/utils.tsx
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
* Vencord, a Discord client mod
|
||||
* Copyright (c) 2025 Vendicated and contributors
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { showNotice } from "@api/Notices";
|
||||
import { Alerts, Toasts } from "@webpack/common";
|
||||
import { Settings } from "Vencord";
|
||||
|
||||
function showErrorToast(message: string) {
|
||||
Toasts.show({
|
||||
message,
|
||||
type: Toasts.Type.FAILURE,
|
||||
id: Toasts.genId(),
|
||||
options: {
|
||||
position: Toasts.Position.BOTTOM
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function restartPrompt(): Promise<boolean> {
|
||||
return new Promise(resolve => {
|
||||
Alerts.show({
|
||||
title: "Restart Required",
|
||||
body: (
|
||||
<>
|
||||
<p style={{ textAlign: "center" }}>
|
||||
Some plugins require a restart to fully disable.
|
||||
</p>
|
||||
<p style={{ textAlign: "center" }}>Would you like to restart now?</p>
|
||||
</>
|
||||
),
|
||||
confirmText: "Restart Now",
|
||||
cancelText: "Later",
|
||||
onConfirm: () => resolve(true),
|
||||
onCancel: () => resolve(false),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
export async function toggleEnabled(name: string) {
|
||||
let restartNeeded = false;
|
||||
function onRestartNeeded() {
|
||||
restartNeeded = true;
|
||||
}
|
||||
|
||||
async function beforeReturn(settings: any, wasEnabled: boolean) {
|
||||
if (restartNeeded) {
|
||||
const confirmed = await restartPrompt();
|
||||
if (!confirmed) return false;
|
||||
|
||||
settings.enabled = !wasEnabled;
|
||||
location.reload();
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const plugin = Vencord.Plugins.plugins[name];
|
||||
const settings = Settings.plugins[plugin.name];
|
||||
const isEnabled = () => settings.enabled ?? false;
|
||||
const wasEnabled = isEnabled();
|
||||
|
||||
if (!wasEnabled) {
|
||||
const { restartNeeded, failures } = Vencord.Plugins.startDependenciesRecursive(plugin);
|
||||
if (failures.length) {
|
||||
console.error(`Failed to start dependencies for ${plugin.name}: ${failures.join(", ")}`);
|
||||
showNotice("Failed to start dependencies: " + failures.join(", "), "Close", () => null);
|
||||
return;
|
||||
} else if (restartNeeded) {
|
||||
settings.enabled = true;
|
||||
onRestartNeeded();
|
||||
return await beforeReturn(settings, wasEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
if (plugin.patches?.length) {
|
||||
onRestartNeeded();
|
||||
return await beforeReturn(settings, wasEnabled);
|
||||
}
|
||||
|
||||
if (wasEnabled && !plugin.started) {
|
||||
settings.enabled = !wasEnabled;
|
||||
return false;
|
||||
}
|
||||
|
||||
const result = wasEnabled ? Vencord.Plugins.stopPlugin(plugin) : Vencord.Plugins.startPlugin(plugin);
|
||||
|
||||
if (!result) {
|
||||
settings.enabled = false;
|
||||
const msg = `Error while ${wasEnabled ? "stopping" : "starting"} plugin ${plugin.name}`;
|
||||
console.error(msg);
|
||||
showErrorToast(msg);
|
||||
return await beforeReturn(settings, wasEnabled);
|
||||
}
|
||||
|
||||
settings.enabled = !wasEnabled;
|
||||
return await beforeReturn(settings, wasEnabled);
|
||||
}
|
||||
|
|
@ -22,6 +22,7 @@ import ErrorBoundary from "@components/ErrorBoundary";
|
|||
import { Flex } from "@components/Flex";
|
||||
import { Link } from "@components/Link";
|
||||
import { openUpdaterModal } from "@components/VencordSettings/UpdaterTab";
|
||||
import { toggleEnabled } from "@equicordplugins/equicordHelper/utils";
|
||||
import { CONTRIB_ROLE_ID, Devs, DONOR_ROLE_ID, EQUCORD_HELPERS, EQUIBOP_CONTRIB_ROLE_ID, EQUICORD_TEAM, GUILD_ID, SUPPORT_CHANNEL_ID, SUPPORT_CHANNEL_IDS, VC_CONTRIB_ROLE_ID, VC_DONOR_ROLE_ID, VC_GUILD_ID, VC_REGULAR_ROLE_ID, VC_SUPPORT_CHANNEL_IDS, VENCORD_CONTRIB_ROLE_ID } from "@utils/constants";
|
||||
import { sendMessage } from "@utils/discord";
|
||||
import { Logger } from "@utils/Logger";
|
||||
|
|
@ -295,11 +296,14 @@ export default definePlugin({
|
|||
|
||||
const shouldAddUpdateButton =
|
||||
!IS_UPDATER_DISABLED
|
||||
&& (
|
||||
(props.channel.id === SUPPORT_CHANNEL_ID && equicordSupport)
|
||||
)
|
||||
&& ((props.channel.id === SUPPORT_CHANNEL_ID && equicordSupport))
|
||||
&& props.message.content?.includes("update");
|
||||
|
||||
const matchedPlugins = Object.keys(Vencord.Plugins.plugins).filter(name => (props.message.content?.toLowerCase() ?? "").includes(name.toLowerCase()));
|
||||
const matchedPlugin = matchedPlugins.sort((a, b) => b.length - a.length)[0];
|
||||
const equicordGuild = ChannelStore.getChannel(props.channel.id)?.guild_id === GUILD_ID;
|
||||
const shouldAddPluginButtons = equicordGuild && equicordSupport && matchedPlugin;
|
||||
|
||||
if (shouldAddUpdateButton) {
|
||||
buttons.push(
|
||||
<Button
|
||||
|
|
@ -322,6 +326,33 @@ export default definePlugin({
|
|||
);
|
||||
}
|
||||
|
||||
if (shouldAddPluginButtons && matchedPlugin) {
|
||||
const isEnabled = Vencord.Plugins.isPluginEnabled(matchedPlugin);
|
||||
|
||||
buttons.push(
|
||||
<Button
|
||||
key="vc-plugin-toggle"
|
||||
color={isEnabled ? Button.Colors.RED : Button.Colors.GREEN}
|
||||
onClick={async () => {
|
||||
try {
|
||||
const success = await toggleEnabled(matchedPlugin);
|
||||
if (success) {
|
||||
showToast(
|
||||
`${isEnabled ? "Disabled" : "Enabled"} ${matchedPlugin}`,
|
||||
Toasts.Type.SUCCESS
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
new Logger(this.name).error("Error while toggling:", e);
|
||||
showToast(`Failed to toggle ${matchedPlugin}`, Toasts.Type.FAILURE);
|
||||
}
|
||||
}}
|
||||
>
|
||||
{`${isEnabled ? "Disable" : "Enable"} ${matchedPlugin}`}
|
||||
</Button>
|
||||
);
|
||||
}
|
||||
|
||||
if (props.channel.id === SUPPORT_CHANNEL_ID && PermissionStore.can(PermissionsBits.SEND_MESSAGES, props.channel)) {
|
||||
if (props.message.content.includes("/equicord-debug") || props.message.content.includes("/equicord-plugins")) {
|
||||
buttons.push(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue