aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/_api
diff options
context:
space:
mode:
authorV <vendicated@riseup.net>2023-06-13 02:36:25 +0200
committerV <vendicated@riseup.net>2023-06-13 03:45:05 +0200
commit07a9adbce25e42dcd4d1eb25ee011328d0543304 (patch)
treec4ea6230e57cc3a77adc53c25efb91ea148a6dea /src/plugins/_api
parent42d8211871d84e2650f7c762c66e2ee2e6c58968 (diff)
downloadVencord-07a9adbce25e42dcd4d1eb25ee011328d0543304.tar.gz
Vencord-07a9adbce25e42dcd4d1eb25ee011328d0543304.tar.bz2
Vencord-07a9adbce25e42dcd4d1eb25ee011328d0543304.zip
🧹🧹
Diffstat (limited to 'src/plugins/_api')
-rw-r--r--src/plugins/_api/badges.tsx193
-rw-r--r--src/plugins/_api/commands.ts61
-rw-r--r--src/plugins/_api/contextMenu.ts45
-rw-r--r--src/plugins/_api/memberListDecorators.ts42
-rw-r--r--src/plugins/_api/messageAccessories.ts36
-rw-r--r--src/plugins/_api/messageDecorations.ts35
-rw-r--r--src/plugins/_api/messageEvents.ts59
-rw-r--r--src/plugins/_api/messagePopover.ts38
-rw-r--r--src/plugins/_api/notices.ts42
-rw-r--r--src/plugins/_api/serverList.ts42
-rw-r--r--src/plugins/_api/settingsStore.ts38
11 files changed, 631 insertions, 0 deletions
diff --git a/src/plugins/_api/badges.tsx b/src/plugins/_api/badges.tsx
new file mode 100644
index 0000000..5f44d98
--- /dev/null
+++ b/src/plugins/_api/badges.tsx
@@ -0,0 +1,193 @@
+/*
+ * Vencord, a modification for Discord's desktop app
+ * Copyright (c) 2022 Vendicated and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import { BadgePosition, BadgeUserArgs, ProfileBadge } from "@api/Badges";
+import DonateButton from "@components/DonateButton";
+import ErrorBoundary from "@components/ErrorBoundary";
+import { Flex } from "@components/Flex";
+import { Heart } from "@components/Heart";
+import { Devs } from "@utils/constants";
+import { Logger } from "@utils/Logger";
+import { Margins } from "@utils/margins";
+import { isPluginDev } from "@utils/misc";
+import { closeModal, Modals, openModal } from "@utils/modal";
+import definePlugin from "@utils/types";
+import { Forms, Toasts } from "@webpack/common";
+
+const CONTRIBUTOR_BADGE = "https://cdn.discordapp.com/attachments/1033680203433660458/1092089947126780035/favicon.png";
+
+const ContributorBadge: ProfileBadge = {
+ description: "Vencord Contributor",
+ image: CONTRIBUTOR_BADGE,
+ position: BadgePosition.START,
+ props: {
+ style: {
+ borderRadius: "50%",
+ transform: "scale(0.9)" // The image is a bit too big compared to default badges
+ }
+ },
+ shouldShow: ({ user }) => isPluginDev(user.id),
+ link: "https://github.com/Vendicated/Vencord"
+};
+
+let DonorBadges = {} as Record<string, Pick<ProfileBadge, "image" | "description">[]>;
+
+async function loadBadges(noCache = false) {
+ DonorBadges = {};
+
+ const init = {} as RequestInit;
+ if (noCache)
+ init.cache = "no-cache";
+
+ const badges = await fetch("https://gist.githubusercontent.com/Vendicated/51a3dd775f6920429ec6e9b735ca7f01/raw/badges.csv", init)
+ .then(r => r.text());
+
+ const lines = badges.trim().split("\n");
+ if (lines.shift() !== "id,tooltip,image") {
+ new Logger("BadgeAPI").error("Invalid badges.csv file!");
+ return;
+ }
+
+ for (const line of lines) {
+ const [id, description, image] = line.split(",");
+ (DonorBadges[id] ??= []).push({ image, description });
+ }
+}
+
+export default definePlugin({
+ name: "BadgeAPI",
+ description: "API to add badges to users.",
+ authors: [Devs.Megu, Devs.Ven, Devs.TheSun],
+ required: true,
+ patches: [
+ /* Patch the badge list component on user profiles */
+ {
+ find: "Messages.PROFILE_USER_BADGES,role:",
+ replacement: [
+ {
+ match: /(?<=(\i)\.isTryItOutFlow,)(.{0,300})null==\i\?void 0:(\i)\.getBadges\(\)/,
+ replace: (_, props, restCode, badgesMod) => `vencordProps=${props},${restCode}Vencord.Api.Badges._getBadges(vencordProps).concat(${badgesMod}?.getBadges()??[])`,
+ },
+ {
+ // alt: "", aria-hidden: false, src: originalSrc
+ match: /alt:" ","aria-hidden":!0,src:(?=(\i)\.src)/g,
+ // ...badge.props, ..., src: badge.image ?? ...
+ replace: "...$1.props,$& $1.image??"
+ },
+ {
+ match: /children:function(?<=(\i)\.(?:tooltip|description),spacing:\d.+?)/g,
+ replace: "children:$1.component ? () => $self.renderBadgeComponent($1) : function"
+ },
+ {
+ match: /onClick:function(?=.{0,200}href:(\i)\.link)/,
+ replace: "onClick:$1.onClick??function"
+ }
+ ]
+ }
+ ],
+
+ toolboxActions: {
+ async "Refetch Badges"() {
+ await loadBadges(true);
+ Toasts.show({
+ id: Toasts.genId(),
+ message: "Successfully refetched badges!",
+ type: Toasts.Type.SUCCESS
+ });
+ }
+ },
+
+ async start() {
+ Vencord.Api.Badges.addBadge(ContributorBadge);
+ await loadBadges();
+ },
+
+ renderBadgeComponent: ErrorBoundary.wrap((badge: ProfileBadge & BadgeUserArgs) => {
+ const Component = badge.component!;
+ return <Component {...badge} />;
+ }, { noop: true }),
+
+
+ getDonorBadges(userId: string) {
+ return DonorBadges[userId]?.map(badge => ({
+ ...badge,
+ position: BadgePosition.START,
+ props: {
+ style: {
+ borderRadius: "50%",
+ transform: "scale(0.9)" // The image is a bit too big compared to default badges
+ }
+ },
+ onClick() {
+ const modalKey = openModal(props => (
+ <ErrorBoundary noop onError={() => {
+ closeModal(modalKey);
+ VencordNative.native.openExternal("https://github.com/sponsors/Vendicated");
+ }}>
+ <Modals.ModalRoot {...props}>
+ <Modals.ModalHeader>
+ <Flex style={{ width: "100%", justifyContent: "center" }}>
+ <Forms.FormTitle
+ tag="h2"
+ style={{
+ width: "100%",
+ textAlign: "center",
+ margin: 0
+ }}
+ >
+ <Heart />
+ Vencord Donor
+ </Forms.FormTitle>
+ </Flex>
+ </Modals.ModalHeader>
+ <Modals.ModalContent>
+ <Flex>
+ <img
+ role="presentation"
+ src="https://cdn.discordapp.com/emojis/1026533070955872337.png"
+ alt=""
+ style={{ margin: "auto" }}
+ />
+ <img
+ role="presentation"
+ src="https://cdn.discordapp.com/emojis/1026533090627174460.png"
+ alt=""
+ style={{ margin: "auto" }}
+ />
+ </Flex>
+ <div style={{ padding: "1em" }}>
+ <Forms.FormText>
+ This Badge is a special perk for Vencord Donors
+ </Forms.FormText>
+ <Forms.FormText className={Margins.top20}>
+ Please consider supporting the development of Vencord by becoming a donor. It would mean a lot!!
+ </Forms.FormText>
+ </div>
+ </Modals.ModalContent>
+ <Modals.ModalFooter>
+ <Flex style={{ width: "100%", justifyContent: "center" }}>
+ <DonateButton />
+ </Flex>
+ </Modals.ModalFooter>
+ </Modals.ModalRoot>
+ </ErrorBoundary>
+ ));
+ },
+ }));
+ }
+});
diff --git a/src/plugins/_api/commands.ts b/src/plugins/_api/commands.ts
new file mode 100644
index 0000000..2197b30
--- /dev/null
+++ b/src/plugins/_api/commands.ts
@@ -0,0 +1,61 @@
+/*
+ * Vencord, a modification for Discord's desktop app
+ * Copyright (c) 2022 Vendicated and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import { Devs } from "@utils/constants";
+import definePlugin from "@utils/types";
+
+export default definePlugin({
+ name: "CommandsAPI",
+ authors: [Devs.Arjix],
+ description: "Api required by anything that uses commands",
+ patches: [
+ // obtain BUILT_IN_COMMANDS instance
+ {
+ find: '"giphy","tenor"',
+ replacement: [
+ {
+ // Matches BUILT_IN_COMMANDS. This is not exported so this is
+ // the only way. _init() just returns the same object to make the
+ // patch simpler
+
+ // textCommands = builtInCommands.filter(...)
+ match: /(?<=\w=)(\w)(\.filter\(.{0,30}giphy)/,
+ replace: "Vencord.Api.Commands._init($1)$2",
+ }
+ ],
+ },
+ // command error handling
+ {
+ find: "Unexpected value for option",
+ replacement: {
+ // return [2, cmd.execute(args, ctx)]
+ match: /,(.{1,2})\.execute\((.{1,2}),(.{1,2})\)]/,
+ replace: (_, cmd, args, ctx) => `,Vencord.Api.Commands._handleCommand(${cmd}, ${args}, ${ctx})]`
+ }
+ },
+ // Show plugin name instead of "Built-In"
+ {
+ find: ".source,children",
+ replacement: {
+ // ...children: p?.name
+ match: /(?<=:(.{1,3})\.displayDescription\}.{0,200}\.source,children:)[^}]+/,
+ replace: "$1.plugin||($&)"
+ }
+ }
+ ],
+});
diff --git a/src/plugins/_api/contextMenu.ts b/src/plugins/_api/contextMenu.ts
new file mode 100644
index 0000000..d04e0e6
--- /dev/null
+++ b/src/plugins/_api/contextMenu.ts
@@ -0,0 +1,45 @@
+/*
+ * Vencord, a modification for Discord's desktop app
+ * Copyright (c) 2022 Vendicated and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import { Devs } from "@utils/constants";
+import definePlugin from "@utils/types";
+
+export default definePlugin({
+ name: "ContextMenuAPI",
+ description: "API for adding/removing items to/from context menus.",
+ authors: [Devs.Nuckyz, Devs.Ven],
+ required: true,
+
+ patches: [
+ {
+ find: "♫ (つ。◕‿‿◕。)つ ♪",
+ replacement: {
+ match: /(?<=function \i\((\i)\){)(?=var \i,\i=\i\.navId)/,
+ replace: (_, props) => `Vencord.Api.ContextMenu._patchContextMenu(${props});`
+ }
+ },
+ {
+ find: ".Menu,{",
+ all: true,
+ replacement: {
+ match: /Menu,{(?<=\.jsxs?\)\(\i\.Menu,{)/g,
+ replace: "$&contextMenuApiArguments:typeof arguments!=='undefined'?arguments:[],"
+ }
+ }
+ ]
+});
diff --git a/src/plugins/_api/memberListDecorators.ts b/src/plugins/_api/memberListDecorators.ts
new file mode 100644
index 0000000..6b8cffa
--- /dev/null
+++ b/src/plugins/_api/memberListDecorators.ts
@@ -0,0 +1,42 @@
+/*
+ * Vencord, a modification for Discord's desktop app
+ * Copyright (c) 2022 Vendicated and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import { Devs } from "@utils/constants";
+import definePlugin from "@utils/types";
+
+export default definePlugin({
+ name: "MemberListDecoratorsAPI",
+ description: "API to add decorators to member list (both in servers and DMs)",
+ authors: [Devs.TheSun],
+ patches: [
+ {
+ find: "lostPermissionTooltipText,",
+ replacement: {
+ match: /Fragment,{children:\[(.{30,80})\]/,
+ replace: "Fragment,{children:Vencord.Api.MemberListDecorators.__addDecoratorsToList(this.props).concat($1)"
+ }
+ },
+ {
+ find: "PrivateChannel.renderAvatar",
+ replacement: {
+ match: /(subText:(.{1,2})\.renderSubtitle\(\).{1,50}decorators):(.{30,100}:null)/,
+ replace: "$1:Vencord.Api.MemberListDecorators.__addDecoratorsToList($2.props).concat($3)"
+ }
+ }
+ ],
+});
diff --git a/src/plugins/_api/messageAccessories.ts b/src/plugins/_api/messageAccessories.ts
new file mode 100644
index 0000000..5bb13cf
--- /dev/null
+++ b/src/plugins/_api/messageAccessories.ts
@@ -0,0 +1,36 @@
+/*
+ * Vencord, a modification for Discord's desktop app
+ * Copyright (c) 2022 Vendicated and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import { Devs } from "@utils/constants";
+import definePlugin from "@utils/types";
+
+export default definePlugin({
+ name: "MessageAccessoriesAPI",
+ description: "API to add message accessories.",
+ authors: [Devs.Cyn],
+ patches: [
+ {
+ find: ".Messages.REMOVE_ATTACHMENT_BODY",
+ replacement: {
+ match: /(.container\)?,children:)(\[[^\]]+\])(}\)\};return)/,
+ replace: (_, pre, accessories, post) =>
+ `${pre}Vencord.Api.MessageAccessories._modifyAccessories(${accessories},this.props)${post}`,
+ },
+ },
+ ],
+});
diff --git a/src/plugins/_api/messageDecorations.ts b/src/plugins/_api/messageDecorations.ts
new file mode 100644
index 0000000..a3b2518
--- /dev/null
+++ b/src/plugins/_api/messageDecorations.ts
@@ -0,0 +1,35 @@
+/*
+ * Vencord, a modification for Discord's desktop app
+ * Copyright (c) 2022 Vendicated and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import { Devs } from "@utils/constants";
+import definePlugin from "@utils/types";
+
+export default definePlugin({
+ name: "MessageDecorationsAPI",
+ description: "API to add decorations to messages",
+ authors: [Devs.TheSun],
+ patches: [
+ {
+ find: ".withMentionPrefix",
+ replacement: {
+ match: /(.roleDot.{10,50}{children:.{1,2})}\)/,
+ replace: "$1.concat(Vencord.Api.MessageDecorations.__addDecorationsToMessage(arguments[0]))})"
+ }
+ }
+ ],
+});
diff --git a/src/plugins/_api/messageEvents.ts b/src/plugins/_api/messageEvents.ts
new file mode 100644
index 0000000..fa46752
--- /dev/null
+++ b/src/plugins/_api/messageEvents.ts
@@ -0,0 +1,59 @@
+/*
+ * Vencord, a modification for Discord's desktop app
+ * Copyright (c) 2022 Vendicated and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import { Devs } from "@utils/constants";
+import definePlugin from "@utils/types";
+
+export default definePlugin({
+ name: "MessageEventsAPI",
+ description: "Api required by anything using message events.",
+ authors: [Devs.Arjix, Devs.hunt, Devs.Ven],
+ patches: [
+ {
+ find: '"MessageActionCreators"',
+ replacement: {
+ // editMessage: function (...) {
+ match: /\beditMessage:(function\(.+?\))\{/,
+ // editMessage: async function (...) { await handlePreEdit(...); ...
+ replace: "editMessage:async $1{await Vencord.Api.MessageEvents._handlePreEdit(...arguments);"
+ }
+ },
+ {
+ find: ".handleSendMessage=",
+ replacement: {
+ // props.chatInputType...then((function(isMessageValid)... var parsedMessage = b.c.parse(channel,... var replyOptions = f.g.getSendMessageOptionsForReply(pendingReply);
+ // Lookbehind: validateMessage)({openWarningPopout:..., type: i.props.chatInputType, content: t, stickers: r, ...}).then((function(isMessageValid)
+ match: /(props\.chatInputType.+?\.then\(\()(function.+?var (\i)=\i\.\i\.parse\((\i),.+?var (\i)=\i\.\i\.getSendMessageOptionsForReply\(\i\);)(?<=\)\(({.+?})\)\.then.+?)/,
+ // props.chatInputType...then((async function(isMessageValid)... var replyOptions = f.g.getSendMessageOptionsForReply(pendingReply); if(await Vencord.api...) return { shoudClear:true, shouldRefocus:true };
+ replace: (_, rest1, rest2, parsedMessage, channel, replyOptions, extra) => "" +
+ `${rest1}async ${rest2}` +
+ `if(await Vencord.Api.MessageEvents._handlePreSend(${channel}.id,${parsedMessage},${extra},${replyOptions}))` +
+ "return{shoudClear:true,shouldRefocus:true};"
+ }
+ },
+ {
+ find: '("interactionUsernameProfile',
+ replacement: {
+ match: /var \i=(\i)\.id,\i=(\i)\.id;return \i\.useCallback\(\(?function\((\i)\){/,
+ replace: (m, message, channel, event) =>
+ // the message param is shadowed by the event param, so need to alias them
+ `var _msg=${message},_chan=${channel};${m}Vencord.Api.MessageEvents._handleClick(_msg, _chan, ${event});`
+ }
+ }
+ ]
+});
diff --git a/src/plugins/_api/messagePopover.ts b/src/plugins/_api/messagePopover.ts
new file mode 100644
index 0000000..be4b639
--- /dev/null
+++ b/src/plugins/_api/messagePopover.ts
@@ -0,0 +1,38 @@
+/*
+ * Vencord, a modification for Discord's desktop app
+ * Copyright (c) 2022 Vendicated and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import { Devs } from "@utils/constants";
+import definePlugin from "@utils/types";
+
+export default definePlugin({
+ name: "MessagePopoverAPI",
+ description: "API to add buttons to message popovers.",
+ authors: [Devs.KingFish, Devs.Ven, Devs.Nuckyz],
+ patches: [{
+ find: "Messages.MESSAGE_UTILITIES_A11Y_LABEL",
+ replacement: {
+ // foo && !bar ? createElement(reactionStuffs)... createElement(blah,...makeElement(reply-other))
+ match: /\i&&!\i\?\(0,\i\.jsxs?\)\(.{0,200}renderEmojiPicker:.{0,500}\?(\i)\(\{key:"reply-other"/,
+ replace: (m, makeElement) => {
+ const msg = m.match(/message:(.{1,3}),/)?.[1];
+ if (!msg) throw new Error("Could not find message variable");
+ return `...Vencord.Api.MessagePopover._buildPopoverElements(${msg},${makeElement}),${m}`;
+ }
+ }
+ }],
+});
diff --git a/src/plugins/_api/notices.ts b/src/plugins/_api/notices.ts
new file mode 100644
index 0000000..af7cb15
--- /dev/null
+++ b/src/plugins/_api/notices.ts
@@ -0,0 +1,42 @@
+/*
+ * Vencord, a modification for Discord's desktop app
+ * Copyright (c) 2022 Vendicated and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import { Devs } from "@utils/constants";
+import definePlugin from "@utils/types";
+
+export default definePlugin({
+ name: "NoticesAPI",
+ description: "Fixes notices being automatically dismissed",
+ authors: [Devs.Ven],
+ required: true,
+ patches: [
+ {
+ find: 'displayName="NoticeStore"',
+ replacement: [
+ {
+ match: /(?=;\i=null;.{0,70}getPremiumSubscription)/g,
+ replace: ";if(Vencord.Api.Notices.currentNotice)return false"
+ },
+ {
+ match: /(?<=,NOTICE_DISMISS:function\(\i\){)(?=if\(null==(\i)\))/,
+ replace: (_, notice) => `if(${notice}.id=="VencordNotice")return(${notice}=null,Vencord.Api.Notices.nextNotice(),true);`
+ }
+ ]
+ }
+ ],
+});
diff --git a/src/plugins/_api/serverList.ts b/src/plugins/_api/serverList.ts
new file mode 100644
index 0000000..6585d38
--- /dev/null
+++ b/src/plugins/_api/serverList.ts
@@ -0,0 +1,42 @@
+/*
+ * Vencord, a modification for Discord's desktop app
+ * Copyright (c) 2022 Vendicated and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import { Devs } from "@utils/constants";
+import definePlugin from "@utils/types";
+
+export default definePlugin({
+ name: "ServerListAPI",
+ authors: [Devs.kemo],
+ description: "Api required for plugins that modify the server list",
+ patches: [
+ {
+ find: "Messages.DISCODO_DISABLED",
+ replacement: {
+ match: /(Messages\.DISCODO_DISABLED\);return)(.*?homeIcon.*?)(\}function)/,
+ replace: "$1[$2].concat(Vencord.Api.ServerList.renderAll(Vencord.Api.ServerList.ServerListRenderPosition.Above))$3"
+ }
+ },
+ {
+ find: "Messages.SERVERS,children",
+ replacement: {
+ match: /(Messages\.SERVERS,children:)(.+?default:return null\}\}\)\))/,
+ replace: "$1Vencord.Api.ServerList.renderAll(Vencord.Api.ServerList.ServerListRenderPosition.In).concat($2)"
+ }
+ }
+ ]
+});
diff --git a/src/plugins/_api/settingsStore.ts b/src/plugins/_api/settingsStore.ts
new file mode 100644
index 0000000..ca1dc65
--- /dev/null
+++ b/src/plugins/_api/settingsStore.ts
@@ -0,0 +1,38 @@
+/*
+ * Vencord, a modification for Discord's desktop app
+ * Copyright (c) 2022 Vendicated and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import { Devs } from "@utils/constants";
+import definePlugin from "@utils/types";
+
+export default definePlugin({
+ name: "SettingsStoreAPI",
+ description: "Patches Discord's SettingsStores to expose their group and name",
+ authors: [Devs.Nuckyz],
+
+ patches: [
+ {
+ find: '"textAndImages","renderSpoilers"',
+ replacement: [
+ {
+ match: /(?<=INFREQUENT_USER_ACTION.{0,20}),useSetting:function/,
+ replace: ",settingsStoreApiGroup:arguments[0],settingsStoreApiName:arguments[1]$&"
+ }
+ ]
+ }
+ ]
+});