diff --git a/README.md b/README.md
index 7f3d6d2c..c34858a4 100644
--- a/README.md
+++ b/README.md
@@ -121,6 +121,7 @@ You can join our [discord server](https://discord.gg/5Xh2W87egW) for commits, ch
- SekaiStickers by MaiKokain
- ServerSearch by camila314
- ShowBadgesInChat by Inbestigator & KrystalSkull
+- Signature by KrystalSkull
- SidebarChat by Joona
- Slap by Korbo
- SoundBoardLogger by Moxxie, fres, echo, maintained by thororen
diff --git a/src/components/Icons.tsx b/src/components/Icons.tsx
index 225f2f07..99ae3903 100644
--- a/src/components/Icons.tsx
+++ b/src/components/Icons.tsx
@@ -18,7 +18,7 @@
import "./iconStyles.css";
-import { getIntlMessage, getTheme, Theme } from "@utils/discord";
+import { getIntlMessage } from "@utils/discord";
import { classes } from "@utils/misc";
import type { PropsWithChildren } from "react";
@@ -122,8 +122,8 @@ export function InfoIcon(props: IconProps) {
>
);
@@ -211,9 +211,10 @@ export function CogWheel(props: IconProps) {
viewBox="0 0 24 24"
>
);
@@ -462,23 +463,30 @@ export function PencilIcon(props: IconProps) {
);
}
-const WebsiteIconDark = "/assets/e1e96d89e192de1997f73730db26e94f.svg";
-const WebsiteIconLight = "/assets/730f58bcfd5a57a5e22460c445a0c6cf.svg";
-const GithubIconLight = "/assets/3ff98ad75ac94fa883af5ed62d17c459.svg";
-const GithubIconDark = "/assets/6a853b4c87fce386cbfef4a2efbacb09.svg";
-
-export function GithubIcon(props: ImageProps) {
- const src = getTheme() === Theme.Light
- ? GithubIconLight
- : GithubIconDark;
-
- return ;
+export function GithubIcon(props: IconProps) {
+ return (
+
+
+
+ );
}
-export function WebsiteIcon(props: ImageProps) {
- const src = getTheme() === Theme.Light
- ? WebsiteIconLight
- : WebsiteIconDark;
-
- return ;
+export function WebsiteIcon(props: IconProps) {
+ return (
+
+
+
+ );
}
diff --git a/src/components/PluginSettings/LinkIconButton.tsx b/src/components/PluginSettings/LinkIconButton.tsx
index dd840f52..4dae0e1e 100644
--- a/src/components/PluginSettings/LinkIconButton.tsx
+++ b/src/components/PluginSettings/LinkIconButton.tsx
@@ -6,16 +6,19 @@
import "./LinkIconButton.css";
+import { getTheme, Theme } from "@utils/discord";
import { MaskedLink, Tooltip } from "@webpack/common";
import { GithubIcon, WebsiteIcon } from "..";
export function GithubLinkIcon() {
- return ;
+ const theme = getTheme() === Theme.Light ? "#000000" : "#FFFFFF";
+ return ;
}
export function WebsiteLinkIcon() {
- return ;
+ const theme = getTheme() === Theme.Light ? "#000000" : "#FFFFFF";
+ return ;
}
interface Props {
diff --git a/src/equicordplugins/remixMe/index.tsx b/src/equicordplugins/remixMe/index.tsx
index 7df5cf97..473eed84 100644
--- a/src/equicordplugins/remixMe/index.tsx
+++ b/src/equicordplugins/remixMe/index.tsx
@@ -6,8 +6,7 @@
import "./style.css";
-import { MessageEvents } from "@api/index";
-import { MessageExtra, MessageObject } from "@api/MessageEvents";
+import { addPreSendListener, MessageExtra, MessageObject, removePreSendListener } from "@api/MessageEvents";
import { EquicordDevs } from "@utils/constants";
import definePlugin from "@utils/types";
import { Forms } from "@webpack/common";
@@ -23,6 +22,6 @@ export default definePlugin({
We can't guarantee this plugin won't get you warned or banned.
>,
- start: () => MessageEvents.addPreSendListener(handleMessage),
- stop: () => MessageEvents.removePreSendListener(handleMessage)
+ start: () => addPreSendListener(handleMessage),
+ stop: () => removePreSendListener(handleMessage)
});
diff --git a/src/equicordplugins/signature/index.tsx b/src/equicordplugins/signature/index.tsx
new file mode 100644
index 00000000..5536ae69
--- /dev/null
+++ b/src/equicordplugins/signature/index.tsx
@@ -0,0 +1,149 @@
+/*
+ * Vencord, a Discord client mod
+ * Copyright (c) 2024 Vendicated and contributors
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+import { addChatBarButton, ChatBarButton, removeChatBarButton } from "@api/ChatButtons";
+import { ApplicationCommandInputType, ApplicationCommandOptionType, findOption, sendBotMessage } from "@api/Commands";
+import { findGroupChildrenByChildId, NavContextMenuPatchCallback } from "@api/ContextMenu";
+import { addPreSendListener, removePreSendListener } from "@api/MessageEvents";
+import { definePluginSettings, migratePluginSettings } from "@api/Settings";
+import { EquicordDevs } from "@utils/constants";
+import definePlugin, { OptionType } from "@utils/types";
+import { Menu, React } from "@webpack/common";
+
+// Big thank you too slientTyping
+
+const settings = definePluginSettings(
+ {
+ name: {
+ type: OptionType.STRING,
+ description: "The signature that will be added to the end of your messages",
+ default: "a chronic discord user"
+ },
+ showIcon: {
+ type: OptionType.BOOLEAN,
+ default: true,
+ description: "Show an icon for toggling the plugin in the chat bar",
+ restartNeeded: true,
+ },
+ contextMenu: {
+ type: OptionType.BOOLEAN,
+ description: "Add option to toggle the functionality in the chat input context menu",
+ default: true
+ },
+ isEnabled: {
+ type: OptionType.BOOLEAN,
+ description: "Toggle functionality",
+ default: true,
+ },
+ });
+
+const SignatureToggle: ChatBarButton = ({ isMainChat }) => {
+ const { isEnabled, showIcon } = settings.use(["isEnabled", "showIcon"]);
+ const toggle = () => settings.store.isEnabled = !settings.store.isEnabled;
+
+ if (!isMainChat || !showIcon) return null;
+
+ return (
+
+
+
+ );
+};
+
+const handleMessage = ((channelId, msg) => {
+ if (!settings.store.isEnabled) {
+ msg.content = msg.content;
+ } else {
+ msg.content = textProcessing(msg.content);
+ }
+});
+
+const ChatBarContextCheckbox: NavContextMenuPatchCallback = children => {
+ const { isEnabled, contextMenu } = settings.use(["isEnabled", "contextMenu"]);
+ if (!contextMenu) return;
+
+ const group = findGroupChildrenByChildId("submit-button", children);
+
+ if (!group) return;
+
+ const idx = group.findIndex(c => c?.props?.id === "submit-button");
+
+ group.splice(idx + 1, 0,
+
settings.store.isEnabled = !settings.store.isEnabled}
+ />
+ );
+};
+
+migratePluginSettings("Signature", "SentVia");
+
+export default definePlugin({
+ name: "Signature",
+ description: "Automated fingerprint/end text",
+ authors: [EquicordDevs.KrystalSkull],
+ dependencies: ["MessageEventsAPI", "ChatInputButtonAPI"],
+
+ start: () => {
+ if (settings.store.isEnabled) true;
+ addChatBarButton("Signature", SignatureToggle);
+ addPreSendListener(handleMessage);
+ },
+ stop: () => {
+ if (settings.store.isEnabled) false;
+ removeChatBarButton("Signature");
+ removePreSendListener(handleMessage);
+
+ },
+
+ settings,
+
+ contextMenus: {
+ "textarea-context": ChatBarContextCheckbox
+ },
+
+ commands: [{
+ name: "Signature",
+ description: "Toggle your signature",
+ inputType: ApplicationCommandInputType.BUILT_IN,
+ options: [
+ {
+ name: "value",
+ description: "Toggle your signature (default is toggle)",
+ required: false,
+ type: ApplicationCommandOptionType.BOOLEAN,
+ },
+ ],
+ execute: async (args, ctx) => {
+ settings.store.isEnabled = !!findOption(args, "value", !settings.store.isEnabled);
+ sendBotMessage(ctx.channel.id, {
+ content: settings.store.isEnabled ? "Signature enabled!" : "Signature disabled!",
+ });
+ },
+ }],
+});
+
+
+// text processing injection processor
+function textProcessing(input: string) {
+ return `${input}\n> ${settings.store.name}`;
+}
+
+
diff --git a/src/equicordplugins/userpfp/index.tsx b/src/equicordplugins/userpfp/index.tsx
index 99613667..9f0ebccf 100644
--- a/src/equicordplugins/userpfp/index.tsx
+++ b/src/equicordplugins/userpfp/index.tsx
@@ -34,7 +34,7 @@ const settings = definePluginSettings({
},
{
label: "UserPFP Backup DB",
- value: "https://userpfp.thororen.com/UserPFP/source/data.json"
+ value: "https://userpfp.thororen.com/data.json"
}
]
}
diff --git a/src/plugins/clientTheme/index.tsx b/src/plugins/clientTheme/index.tsx
index 7e648427..4c1668aa 100644
--- a/src/plugins/clientTheme/index.tsx
+++ b/src/plugins/clientTheme/index.tsx
@@ -110,7 +110,7 @@ const settings = definePluginSettings({
export default definePlugin({
name: "ClientTheme",
- authors: [Devs.F53, Devs.Nuckyz],
+ authors: [Devs.Nuckyz],
description: "Recreation of the old client theme experiment. Add a color to your Discord client theme",
settings,
diff --git a/src/plugins/consoleJanitor/index.ts b/src/plugins/consoleJanitor/index.ts
index 6ac09508..4b3193ed 100644
--- a/src/plugins/consoleJanitor/index.ts
+++ b/src/plugins/consoleJanitor/index.ts
@@ -137,27 +137,6 @@ export default definePlugin({
replace: ""
}
},
- // Zustand section
- {
- find: "[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.",
- replacement: [
- {
- match: /&&console\.warn\("\[DEPRECATED\] Passing a vanilla store will be unsupported in a future version\. Instead use `import { useStore } from 'zustand'`\."\)/,
- replace: ""
- },
- {
- match: /console\.warn\("\[DEPRECATED\] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`\. They can be imported from 'zustand\/traditional'\. https:\/\/github\.com\/pmndrs\/zustand\/discussions\/1937"\),/,
- replace: ""
- }
- ]
- },
- {
- find: "[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead.",
- replacement: {
- match: /console\.warn\("\[DEPRECATED\] `getStorage`, `serialize` and `deserialize` options are deprecated\. Use `storage` option instead\."\),/,
- replace: ""
- }
- },
// Patches discords generic logger function
{
find: "Σ:",
diff --git a/src/plugins/emoteCloner/index.tsx b/src/plugins/emoteCloner/index.tsx
index 6dd3eb30..1b26e2f0 100644
--- a/src/plugins/emoteCloner/index.tsx
+++ b/src/plugins/emoteCloner/index.tsx
@@ -310,7 +310,8 @@ function buildMenuItem(type: "Emoji" | "Sticker", fetchData: () => Promisable {
diff --git a/src/plugins/roleColorEverywhere/index.tsx b/src/plugins/roleColorEverywhere/index.tsx
index 090c35d3..7b811943 100644
--- a/src/plugins/roleColorEverywhere/index.tsx
+++ b/src/plugins/roleColorEverywhere/index.tsx
@@ -156,7 +156,7 @@ export default definePlugin({
find: "#{intl::MESSAGE_EDITED}",
replacement: {
match: /(?<=isUnsupported\]:(\i)\.isUnsupported\}\),)(?=children:\[)/,
- replace: "style:$self.useMessageColorStyle($1),"
+ replace: "style:$self.useMessageColorsStyle($1),"
},
predicate: () => settings.store.colorChatMessages
}
@@ -188,13 +188,19 @@ export default definePlugin({
};
},
- useMessageColor(message: any) {
+ useMessageColorsStyle(message: any) {
try {
const { messageSaturation } = settings.use(["messageSaturation"]);
const author = useMessageAuthor(message);
if (author.colorString != null && messageSaturation !== 0) {
- return `color-mix(in oklab, ${author.colorString} ${messageSaturation}%, var(--text-normal))`;
+ const value = `color-mix(in oklab, ${author.colorString} ${messageSaturation}%, var({DEFAULT}))`;
+
+ return {
+ color: value.replace("{DEFAULT}", "--text-normal"),
+ "--header-primary": value.replace("{DEFAULT}", "--header-primary"),
+ "--text-muted": value.replace("{DEFAULT}", "--text-muted")
+ };
}
} catch (e) {
new Logger("RoleColorEverywhere").error("Failed to get message color", e);
@@ -203,14 +209,6 @@ export default definePlugin({
return null;
},
- useMessageColorStyle(message: any) {
- const color = this.useMessageColor(message);
-
- return color && {
- color
- };
- },
-
RoleGroupColor: ErrorBoundary.wrap(({ id, count, title, guildId, label }: { id: string; count: number; title: string; guildId: string; label: string; }) => {
const role = GuildStore.getRole(guildId, id);
diff --git a/src/plugins/showHiddenChannels/index.tsx b/src/plugins/showHiddenChannels/index.tsx
index ba367542..6b67aee8 100644
--- a/src/plugins/showHiddenChannels/index.tsx
+++ b/src/plugins/showHiddenChannels/index.tsx
@@ -103,7 +103,7 @@ export default definePlugin({
replacement: [
{
// Do not show confirmation to join a voice channel when already connected to another if clicking on a hidden voice channel
- match: /(?<=getBlockedUsersForVoiceChannel\((\i)\.id\);return\()/,
+ match: /(?<=getIgnoredUsersForVoiceChannel\((\i)\.id\);return\()/,
replace: (_, channel) => `!$self.isHiddenChannel(${channel})&&`
},
{
diff --git a/src/utils/constants.ts b/src/utils/constants.ts
index 851b5810..83a41713 100644
--- a/src/utils/constants.ts
+++ b/src/utils/constants.ts
@@ -272,10 +272,6 @@ export const Devs = /* #__PURE__*/ Object.freeze({
name: "arHSM",
id: 841509053422632990n
},
- F53: {
- name: "Cassie (Code)",
- id: 280411966126948353n
- },
AutumnVN: {
name: "AutumnVN",
id: 393694671383166998n
diff --git a/src/webpack/common/utils.ts b/src/webpack/common/utils.ts
index e6b915fe..af0072ba 100644
--- a/src/webpack/common/utils.ts
+++ b/src/webpack/common/utils.ts
@@ -165,8 +165,8 @@ waitFor(["open", "saveAccountChanges"], m => SettingsRouter = m);
export const PermissionsBits: t.PermissionsBits = findLazy(m => typeof m.ADMINISTRATOR === "bigint");
-export const { zustandCreate } = mapMangledModuleLazy(["useSyncExternalStoreWithSelector:", "Object.assign", /(\i)\?(\i)\(\1\):\2/], {
- zustandCreate: filters.byCode(/(\i)\?(\i)\(\1\):\2/)
+export const { zustandCreate } = mapMangledModuleLazy(["useSyncExternalStoreWithSelector:", "Object.assign"], {
+ zustandCreate: filters.byCode(/=>(\i)\?\i\(\1/)
});
export const { zustandPersist } = mapMangledModuleLazy(".onRehydrateStorage)?", {