mirror of
https://github.com/Equicord/Equicord.git
synced 2025-06-30 08:54:24 -04:00
feat: add support for TIE emoji and update boom function logic
refactor: rename Equicord references to ryncord in SupportHelper fix: update VC_SUPPORT_CHANNEL_ID to the correct value in constants
This commit is contained in:
parent
cdeccda3df
commit
61ec098714
3 changed files with 35 additions and 209 deletions
|
@ -52,6 +52,7 @@ interface IVoiceChannelEffectSendEvent {
|
|||
}
|
||||
|
||||
const MOYAI = "🗿";
|
||||
const TIE = "👔";
|
||||
const MOYAI_URL = "https://github.com/Equicord/Equibored/raw/main/sounds/moyai/moyai.mp3";
|
||||
const MOYAI_URL_HD = "https://github.com/Equicord/Equibored/raw/main/sounds/moyai/moyai.wav";
|
||||
const MOYAI_URL_ULTRA = "https://pub-e77fd37d275f481896833bda931f1d70.r2.dev/moyai.WAV";
|
||||
|
@ -111,9 +112,10 @@ export default definePlugin({
|
|||
if (channelId !== SelectedChannelStore.getChannelId()) return;
|
||||
|
||||
const moyaiCount = getMoyaiCount(message.content);
|
||||
const hasTie = message.content.includes(TIE);
|
||||
|
||||
for (let i = 0; i < moyaiCount; i++) {
|
||||
boom();
|
||||
boom(hasTie);
|
||||
await sleep(300);
|
||||
}
|
||||
},
|
||||
|
@ -125,17 +127,17 @@ export default definePlugin({
|
|||
if (channelId !== SelectedChannelStore.getChannelId()) return;
|
||||
|
||||
const name = emoji.name.toLowerCase();
|
||||
if (name !== MOYAI && !name.includes("moyai") && !name.includes("moai")) return;
|
||||
if (name !== MOYAI && !name.includes("moyai") && !name.includes("moai") && name !== TIE.toLowerCase()) return;
|
||||
|
||||
boom();
|
||||
boom(name === TIE.toLowerCase());
|
||||
},
|
||||
|
||||
VOICE_CHANNEL_EFFECT_SEND({ emoji }: IVoiceChannelEffectSendEvent) {
|
||||
if (!emoji?.name) return;
|
||||
const name = emoji.name.toLowerCase();
|
||||
if (name !== MOYAI && !name.includes("moyai") && !name.includes("moai")) return;
|
||||
if (name !== MOYAI && !name.includes("moyai") && !name.includes("moai") && name !== TIE.toLowerCase()) return;
|
||||
|
||||
boom();
|
||||
boom(name === TIE.toLowerCase());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -169,11 +171,11 @@ function getMoyaiCount(message: string) {
|
|||
return Math.min(count, 10);
|
||||
}
|
||||
|
||||
function boom() {
|
||||
function boom(forcedUltra = false) {
|
||||
if (!settings.store.triggerWhenUnfocused && !document.hasFocus()) return;
|
||||
const audioElement = document.createElement("audio");
|
||||
|
||||
audioElement.src = settings.store.ultraMode
|
||||
audioElement.src = (forcedUltra || settings.store.ultraMode)
|
||||
? (settings.store.quality === "HD" ? MOYAI_URL_ULTRA_HD : MOYAI_URL_ULTRA)
|
||||
: (settings.store.quality === "HD" ? MOYAI_URL_HD : MOYAI_URL);
|
||||
|
||||
|
|
|
@ -18,43 +18,25 @@
|
|||
|
||||
import { definePluginSettings } from "@api/Settings";
|
||||
import { getUserSettingLazy } from "@api/UserSettings";
|
||||
import ErrorBoundary from "@components/ErrorBoundary";
|
||||
import { Flex } from "@components/Flex";
|
||||
import { Link } from "@components/Link";
|
||||
import { openUpdaterModal } from "@components/VencordSettings/UpdaterTab";
|
||||
import { CONTRIB_ROLE_ID, Devs, DONOR_ROLE_ID, EQUCORD_HELPERS, EQUIBOP_CONTRIB_ROLE_ID, EQUICORD_TEAM, GUILD_ID, SUPPORT_CHANNEL_ID, VC_CONTRIB_ROLE_ID, VC_DONOR_ROLE_ID, VC_GUILD_ID, VC_REGULAR_ROLE_ID, VC_SUPPORT_CHANNEL_ID, VENCORD_CONTRIB_ROLE_ID } from "@utils/constants";
|
||||
import { Devs, EQUCORD_HELPERS, GUILD_ID, SUPPORT_CHANNEL_ID } from "@utils/constants";
|
||||
import { sendMessage } from "@utils/discord";
|
||||
import { Logger } from "@utils/Logger";
|
||||
import { Margins } from "@utils/margins";
|
||||
import { isEquicordPluginDev, isPluginDev, tryOrElse } from "@utils/misc";
|
||||
import { tryOrElse } from "@utils/misc";
|
||||
import { relaunch } from "@utils/native";
|
||||
import { onlyOnce } from "@utils/onlyOnce";
|
||||
import { makeCodeblock } from "@utils/text";
|
||||
import definePlugin from "@utils/types";
|
||||
import { checkForUpdates, isOutdated, update } from "@utils/updater";
|
||||
import { Alerts, Button, Card, ChannelStore, Forms, GuildMemberStore, Parser, PermissionsBits, PermissionStore, RelationshipStore, showToast, Text, Toasts, UserStore } from "@webpack/common";
|
||||
import { JSX } from "react";
|
||||
import { checkForUpdates, update } from "@utils/updater";
|
||||
import { Button, GuildMemberStore, PermissionsBits, PermissionStore, showToast, Toasts } from "@webpack/common";
|
||||
import { type ReactElement } from "react";
|
||||
|
||||
import gitHash from "~git-hash";
|
||||
import plugins, { PluginMeta } from "~plugins";
|
||||
|
||||
import SettingsPlugin from "./settings";
|
||||
|
||||
const CodeBlockRe = /```js\n(.+?)```/s;
|
||||
|
||||
const TrustedRolesIds = [
|
||||
VC_CONTRIB_ROLE_ID, // Vencord Contributor
|
||||
VC_REGULAR_ROLE_ID, // Vencord Regular
|
||||
VC_DONOR_ROLE_ID, // Vencord Donor
|
||||
EQUICORD_TEAM, // Equicord Team
|
||||
DONOR_ROLE_ID, // Equicord Donor
|
||||
CONTRIB_ROLE_ID, // Equicord Contributor
|
||||
EQUIBOP_CONTRIB_ROLE_ID, // Equibop Contributor
|
||||
VENCORD_CONTRIB_ROLE_ID, // Vencord Contributor
|
||||
];
|
||||
|
||||
const AsyncFunction = async function () { }.constructor;
|
||||
|
||||
const ShowCurrentGame = getUserSettingLazy<boolean>("status", "showCurrentGame")!;
|
||||
|
||||
async function forceUpdate() {
|
||||
|
@ -63,7 +45,6 @@ async function forceUpdate() {
|
|||
await update();
|
||||
relaunch();
|
||||
}
|
||||
|
||||
return outdated;
|
||||
}
|
||||
|
||||
|
@ -75,14 +56,12 @@ async function generateDebugInfoMessage() {
|
|||
if (IS_VESKTOP) return `Vesktop v${VesktopNative.app.getVersion()}`;
|
||||
if (IS_EQUIBOP) return `Equibop v${VesktopNative.app.getVersion()}`;
|
||||
if ("legcord" in window) return `LegCord v${window.legcord.version}`;
|
||||
|
||||
// @ts-expect-error
|
||||
const name = typeof unsafeWindow !== "undefined" ? "UserScript" : "Web";
|
||||
const name = "Web";
|
||||
return `${name} (${navigator.userAgent})`;
|
||||
})();
|
||||
|
||||
const info = {
|
||||
Equicord:
|
||||
ryncord:
|
||||
`v${VERSION} • [${gitHash}](<https://github.com/Rayanzay/ryncord/commit/${gitHash}>)` +
|
||||
`${SettingsPlugin.additionalInfo} - ${Intl.DateTimeFormat("en-GB", { dateStyle: "medium" }).format(BUILD_TIMESTAMP)}`,
|
||||
Client: `${RELEASE_CHANNEL} ~ ${client}`,
|
||||
|
@ -100,7 +79,6 @@ async function generateDebugInfoMessage() {
|
|||
const commonIssues = {
|
||||
"NoRPC enabled": Vencord.Plugins.isPluginEnabled("NoRPC"),
|
||||
"Activity Sharing disabled": tryOrElse(() => !ShowCurrentGame.getSetting(), false),
|
||||
"Equicord DevBuild": !IS_STANDALONE,
|
||||
"Has UserPlugins": Object.values(PluginMeta).some(m => m.userPlugin),
|
||||
"More than two weeks out of date": BUILD_TIMESTAMP < Date.now() - 12096e5,
|
||||
};
|
||||
|
@ -122,71 +100,34 @@ function generatePluginList() {
|
|||
const enabledStockPlugins = enabledPlugins.filter(p => !PluginMeta[p].userPlugin);
|
||||
const enabledUserPlugins = enabledPlugins.filter(p => PluginMeta[p].userPlugin);
|
||||
|
||||
|
||||
let content = `**Enabled Plugins (${enabledStockPlugins.length}):**\n${makeCodeblock(enabledStockPlugins.join(", "))}`;
|
||||
|
||||
if (enabledUserPlugins.length) {
|
||||
content += `**Enabled UserPlugins (${enabledUserPlugins.length}):**\n${makeCodeblock(enabledUserPlugins.join(", "))}`;
|
||||
}
|
||||
|
||||
if (enabledPlugins.length > 100 && !(isPluginDev(UserStore.getCurrentUser()?.id) || isEquicordPluginDev(UserStore.getCurrentUser()?.id))) {
|
||||
return Alerts.show({
|
||||
title: "You are attempting to get support!",
|
||||
body: <div>
|
||||
<style>
|
||||
{'[class*="backdrop_"][style*="backdrop-filter"]{backdrop-filter:blur(16px) brightness(0.25) !important;}'}
|
||||
</style>
|
||||
<img src="https://media.tenor.com/QtGqjwBpRzwAAAAi/wumpus-dancing.gif" />
|
||||
<Forms.FormText>Before you ask for help,</Forms.FormText>
|
||||
<Forms.FormText>We do not handle support for users who use 100+ plugins</Forms.FormText>
|
||||
<Forms.FormText>issue could be plugin confliction</Forms.FormText>
|
||||
<Forms.FormText>try removing some plugins and see if it fixes!</Forms.FormText>
|
||||
</div>,
|
||||
cancelText: "Okay continue"
|
||||
});
|
||||
}
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
const checkForUpdatesOnce = onlyOnce(checkForUpdates);
|
||||
|
||||
const settings = definePluginSettings({}).withPrivateSettings<{
|
||||
dismissedDevBuildWarning?: boolean;
|
||||
}>();
|
||||
|
||||
let clicked = false;
|
||||
const settings = definePluginSettings({});
|
||||
|
||||
export default definePlugin({
|
||||
name: "SupportHelper",
|
||||
required: true,
|
||||
description: "Helps us provide support to you",
|
||||
authors: [Devs.Ven],
|
||||
dependencies: ["UserSettingsAPI"],
|
||||
|
||||
settings,
|
||||
|
||||
patches: [{
|
||||
find: "#{intl::BEGINNING_DM}",
|
||||
replacement: {
|
||||
match: /#{intl::BEGINNING_DM},{.+?}\),(?=.{0,300}(\i)\.isMultiUserDM)/,
|
||||
replace: "$& $self.renderContributorDmWarningCard({ channel: $1 }),"
|
||||
}
|
||||
}],
|
||||
required: true,
|
||||
dependencies: ["UserSettingDefinitions"],
|
||||
|
||||
commands: [
|
||||
{
|
||||
name: "equicord-debug",
|
||||
description: "Send Equicord debug info",
|
||||
// @ts-ignore
|
||||
predicate: ctx => isPluginDev(UserStore.getCurrentUser()?.id) || isEquicordPluginDev(UserStore.getCurrentUser()?.id) || GUILD_ID === ctx?.guild?.id,
|
||||
name: "ryncord-debug",
|
||||
description: "Send ryncord debug info",
|
||||
execute: async () => ({ content: await generateDebugInfoMessage() })
|
||||
},
|
||||
{
|
||||
name: "equicord-plugins",
|
||||
description: "Send Equicord plugin list",
|
||||
// @ts-ignore
|
||||
predicate: ctx => isPluginDev(UserStore.getCurrentUser()?.id) || isEquicordPluginDev(UserStore.getCurrentUser()?.id) || GUILD_ID === ctx?.guild?.id,
|
||||
name: "ryncord-plugins",
|
||||
description: "Send ryncord plugin list",
|
||||
execute: () => {
|
||||
const pluginList = generatePluginList();
|
||||
return { content: typeof pluginList === "string" ? pluginList : "Unable to generate plugin list." };
|
||||
|
@ -195,100 +136,22 @@ export default definePlugin({
|
|||
],
|
||||
|
||||
flux: {
|
||||
async CHANNEL_SELECT({ channelId }) {
|
||||
const isSupportChannel = channelId === SUPPORT_CHANNEL_ID;
|
||||
if (!isSupportChannel) return;
|
||||
|
||||
const selfId = UserStore.getCurrentUser()?.id;
|
||||
if (!selfId || isPluginDev(selfId) || isEquicordPluginDev(selfId)) return;
|
||||
if (channelId === VC_SUPPORT_CHANNEL_ID && Vencord.Plugins.isPluginEnabled("VCSupport") && !clicked) {
|
||||
clicked = true;
|
||||
return Alerts.show({
|
||||
title: "You are entering the support channel!",
|
||||
body: <div>
|
||||
<style>
|
||||
{'[class*="backdrop_"][style*="backdrop-filter"]{backdrop-filter:blur(16px) brightness(0.25) !important;}'}
|
||||
</style>
|
||||
<img src="https://media.tenor.com/QtGqjwBpRzwAAAAi/wumpus-dancing.gif" />
|
||||
<Forms.FormText>Before you ask for help,</Forms.FormText>
|
||||
<Forms.FormText>Check for updates and if this</Forms.FormText>
|
||||
<Forms.FormText>issue could be caused by Equicord!</Forms.FormText>
|
||||
</div>,
|
||||
confirmText: "Go to Equicord Support",
|
||||
cancelText: "Okay continue",
|
||||
onConfirm: () => VencordNative.native.openExternal("https://discord.gg/5Xh2W87egW"),
|
||||
});
|
||||
}
|
||||
|
||||
async CHANNEL_SELECT() {
|
||||
if (!IS_UPDATER_DISABLED) {
|
||||
await checkForUpdatesOnce().catch(() => { });
|
||||
|
||||
if (isOutdated) {
|
||||
return Alerts.show({
|
||||
title: "Hold on!",
|
||||
body: <div>
|
||||
<Forms.FormText>You are using an outdated version of Equicord! Chances are, your issue is already fixed.</Forms.FormText>
|
||||
<Forms.FormText className={Margins.top8}>
|
||||
Please first update before asking for support!
|
||||
</Forms.FormText>
|
||||
</div>,
|
||||
onCancel: () => openUpdaterModal!(),
|
||||
cancelText: "View Updates",
|
||||
confirmText: "Update & Restart Now",
|
||||
onConfirm: forceUpdate,
|
||||
secondaryConfirmText: "I know what I'm doing or I can't update"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// @ts-ignore outdated type
|
||||
const roles = GuildMemberStore.getSelfMember(VC_GUILD_ID)?.roles || GuildMemberStore.getSelfMember(GUILD_ID)?.roles;
|
||||
if (!roles || TrustedRolesIds.some(id => roles.includes(id))) return;
|
||||
|
||||
if (!IS_WEB && IS_UPDATER_DISABLED) {
|
||||
return Alerts.show({
|
||||
title: "Hold on!",
|
||||
body: <div>
|
||||
<Forms.FormText>You are using an externally updated Equicord version, the ability to help you here may be limited.</Forms.FormText>
|
||||
<Forms.FormText className={Margins.top8}>
|
||||
Please join the <Link href="https://discord.gg/5Xh2W87egW">Equicord Server</Link> for support,
|
||||
or if this issue persists on Vencord, continue on.
|
||||
</Forms.FormText>
|
||||
</div>
|
||||
});
|
||||
}
|
||||
|
||||
if (!IS_STANDALONE && !settings.store.dismissedDevBuildWarning) {
|
||||
return Alerts.show({
|
||||
title: "Hold on!",
|
||||
body: <div>
|
||||
<Forms.FormText>You are using a custom build of Equicord, which we do not provide support for!</Forms.FormText>
|
||||
|
||||
<Forms.FormText className={Margins.top8}>
|
||||
We only provide support for <Link href="https://github.com/Rayanzay/ryncord">official builds</Link>.
|
||||
Either <Link href="https://github.com/Rayanzay/rynstaller">switch to an official build</Link> or figure your issue out yourself.
|
||||
</Forms.FormText>
|
||||
|
||||
<Text variant="text-md/bold" className={Margins.top8}>You will be banned from receiving support if you ignore this rule.</Text>
|
||||
</div>,
|
||||
confirmText: "Understood",
|
||||
secondaryConfirmText: "Don't show again",
|
||||
onConfirmSecondary: () => settings.store.dismissedDevBuildWarning = true
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
renderMessageAccessory(props) {
|
||||
const buttons = [] as JSX.Element[];
|
||||
renderMessageAccessory(props): ReactElement | null {
|
||||
const buttons = [] as ReactElement[];
|
||||
|
||||
const equicordSupport = GuildMemberStore.getMember(GUILD_ID, props.message.author.id)?.roles?.includes(EQUCORD_HELPERS);
|
||||
|
||||
const shouldAddUpdateButton =
|
||||
!IS_UPDATER_DISABLED
|
||||
&& (
|
||||
(props.channel.id === SUPPORT_CHANNEL_ID && equicordSupport)
|
||||
)
|
||||
&& props.channel.id === SUPPORT_CHANNEL_ID
|
||||
&& equicordSupport
|
||||
&& props.message.content?.includes("update");
|
||||
|
||||
if (shouldAddUpdateButton) {
|
||||
|
@ -303,7 +166,7 @@ export default definePlugin({
|
|||
else
|
||||
showToast("Already up to date!", Toasts.Type.MESSAGE);
|
||||
} catch (e) {
|
||||
new Logger(this.name).error("Error while updating:", e);
|
||||
new Logger("SupportHelper").error("Error while updating:", e);
|
||||
showToast("Failed to update :(", Toasts.Type.FAILURE);
|
||||
}
|
||||
}}
|
||||
|
@ -314,13 +177,13 @@ export default definePlugin({
|
|||
}
|
||||
|
||||
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")) {
|
||||
if (props.message.content.includes("/ryncord-debug") || props.message.content.includes("/ryncord-plugins")) {
|
||||
buttons.push(
|
||||
<Button
|
||||
key="vc-dbg"
|
||||
onClick={async () => sendMessage(props.channel.id, { content: await generateDebugInfoMessage() })}
|
||||
>
|
||||
Run /equicord-debug
|
||||
Run /ryncord-debug
|
||||
</Button>,
|
||||
<Button
|
||||
key="vc-plg-list"
|
||||
|
@ -331,51 +194,12 @@ export default definePlugin({
|
|||
}
|
||||
}}
|
||||
>
|
||||
Run /equicord-plugins
|
||||
Run /ryncord-plugins
|
||||
</Button>
|
||||
);
|
||||
}
|
||||
|
||||
if (equicordSupport) {
|
||||
const match = CodeBlockRe.exec(props.message.content || props.message.embeds[0]?.rawDescription || "");
|
||||
if (match) {
|
||||
buttons.push(
|
||||
<Button
|
||||
key="vc-run-snippet"
|
||||
onClick={async () => {
|
||||
try {
|
||||
await AsyncFunction(match[1])();
|
||||
showToast("Success!", Toasts.Type.SUCCESS);
|
||||
} catch (e) {
|
||||
new Logger(this.name).error("Error while running snippet:", e);
|
||||
showToast("Failed to run snippet :(", Toasts.Type.FAILURE);
|
||||
}
|
||||
}}
|
||||
>
|
||||
Run Snippet
|
||||
</Button>
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return buttons.length
|
||||
? <Flex>{buttons}</Flex>
|
||||
: null;
|
||||
},
|
||||
|
||||
renderContributorDmWarningCard: ErrorBoundary.wrap(({ channel }) => {
|
||||
const userId = channel.getRecipientId();
|
||||
if (!isPluginDev(userId) || !isEquicordPluginDev(userId)) return null;
|
||||
if (RelationshipStore.isFriend(userId) || isPluginDev(UserStore.getCurrentUser()?.id) || isEquicordPluginDev(UserStore.getCurrentUser()?.id)) return null;
|
||||
|
||||
return (
|
||||
<Card className={`vc-plugins-restart-card ${Margins.top8}`}>
|
||||
Please do not private message plugin developers for support!
|
||||
<br />
|
||||
Instead, use the support channel: {Parser.parse("https://discord.com/channels/1173279886065029291/1173342942858055721")}
|
||||
{!ChannelStore.getChannel(SUPPORT_CHANNEL_ID) && " (Click the link to join)"}
|
||||
</Card>
|
||||
);
|
||||
}, { noop: true }),
|
||||
return buttons.length ? <div className={Margins.top8}>{buttons}</div> : null;
|
||||
}
|
||||
});
|
||||
|
|
|
@ -29,7 +29,7 @@ export const EQUIBOP_CONTRIB_ROLE_ID = "1287079931645263968";
|
|||
export const VENCORD_CONTRIB_ROLE_ID = "1173343399470964856";
|
||||
|
||||
// Vencord
|
||||
export const VC_SUPPORT_CHANNEL_ID = "1026515880080842772";
|
||||
export const VC_SUPPORT_CHANNEL_ID = "1224645211528105994";
|
||||
export const VC_GUILD_ID = "1015060230222131221";
|
||||
export const VENBOT_USER_ID = "1017176847865352332";
|
||||
export const VC_DONOR_ROLE_ID = "1042507929485586532";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue