diff options
author | V <vendicated@riseup.net> | 2023-06-13 02:36:25 +0200 |
---|---|---|
committer | V <vendicated@riseup.net> | 2023-06-13 03:45:05 +0200 |
commit | 07a9adbce25e42dcd4d1eb25ee011328d0543304 (patch) | |
tree | c4ea6230e57cc3a77adc53c25efb91ea148a6dea /src/plugins/_api | |
parent | 42d8211871d84e2650f7c762c66e2ee2e6c58968 (diff) | |
download | Vencord-07a9adbce25e42dcd4d1eb25ee011328d0543304.tar.gz Vencord-07a9adbce25e42dcd4d1eb25ee011328d0543304.tar.bz2 Vencord-07a9adbce25e42dcd4d1eb25ee011328d0543304.zip |
🧹🧹
Diffstat (limited to 'src/plugins/_api')
-rw-r--r-- | src/plugins/_api/badges.tsx | 193 | ||||
-rw-r--r-- | src/plugins/_api/commands.ts | 61 | ||||
-rw-r--r-- | src/plugins/_api/contextMenu.ts | 45 | ||||
-rw-r--r-- | src/plugins/_api/memberListDecorators.ts | 42 | ||||
-rw-r--r-- | src/plugins/_api/messageAccessories.ts | 36 | ||||
-rw-r--r-- | src/plugins/_api/messageDecorations.ts | 35 | ||||
-rw-r--r-- | src/plugins/_api/messageEvents.ts | 59 | ||||
-rw-r--r-- | src/plugins/_api/messagePopover.ts | 38 | ||||
-rw-r--r-- | src/plugins/_api/notices.ts | 42 | ||||
-rw-r--r-- | src/plugins/_api/serverList.ts | 42 | ||||
-rw-r--r-- | src/plugins/_api/settingsStore.ts | 38 |
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]$&" + } + ] + } + ] +}); |