├── .editorconfig ├── .eslintrc.json ├── .gitattributes ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── blank.yml │ ├── bug_report.yml │ └── config.yml └── workflows │ ├── build.yml │ ├── reportBrokenPlugins.yml │ ├── syncDev.yml │ ├── syncMain.yml │ └── test.yml ├── .gitignore ├── .npmrc ├── .stylelintrc.json ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── browser ├── GMPolyfill.js ├── Vencord.ts ├── VencordNativeStub.ts ├── background.js ├── content.js ├── icon.png ├── manifest.json ├── manifestv2.json ├── modifyResponseHeaders.json ├── monaco.ts ├── monacoWin.html ├── patch-worker.js └── userscript.meta.js ├── docs └── 1_INSTALLING.md ├── package.json ├── packages └── vencord-types │ ├── .gitignore │ ├── .npmignore │ ├── HOW2PUB.md │ ├── README.md │ ├── globals.d.ts │ ├── index.d.ts │ ├── package.json │ └── prepare.ts ├── patches ├── eslint-plugin-path-alias@1.0.0.patch └── eslint@8.46.0.patch ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── scripts ├── build │ ├── build.mjs │ ├── buildWeb.mjs │ ├── common.mjs │ ├── inject │ │ └── react.mjs │ ├── module │ │ └── style.js │ └── tsconfig.esbuild.json ├── checkNodeVersion.js ├── generatePluginList.ts ├── generateReport.ts ├── header-new.txt ├── header-old.txt ├── runInstaller.mjs ├── suppressExperimentalWarnings.js └── utils.mjs ├── src ├── Vencord.ts ├── VencordNative.ts ├── api │ ├── Badges.ts │ ├── ChatButton.css │ ├── ChatButtons.tsx │ ├── Commands │ │ ├── commandHelpers.ts │ │ ├── index.ts │ │ └── types.ts │ ├── ContextMenu.ts │ ├── DataStore │ │ ├── LICENSE │ │ └── index.ts │ ├── MemberListDecorators.ts │ ├── MessageAccessories.ts │ ├── MessageDecorations.ts │ ├── MessageEvents.ts │ ├── MessagePopover.ts │ ├── MessageUpdater.ts │ ├── Notices.ts │ ├── Notifications │ │ ├── NotificationComponent.tsx │ │ ├── Notifications.tsx │ │ ├── index.ts │ │ ├── notificationLog.tsx │ │ └── styles.css │ ├── ServerList.ts │ ├── Settings.ts │ ├── Styles.ts │ ├── UserSettingDefinitions.ts │ ├── UserSettings.ts │ └── index.ts ├── assets │ ├── badges.json │ └── icon.png ├── components │ ├── Badge.tsx │ ├── CheckedTextInput.tsx │ ├── CodeBlock.tsx │ ├── DonateButton.tsx │ ├── ErrorBoundary.tsx │ ├── ErrorCard.css │ ├── ErrorCard.tsx │ ├── ExpandableHeader.css │ ├── ExpandableHeader.tsx │ ├── Flex.tsx │ ├── Grid.tsx │ ├── Heart.tsx │ ├── Icons.tsx │ ├── Link.tsx │ ├── PluginSettings │ │ ├── ContributorModal.tsx │ │ ├── LinkIconButton.css │ │ ├── LinkIconButton.tsx │ │ ├── PluginModal.css │ │ ├── PluginModal.tsx │ │ ├── components │ │ │ ├── SettingBooleanComponent.tsx │ │ │ ├── SettingCustomComponent.tsx │ │ │ ├── SettingNumericComponent.tsx │ │ │ ├── SettingSelectComponent.tsx │ │ │ ├── SettingSliderComponent.tsx │ │ │ ├── SettingTextComponent.tsx │ │ │ └── index.ts │ │ ├── contributorModal.css │ │ ├── index.tsx │ │ └── styles.css │ ├── Switch.css │ ├── Switch.tsx │ ├── VencordSettings │ │ ├── AddonCard.tsx │ │ ├── BackupAndRestoreTab.tsx │ │ ├── CloudTab.tsx │ │ ├── NotificationSettings.tsx │ │ ├── PatchHelperTab.tsx │ │ ├── PluginsTab.tsx │ │ ├── ThemesTab.tsx │ │ ├── UpdaterTab.tsx │ │ ├── VencordTab.tsx │ │ ├── addonCard.css │ │ ├── quickActions.css │ │ ├── quickActions.tsx │ │ ├── settingsStyles.css │ │ ├── shared.tsx │ │ └── themesStyles.css │ ├── handleComponentFailed.ts │ ├── iconStyles.css │ └── index.ts ├── debug │ ├── Tracer.ts │ ├── loadLazyChunks.ts │ └── runReporter.ts ├── globals.d.ts ├── main │ ├── index.ts │ ├── ipcMain.ts │ ├── ipcPlugins.ts │ ├── monacoWin.html │ ├── patchWin32Updater.ts │ ├── patcher.ts │ ├── settings.ts │ ├── themes │ │ ├── LICENSE │ │ └── index.ts │ ├── updater │ │ ├── common.ts │ │ ├── git.ts │ │ ├── http.ts │ │ └── index.ts │ └── utils │ │ ├── constants.ts │ │ ├── crxToZip.ts │ │ ├── extensions.ts │ │ ├── externalLinks.ts │ │ └── simpleGet.ts ├── modules.d.ts ├── plugins │ ├── _api │ │ ├── badges │ │ │ ├── fixBadgeOverflow.css │ │ │ └── index.tsx │ │ ├── chatButtons.ts │ │ ├── commands.ts │ │ ├── contextMenu.ts │ │ ├── memberListDecorators.ts │ │ ├── messageAccessories.ts │ │ ├── messageDecorations.ts │ │ ├── messageEvents.ts │ │ ├── messagePopover.ts │ │ ├── messageUpdater.ts │ │ ├── notices.ts │ │ ├── serverList.ts │ │ └── userSettings.ts │ ├── _core │ │ ├── noTrack.ts │ │ ├── settings.tsx │ │ └── supportHelper.tsx │ ├── alwaysAnimate │ │ └── index.ts │ ├── alwaysTrust │ │ └── index.ts │ ├── anonymiseFileNames │ │ └── index.tsx │ ├── appleMusic.desktop │ │ ├── index.tsx │ │ └── native.ts │ ├── arRPC.web │ │ └── index.tsx │ ├── automodContext │ │ └── index.tsx │ ├── banger │ │ └── index.ts │ ├── betterFolders │ │ ├── FolderSideBar.tsx │ │ └── index.tsx │ ├── betterGifAltText │ │ └── index.ts │ ├── betterGifPicker │ │ └── index.ts │ ├── betterNotes │ │ └── index.tsx │ ├── betterRoleContext │ │ └── index.tsx │ ├── betterRoleDot │ │ └── index.ts │ ├── betterSessions │ │ ├── components │ │ │ ├── RenameButton.tsx │ │ │ ├── RenameModal.tsx │ │ │ └── icons.tsx │ │ ├── index.tsx │ │ ├── types.ts │ │ └── utils.ts │ ├── betterSettings │ │ └── index.tsx │ ├── betterUploadButton │ │ └── index.ts │ ├── biggerStreamPreview │ │ ├── index.tsx │ │ └── webpack │ │ │ ├── stores.ts │ │ │ └── types │ │ │ └── stores.ts │ ├── blurNsfw │ │ └── index.ts │ ├── callTimer │ │ └── index.tsx │ ├── clearURLs │ │ ├── defaultRules.ts │ │ └── index.ts │ ├── clientTheme │ │ ├── clientTheme.css │ │ └── index.tsx │ ├── colorSighted │ │ └── index.ts │ ├── consoleJanitor │ │ └── index.ts │ ├── consoleShortcuts │ │ ├── index.ts │ │ └── native.ts │ ├── copyEmojiMarkdown │ │ └── index.tsx │ ├── copyUserURLs │ │ └── index.tsx │ ├── crashHandler │ │ └── index.ts │ ├── ctrlEnterSend │ │ └── index.ts │ ├── customRPC │ │ └── index.tsx │ ├── customidle │ │ └── index.ts │ ├── dearrow │ │ ├── index.tsx │ │ └── styles.css │ ├── decor │ │ ├── index.tsx │ │ ├── lib │ │ │ ├── api.ts │ │ │ ├── constants.ts │ │ │ ├── stores │ │ │ │ ├── AuthorizationStore.tsx │ │ │ │ ├── CurrentUserDecorationsStore.ts │ │ │ │ └── UsersDecorationsStore.ts │ │ │ └── utils │ │ │ │ └── decoration.ts │ │ ├── settings.tsx │ │ └── ui │ │ │ ├── components │ │ │ ├── DecorDecorationGridDecoration.tsx │ │ │ ├── DecorSection.tsx │ │ │ ├── DecorationContextMenu.tsx │ │ │ ├── DecorationGridCreate.tsx │ │ │ ├── DecorationGridNone.tsx │ │ │ ├── Grid.tsx │ │ │ ├── SectionedGridList.tsx │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── modals │ │ │ ├── ChangeDecorationModal.tsx │ │ │ ├── CreateDecorationModal.tsx │ │ │ └── GuidelinesModal.tsx │ │ │ └── styles.css │ ├── devCompanion.dev │ │ └── index.tsx │ ├── disableCallIdle │ │ └── index.ts │ ├── dontRoundMyTimestamps │ │ └── index.ts │ ├── emoteCloner │ │ └── index.tsx │ ├── experiments │ │ ├── hideBugReport.css │ │ └── index.tsx │ ├── f8break │ │ └── index.ts │ ├── fakeNitro │ │ └── index.tsx │ ├── fakeProfileThemes │ │ ├── index.css │ │ └── index.tsx │ ├── favEmojiFirst │ │ └── index.ts │ ├── favGifSearch │ │ └── index.tsx │ ├── fixCodeblockGap │ │ └── index.ts │ ├── fixSpotifyEmbeds.desktop │ │ ├── index.ts │ │ └── native.ts │ ├── fixYoutubeEmbeds.desktop │ │ ├── index.ts │ │ └── native.ts │ ├── forceOwnerCrown │ │ └── index.ts │ ├── friendInvites │ │ └── index.ts │ ├── friendsSince │ │ └── index.tsx │ ├── gameActivityToggle │ │ ├── index.tsx │ │ └── style.css │ ├── gifPaste │ │ └── index.ts │ ├── greetStickerPicker │ │ └── index.tsx │ ├── hideAttachments │ │ └── index.tsx │ ├── iLoveSpam │ │ └── index.ts │ ├── ignoreActivities │ │ └── index.tsx │ ├── imageLink │ │ └── index.ts │ ├── imageZoom │ │ ├── components │ │ │ └── Magnifier.tsx │ │ ├── constants.ts │ │ ├── index.tsx │ │ ├── styles.css │ │ └── utils │ │ │ └── waitFor.ts │ ├── implicitRelationships │ │ └── index.ts │ ├── index.ts │ ├── invisibleChat.desktop │ │ ├── components │ │ │ ├── DecryptionModal.tsx │ │ │ └── EncryptionModal.tsx │ │ └── index.tsx │ ├── keepCurrentChannel │ │ └── index.ts │ ├── lastfm │ │ └── index.tsx │ ├── loadingQuotes │ │ ├── index.ts │ │ └── quotes.txt │ ├── maskedLinkPaste │ │ └── index.ts │ ├── memberCount │ │ ├── MemberCount.tsx │ │ ├── OnlineMemberCountStore.ts │ │ ├── index.tsx │ │ └── style.css │ ├── mentionAvatars │ │ ├── index.tsx │ │ └── styles.css │ ├── messageClickActions │ │ └── index.ts │ ├── messageLatency │ │ └── index.tsx │ ├── messageLinkEmbeds │ │ └── index.tsx │ ├── messageLogger │ │ ├── HistoryModal.tsx │ │ ├── deleteStyleOverlay.css │ │ ├── deleteStyleText.css │ │ ├── index.tsx │ │ └── messageLogger.css │ ├── messageTags │ │ └── index.ts │ ├── moreCommands │ │ └── index.ts │ ├── moreKaomoji │ │ └── index.ts │ ├── moreUserTags │ │ └── index.tsx │ ├── moyai │ │ └── index.ts │ ├── mutualGroupDMs │ │ └── index.tsx │ ├── newGuildSettings │ │ └── index.tsx │ ├── noBlockedMessages │ │ └── index.ts │ ├── noDefaultHangStatus │ │ └── index.ts │ ├── noDevtoolsWarning │ │ └── index.ts │ ├── noF1 │ │ └── index.ts │ ├── noMosaic │ │ └── index.ts │ ├── noOnboardingDelay │ │ └── index.ts │ ├── noPendingCount │ │ └── index.ts │ ├── noProfileThemes │ │ └── index.ts │ ├── noRPC.discordDesktop │ │ └── index.ts │ ├── noReplyMention │ │ └── index.tsx │ ├── noScreensharePreview │ │ └── index.ts │ ├── noServerEmojis │ │ └── index.ts │ ├── noSystemBadge.discordDesktop │ │ └── index.ts │ ├── noTypingAnimation │ │ └── index.ts │ ├── noUnblockToJump │ │ └── index.ts │ ├── normalizeMessageLinks │ │ └── index.ts │ ├── notificationVolume │ │ └── index.ts │ ├── nsfwGateBypass │ │ └── index.ts │ ├── onePingPerDM │ │ └── index.ts │ ├── oneko │ │ └── index.ts │ ├── openInApp │ │ ├── index.ts │ │ └── native.ts │ ├── overrideForumDefaults │ │ └── index.tsx │ ├── partyMode │ │ └── index.ts │ ├── pauseInvitesForever │ │ └── index.tsx │ ├── permissionFreeWill │ │ └── index.ts │ ├── permissionsViewer │ │ ├── components │ │ │ ├── RolesAndUsersPermissions.tsx │ │ │ ├── UserPermissions.tsx │ │ │ └── icons.tsx │ │ ├── index.tsx │ │ ├── styles.css │ │ └── utils.ts │ ├── petpet │ │ └── index.ts │ ├── pictureInPicture │ │ ├── index.tsx │ │ └── styles.css │ ├── pinDms │ │ ├── components │ │ │ ├── CreateCategoryModal.tsx │ │ │ └── contextMenu.tsx │ │ ├── constants.ts │ │ ├── data.ts │ │ ├── index.tsx │ │ └── styles.css │ ├── plainFolderIcon │ │ └── index.ts │ ├── platformIndicators │ │ ├── index.tsx │ │ └── style.css │ ├── previewMessage │ │ └── index.tsx │ ├── pronoundb │ │ ├── components │ │ │ ├── PronounsAboutComponent.tsx │ │ │ └── PronounsChatComponent.tsx │ │ ├── index.ts │ │ ├── pronoundbUtils.ts │ │ ├── settings.ts │ │ ├── styles.css │ │ └── types.ts │ ├── quickMention │ │ └── index.tsx │ ├── quickReply │ │ └── index.ts │ ├── reactErrorDecoder │ │ └── index.ts │ ├── readAllNotificationsButton │ │ ├── index.tsx │ │ └── style.css │ ├── relationshipNotifier │ │ ├── functions.ts │ │ ├── index.ts │ │ ├── settings.ts │ │ ├── types.ts │ │ └── utils.ts │ ├── replaceGoogleSearch │ │ └── index.tsx │ ├── replyTimestamp │ │ ├── index.tsx │ │ └── style.css │ ├── revealAllSpoilers │ │ └── index.ts │ ├── reverseImageSearch │ │ └── index.tsx │ ├── reviewDB │ │ ├── auth.tsx │ │ ├── components │ │ │ ├── BlockedUserModal.tsx │ │ │ ├── MessageButton.tsx │ │ │ ├── ReviewBadge.tsx │ │ │ ├── ReviewComponent.tsx │ │ │ ├── ReviewModal.tsx │ │ │ └── ReviewsView.tsx │ │ ├── entities.ts │ │ ├── index.tsx │ │ ├── reviewDbApi.ts │ │ ├── settings.tsx │ │ ├── style.css │ │ └── utils.tsx │ ├── roleColorEverywhere │ │ └── index.tsx │ ├── searchReply │ │ └── index.tsx │ ├── secretRingTone │ │ └── index.ts │ ├── seeSummaries │ │ └── index.tsx │ ├── sendTimestamps │ │ ├── index.tsx │ │ └── styles.css │ ├── serverInfo │ │ ├── GuildInfoModal.tsx │ │ ├── index.tsx │ │ └── styles.css │ ├── serverListIndicators │ │ └── index.tsx │ ├── shikiCodeblocks.desktop │ │ ├── api │ │ │ ├── languages.ts │ │ │ ├── shiki.ts │ │ │ └── themes.ts │ │ ├── components │ │ │ ├── ButtonRow.tsx │ │ │ ├── Code.tsx │ │ │ ├── CopyButton.tsx │ │ │ ├── Header.tsx │ │ │ └── Highlighter.tsx │ │ ├── devicon.css │ │ ├── hooks │ │ │ ├── useCopyCooldown.ts │ │ │ ├── useShikiSettings.ts │ │ │ └── useTheme.ts │ │ ├── index.ts │ │ ├── previewExample.tsx │ │ ├── settings.ts │ │ ├── shiki.css │ │ ├── types.ts │ │ └── utils │ │ │ ├── color.ts │ │ │ ├── createStyle.ts │ │ │ └── misc.ts │ ├── showAllMessageButtons │ │ └── index.ts │ ├── showAllRoles │ │ └── index.ts │ ├── showConnections │ │ ├── VerifiedIcon.tsx │ │ ├── index.tsx │ │ └── styles.css │ ├── showHiddenChannels │ │ ├── components │ │ │ └── HiddenChannelLockScreen.tsx │ │ ├── index.tsx │ │ └── style.css │ ├── showHiddenThings │ │ └── index.ts │ ├── showMeYourName │ │ ├── index.tsx │ │ └── styles.css │ ├── showTimeoutDuration │ │ ├── index.tsx │ │ └── styles.css │ ├── silentMessageToggle │ │ └── index.tsx │ ├── silentTyping │ │ └── index.tsx │ ├── sortFriendRequests │ │ └── index.tsx │ ├── spotifyControls │ │ ├── PlayerComponent.tsx │ │ ├── SpotifyStore.ts │ │ ├── hoverOnly.css │ │ ├── index.tsx │ │ └── spotifyStyles.css │ ├── spotifyCrack │ │ └── index.ts │ ├── spotifyShareCommands │ │ └── index.ts │ ├── startupTimings │ │ ├── StartupTimingPage.tsx │ │ └── index.tsx │ ├── streamerModeOnStream │ │ └── index.ts │ ├── superReactionTweaks │ │ └── index.ts │ ├── textReplace │ │ └── index.tsx │ ├── themeAttributes │ │ └── index.ts │ ├── timeBarAllActivities │ │ └── index.ts │ ├── translate │ │ ├── TranslateIcon.tsx │ │ ├── TranslateModal.tsx │ │ ├── TranslationAccessory.tsx │ │ ├── index.tsx │ │ ├── languages.ts │ │ ├── settings.ts │ │ ├── styles.css │ │ └── utils.ts │ ├── typingIndicator │ │ ├── index.tsx │ │ └── style.css │ ├── typingTweaks │ │ └── index.tsx │ ├── unindent │ │ └── index.ts │ ├── unlockedAvatarZoom │ │ └── index.ts │ ├── unsuppressEmbeds │ │ └── index.tsx │ ├── userVoiceShow │ │ ├── components │ │ │ ├── VoiceChannelSection.css │ │ │ └── VoiceChannelSection.tsx │ │ └── index.tsx │ ├── usrbg │ │ ├── index.css │ │ └── index.tsx │ ├── validReply │ │ └── index.ts │ ├── validUser │ │ └── index.tsx │ ├── vcDoubleClick │ │ └── index.ts │ ├── vcNarrator │ │ └── index.tsx │ ├── viewIcons │ │ └── index.tsx │ ├── viewRaw │ │ └── index.tsx │ ├── voiceDownload │ │ ├── index.tsx │ │ └── style.css │ ├── voiceMessages │ │ ├── DesktopRecorder.tsx │ │ ├── VoicePreview.tsx │ │ ├── WebRecorder.tsx │ │ ├── index.tsx │ │ ├── native.ts │ │ ├── settings.ts │ │ ├── styles.css │ │ └── utils.ts │ ├── volumeBooster.discordDesktop │ │ └── index.ts │ ├── watchTogetherAdblock.desktop │ │ ├── adguard.js │ │ ├── index.ts │ │ └── native.ts │ ├── webContextMenus.web │ │ └── index.ts │ ├── webKeybinds.web │ │ └── index.ts │ ├── webScreenShareFixes.web │ │ └── index.ts │ ├── whoReacted │ │ └── index.tsx │ └── xsOverlay.desktop │ │ ├── index.ts │ │ └── native.ts ├── preload.ts ├── shared │ ├── IpcEvents.ts │ ├── SettingsStore.ts │ ├── debounce.ts │ ├── onceDefined.ts │ └── vencordUserAgent.ts ├── suncordplugins │ ├── Anammox │ │ └── index.ts │ ├── CopyUserMention │ │ └── index.tsx │ ├── CustomAppIcons │ │ ├── AppIconModal.tsx │ │ └── index.tsx │ ├── MessageLinkTooltip │ │ ├── index.tsx │ │ └── style.css │ ├── ModalFade │ │ └── index.tsx │ ├── Timezones │ │ ├── Utils.ts │ │ ├── index.tsx │ │ └── settings.tsx │ ├── allCallTimers │ │ ├── Timer.tsx │ │ ├── TimerIcon.tsx │ │ ├── index.tsx │ │ └── timerText.tsx │ ├── amITyping │ │ └── index.ts │ ├── betterActivities │ │ ├── components │ │ │ ├── ActivityTooltip.tsx │ │ │ ├── Caret.tsx │ │ │ ├── SpotifyIcon.tsx │ │ │ └── TwitchIcon.tsx │ │ ├── index.tsx │ │ ├── settings.tsx │ │ ├── styles.css │ │ ├── types.ts │ │ └── utils.ts │ ├── betterBanReasons │ │ ├── index.tsx │ │ └── styles.css │ ├── betterMicrophone.desktop │ │ ├── components │ │ │ ├── MicrophoneSettingsModal.tsx │ │ │ └── index.tsx │ │ ├── constants │ │ │ ├── constants.ts │ │ │ └── index.ts │ │ ├── index.tsx │ │ ├── logger │ │ │ └── index.ts │ │ ├── modals │ │ │ └── index.tsx │ │ ├── patchers │ │ │ ├── index.ts │ │ │ └── microphone.ts │ │ └── stores │ │ │ ├── index.ts │ │ │ └── microphoneStore.ts │ ├── betterScreenshare.dev │ │ ├── components │ │ │ ├── AudioSourceSelect.tsx │ │ │ ├── OpenScreenshareSettingsButton.tsx │ │ │ ├── ScreenshareSettingsModal.tsx │ │ │ └── index.tsx │ │ ├── constants │ │ │ ├── constants.ts │ │ │ └── index.ts │ │ ├── index.tsx │ │ ├── logger │ │ │ └── index.ts │ │ ├── modals │ │ │ └── index.tsx │ │ ├── patchers │ │ │ ├── index.ts │ │ │ ├── screenshare.ts │ │ │ └── screenshareAudio.ts │ │ ├── patches │ │ │ ├── index.ts │ │ │ └── screenshareModal.tsx │ │ └── stores │ │ │ ├── index.ts │ │ │ ├── screenshareAudioStore.ts │ │ │ └── screenshareStore.ts │ ├── blockKrisp │ │ ├── index.ts │ │ └── screenshot.png │ ├── commandPalette │ │ ├── commands.tsx │ │ ├── components │ │ │ ├── CommandPalette.tsx │ │ │ ├── MultipleChoice.tsx │ │ │ ├── TextInput.tsx │ │ │ └── styles.css │ │ └── index.tsx │ ├── discordColorways │ │ ├── LICENSE │ │ ├── components │ │ │ ├── AutoColorwaySelector.tsx │ │ │ ├── ColorPicker.tsx │ │ │ ├── ColorwayCreatorSettingsModal.tsx │ │ │ ├── ColorwaysButton.tsx │ │ │ ├── ConflictingColorsModal.tsx │ │ │ ├── CreatorModal.tsx │ │ │ ├── Icons.tsx │ │ │ ├── InfoModal.tsx │ │ │ ├── InputColorwayIdModal.tsx │ │ │ ├── SaveColorwayModal.tsx │ │ │ ├── SelectionCircle.tsx │ │ │ ├── Selector.tsx │ │ │ ├── SettingsTabs │ │ │ │ ├── OnDemandPage.tsx │ │ │ │ ├── SettingsPage.tsx │ │ │ │ ├── SourceManager.tsx │ │ │ │ └── Store.tsx │ │ │ ├── Spinner.tsx │ │ │ └── ThemePreview.tsx │ │ ├── constants.ts │ │ ├── css.ts │ │ ├── index.tsx │ │ ├── style.css │ │ ├── types.ts │ │ └── utils.ts │ ├── doubleCounterVerifyBypass │ │ └── index.tsx │ ├── emojiDumper │ │ └── index.tsx │ ├── followUser │ │ ├── index.tsx │ │ └── screenshot.png │ ├── globalBadges │ │ └── index.tsx │ ├── godMode │ │ └── index.ts │ ├── hideMessage │ │ ├── EyeIcon.tsx │ │ ├── HideIcon.tsx │ │ ├── HideMessageAccessory.tsx │ │ ├── index.tsx │ │ └── styles.css │ ├── holyNotes │ │ ├── components │ │ │ ├── icons │ │ │ │ ├── HelpIcon.tsx │ │ │ │ ├── NoteButton.tsx │ │ │ │ └── overFlowIcon.tsx │ │ │ └── modals │ │ │ │ ├── Error.tsx │ │ │ │ ├── HelpModal.tsx │ │ │ │ ├── ManageNotebookButton.tsx │ │ │ │ ├── NoteBookTab.tsx │ │ │ │ ├── Notebook.tsx │ │ │ │ ├── NotebookCreateModal.tsx │ │ │ │ ├── NotebookDeleteModal.tsx │ │ │ │ └── RenderMessage.tsx │ │ ├── index.tsx │ │ ├── noteHandler.ts │ │ ├── style.css │ │ ├── types.ts │ │ └── utils.ts │ ├── iRememberYou │ │ └── index.tsx │ ├── ignoreTerms │ │ ├── index.ts │ │ └── screenshot.png │ ├── mediaDownloader.desktop │ │ ├── DependencyModal.tsx │ │ ├── index.tsx │ │ ├── mediaDownloader.css │ │ └── native.ts │ ├── mediaPlaybackSpeed │ │ ├── components │ │ │ └── SpeedIcon.tsx │ │ ├── index.tsx │ │ └── styles.css │ ├── messageColors │ │ ├── ColorPicker.tsx │ │ ├── constants.ts │ │ ├── index.tsx │ │ └── styles.css │ ├── messageLoggerEnhanced │ │ ├── LICENSE │ │ ├── LoggedMessageManager.ts │ │ ├── components │ │ │ ├── LogsButton.tsx │ │ │ ├── LogsModal.tsx │ │ │ └── settings │ │ │ │ └── FolderSelectInput.tsx │ │ ├── index.tsx │ │ ├── native │ │ │ ├── index.ts │ │ │ ├── settings.ts │ │ │ └── utils.ts │ │ ├── styles.css │ │ ├── types.ts │ │ └── utils │ │ │ ├── LimitedMap.ts │ │ │ ├── cleanUp.ts │ │ │ ├── constants.ts │ │ │ ├── freedom │ │ │ └── importMeToPreload.ts │ │ │ ├── index.ts │ │ │ ├── memoize.ts │ │ │ ├── misc.ts │ │ │ ├── parseQuery.ts │ │ │ ├── saveImage │ │ │ ├── ImageManager.ts │ │ │ └── index.ts │ │ │ └── settingsUtils.ts │ ├── notifyUserChanges │ │ ├── components │ │ │ ├── NotificationsOffIcon.tsx │ │ │ └── NotificationsOnIcon.tsx │ │ ├── context-menu.png │ │ ├── index.tsx │ │ └── screenshot.png │ ├── philsPluginLibrary │ │ ├── components │ │ │ ├── AuthorSummaryItem.tsx │ │ │ ├── ContributorAuthorSummary.tsx │ │ │ ├── buttons │ │ │ │ ├── CopyButton.tsx │ │ │ │ ├── DeleteButton.tsx │ │ │ │ ├── IconTooltipButton.tsx │ │ │ │ ├── NewButton.tsx │ │ │ │ ├── SaveButton.tsx │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── settingsModal │ │ │ │ ├── SettingsModal.tsx │ │ │ │ ├── SettingsModalCard.tsx │ │ │ │ ├── SettingsModalCardItem.tsx │ │ │ │ ├── SettingsModalCardRow.tsx │ │ │ │ ├── SettingsModalProfilesCard.tsx │ │ │ │ └── index.tsx │ │ │ └── settingsPanel │ │ │ │ ├── SettingsPanel.tsx │ │ │ │ ├── SettingsPanelButton.tsx │ │ │ │ ├── SettingsPanelRow.tsx │ │ │ │ ├── SettingsPanelTooltipButton.tsx │ │ │ │ └── index.tsx │ │ ├── constants │ │ │ ├── constants.ts │ │ │ └── index.ts │ │ ├── discordModules │ │ │ ├── classes.ts │ │ │ ├── components.tsx │ │ │ ├── index.ts │ │ │ ├── modules.ts │ │ │ └── stores.ts │ │ ├── emitter │ │ │ ├── emitter.ts │ │ │ └── index.ts │ │ ├── icons │ │ │ └── index.tsx │ │ ├── index.tsx │ │ ├── patchers │ │ │ ├── index.ts │ │ │ └── patcher.ts │ │ ├── patches │ │ │ ├── audio.ts │ │ │ ├── index.ts │ │ │ ├── userPanel.tsx │ │ │ └── video.ts │ │ ├── store │ │ │ ├── index.ts │ │ │ ├── profileable.ts │ │ │ └── store.ts │ │ ├── styles │ │ │ ├── index.ts │ │ │ └── styles.ts │ │ ├── types │ │ │ ├── common │ │ │ │ └── index.ts │ │ │ ├── constants │ │ │ │ └── index.ts │ │ │ ├── discordModules │ │ │ │ ├── classes │ │ │ │ │ ├── index.ts │ │ │ │ │ └── panelClasses.ts │ │ │ │ ├── components │ │ │ │ │ ├── index.ts │ │ │ │ │ └── userSummaryItem.ts │ │ │ │ ├── index.ts │ │ │ │ ├── modules │ │ │ │ │ ├── conn.ts │ │ │ │ │ ├── connection.ts │ │ │ │ │ ├── framerateReducer.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── mediaEngine.ts │ │ │ │ │ ├── utils.ts │ │ │ │ │ └── videoQualityManager.ts │ │ │ │ └── stores │ │ │ │ │ ├── index.ts │ │ │ │ │ └── mediaEngineStore.ts │ │ │ └── index.ts │ │ └── utils │ │ │ ├── index.ts │ │ │ └── utils.ts │ ├── platformSpoofer │ │ └── index.ts │ ├── purgeMessages │ │ └── index.ts │ ├── questCompleter │ │ └── index.tsx │ ├── repeatMessage │ │ └── index.tsx │ ├── runInConsole │ │ ├── index.tsx │ │ └── style.css │ ├── showBadgesInChat │ │ ├── index.tsx │ │ ├── settings.tsx │ │ └── styles.css │ ├── silentTyping │ │ ├── index.tsx │ │ ├── screenshot-guild.png │ │ └── screenshot-user.png │ ├── soundBoardLogger │ │ ├── components │ │ │ ├── Icons.tsx │ │ │ ├── MoreUsersModal.tsx │ │ │ ├── SoundBoardLog.tsx │ │ │ └── UserModal.tsx │ │ ├── index.tsx │ │ ├── settings.tsx │ │ ├── store.tsx │ │ ├── styles.css │ │ └── utils.ts │ ├── suncordToolbox │ │ ├── index.css │ │ └── index.tsx │ ├── talkInReverse │ │ └── index.tsx │ ├── themeLibrary │ │ ├── components │ │ │ ├── LikesComponent.tsx │ │ │ ├── ThemeInfoModal.tsx │ │ │ ├── ThemeTab.tsx │ │ │ └── styles.css │ │ ├── index.tsx │ │ ├── native.ts │ │ ├── types.ts │ │ └── utils │ │ │ ├── Icons.tsx │ │ │ ├── auth.tsx │ │ │ └── settings.tsx │ ├── userpfp │ │ └── index.tsx │ └── voiceChatUtilities │ │ └── index.tsx ├── utils │ ├── ChangeList.ts │ ├── Logger.ts │ ├── Queue.ts │ ├── apng-canvas.js │ ├── cloud.tsx │ ├── constants.ts │ ├── dependencies.ts │ ├── discord.tsx │ ├── guards.ts │ ├── index.ts │ ├── lazy.ts │ ├── lazyReact.tsx │ ├── localStorage.ts │ ├── margins.ts │ ├── mergeDefaults.ts │ ├── misc.ts │ ├── modal.tsx │ ├── native.ts │ ├── onlyOnce.ts │ ├── patches.ts │ ├── quickCss.ts │ ├── react.tsx │ ├── settingsSync.ts │ ├── text.ts │ ├── types.ts │ ├── updater.ts │ ├── web-metadata.ts │ └── web.ts └── webpack │ ├── common │ ├── classes.ts │ ├── components.ts │ ├── index.ts │ ├── internal.tsx │ ├── menu.ts │ ├── react.ts │ ├── stores.ts │ ├── types │ │ ├── classes.d.ts │ │ ├── components.d.ts │ │ ├── fluxEvents.d.ts │ │ ├── i18nMessages.ts │ │ ├── index.d.ts │ │ ├── menu.d.ts │ │ ├── passiveupdatestate.d.ts │ │ ├── stores.d.ts │ │ ├── utils.d.ts │ │ └── voicestate.d.ts │ ├── userSettings.ts │ └── utils.ts │ ├── index.ts │ ├── patchWebpack.ts │ └── webpack.ts └── tsconfig.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 4 9 | end_of_line = lf 10 | charset = utf-8 11 | trim_trailing_whitespace = true 12 | insert_final_newline = true 13 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: verticalsync 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/blank.yml: -------------------------------------------------------------------------------- 1 | name: Blank Issue 2 | description: Create a blank issue. ALWAYS FIRST USE OUR SUPPORT CHANNEL! ONLY USE THIS FORM IF YOU ARE A CONTRIBUTOR OR WERE TOLD TO DO SO IN THE SUPPORT CHANNEL. 3 | 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | # READ THIS BEFORE OPENING AN ISSUE 9 | 10 | This form is ONLY FOR DEVELOPERS. YOUR ISSUE WILL BE CLOSED AND YOU WILL POSSIBLY BE BLOCKED FROM THE REPOSITORY IF YOU IGNORE THIS. 11 | 12 | DO NOT USE THIS FORM, unless 13 | - you are a suncord contributor 14 | - you were given explicit permission to use this form by a moderator in our support server 15 | 16 | DO NOT USE THIS FORM FOR SECURITY RELATED ISSUES. [CREATE A SECURITY ADVISORY INSTEAD.](https://github.com/Vendicated/Vencord/security/advisories/new) 17 | 18 | - type: textarea 19 | id: content 20 | attributes: 21 | label: Content 22 | validations: 23 | required: true 24 | 25 | - type: checkboxes 26 | id: agreement-check 27 | attributes: 28 | label: Request Agreement 29 | options: 30 | - label: I have read the requirements for opening an issue above 31 | required: true 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Suncord Support Server 4 | url: https://discord.gg/VasF3Ma4Ab 5 | about: If you need help regarding Suncord, please join our support server! 6 | - name: Suncord Installer 7 | url: https://github.com/verticalsync/SuncordInstaller 8 | about: You can find the Suncord Installer here 9 | -------------------------------------------------------------------------------- /.github/workflows/syncDev.yml: -------------------------------------------------------------------------------- 1 | name: Sync Vencord dev branch 2 | 3 | env: 4 | WORKFLOW_TOKEN: ${{ secrets.PAT_TOKEN }} 5 | UPSTREAM_URL: "https://github.com/Vendicated/Vencord.git" 6 | UPSTREAM_BRANCH: "dev" 7 | DOWNSTREAM_BRANCH: "dev" 8 | 9 | on: 10 | schedule: 11 | - cron: "0 * * * *" 12 | workflow_dispatch: 13 | 14 | jobs: 15 | build: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: GitHub Sync to Upstream Repository 19 | id: sync 20 | uses: verticalsync/sync-upstream-repo@master 21 | with: 22 | upstream_repo: ${{ env.UPSTREAM_URL }} 23 | upstream_branch: ${{ env.UPSTREAM_BRANCH }} 24 | downstream_branch: ${{ env.DOWNSTREAM_BRANCH }} 25 | token: ${{ env.WORKFLOW_TOKEN }} 26 | -------------------------------------------------------------------------------- /.github/workflows/syncMain.yml: -------------------------------------------------------------------------------- 1 | name: Sync Vencord main branch 2 | 3 | env: 4 | WORKFLOW_TOKEN: ${{ secrets.PAT_TOKEN }} 5 | UPSTREAM_URL: "https://github.com/Vendicated/Vencord.git" 6 | UPSTREAM_BRANCH: "main" 7 | DOWNSTREAM_BRANCH: "main" 8 | 9 | on: 10 | schedule: 11 | - cron: "0 * * * *" 12 | workflow_dispatch: 13 | 14 | jobs: 15 | build: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: GitHub Sync to Upstream Repository 19 | id: sync 20 | uses: verticalsync/sync-upstream-repo@master 21 | with: 22 | upstream_repo: ${{ env.UPSTREAM_URL }} 23 | upstream_branch: ${{ env.UPSTREAM_BRANCH }} 24 | downstream_branch: ${{ env.DOWNSTREAM_BRANCH }} 25 | token: ${{ env.WORKFLOW_TOKEN }} 26 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Lint & Test 2 | on: 3 | push: 4 | pull_request: 5 | branches: 6 | - main 7 | - dev 8 | jobs: 9 | test: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - uses: actions/checkout@v4 14 | - uses: pnpm/action-setup@v3 # Install pnpm using packageManager key in package.json 15 | 16 | - name: Use Node.js 20 17 | uses: actions/setup-node@v4 18 | with: 19 | node-version: 20 20 | cache: "pnpm" 21 | 22 | - name: Install dependencies 23 | run: pnpm install --frozen-lockfile 24 | 25 | - name: Lint & Test if desktop version compiles 26 | run: pnpm test 27 | 28 | - name: Test if web version compiles 29 | run: pnpm buildWeb 30 | 31 | - name: Test if plugin structure is valid 32 | run: pnpm generatePluginJson 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | 4 | *.exe 5 | suncord_installer 6 | 7 | .idea 8 | .DS_Store 9 | 10 | yarn.lock 11 | package-lock.json 12 | 13 | *.log 14 | npm-debug.log* 15 | yarn-debug.log* 16 | yarn-error.log* 17 | lerna-debug.log* 18 | .pnpm-debug.log* 19 | *.tsbuildinfo 20 | 21 | src/userplugins 22 | 23 | ExtensionCache/ 24 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | strict-peer-dependencies=false 2 | package-import-method=clone-or-copy 3 | package-manager-strict=false 4 | -------------------------------------------------------------------------------- /.stylelintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "stylelint-config-standard", 3 | "rules": { 4 | "indentation": 4, 5 | "selector-class-pattern": [ 6 | "^[a-z][a-zA-Z0-9]*(-[a-z0-9][a-zA-Z0-9]*)*$", 7 | { 8 | "message": "Expected class selector to be kebab-case with camelCase segments" 9 | } 10 | ] 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "dbaeumer.vscode-eslint", 4 | "EditorConfig.EditorConfig", 5 | "GregorBiswanger.json2ts", 6 | "stylelint.vscode-stylelint", 7 | "Vendicated.vencord-companion" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // this allows you to debug Vencord from VSCode. 3 | // How to use: 4 | // You need to run Discord via the command line to pass some flags to it. 5 | // If you want to debug the main (node.js) process (preload.ts, ipcMain/*, patcher.ts), 6 | // add the --inspect flag 7 | // To debug the renderer (99% of Vencord), add the --remote-debugging-port=9223 flag 8 | // 9 | // Now launch the desired configuration in VSCode and start Discord with the flags. 10 | // For example, to debug both process, run Electron: All then launch Discord with 11 | // discord --remote-debugging-port=9223 --inspect 12 | 13 | "version": "0.2.0", 14 | "configurations": [ 15 | { 16 | "name": "Electron: Main", 17 | "type": "node", 18 | "request": "attach", 19 | "port": 9229, 20 | "timeout": 30000 21 | }, 22 | { 23 | "name": "Electron: Renderer", 24 | "type": "chrome", 25 | "request": "attach", 26 | "port": 9223, 27 | "timeout": 30000, 28 | "webRoot": "${workspaceFolder}/src" 29 | } 30 | ], 31 | "compounds": [ 32 | { 33 | "name": "Electron: All", 34 | "configurations": ["Electron: Main", "Electron: Renderer"] 35 | } 36 | ] 37 | } 38 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "editor.codeActionsOnSave": { 4 | "source.fixAll.eslint": "explicit" 5 | }, 6 | "[typescript]": { 7 | "editor.defaultFormatter": "vscode.typescript-language-features" 8 | }, 9 | "[typescriptreact]": { 10 | "editor.defaultFormatter": "vscode.typescript-language-features" 11 | }, 12 | "javascript.format.semicolons": "insert", 13 | "typescript.format.semicolons": "insert", 14 | "typescript.preferences.quoteStyle": "double", 15 | "javascript.preferences.quoteStyle": "double", 16 | 17 | "eslint.experimental.useFlatConfig": false, 18 | 19 | "gitlens.remotes": [ 20 | { 21 | "domain": "codeberg.org", 22 | "type": "Gitea" 23 | } 24 | ], 25 | "typescript.tsdk": "node_modules\\typescript\\lib" 26 | } 27 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "label": "Build", 8 | "type": "shell", 9 | "command": "pnpm build", 10 | "group": { 11 | "kind": "build", 12 | "isDefault": true 13 | } 14 | }, 15 | { 16 | "label": "Watch", 17 | "type": "shell", 18 | "command": "pnpm watch", 19 | "problemMatcher": [], 20 | "group": { 21 | "kind": "build" 22 | } 23 | } 24 | ] 25 | } -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | Our community is welcoming to everyone, regardless of their characteristics. 4 | 5 | As such, we expect you to treat everyone with respect and contribute to an open and welcoming community. 6 | 7 | DO 8 | 9 | - have empathy and be nice to others 10 | - be respectful of differing opinions, even if you disagree 11 | - give and accept constructive criticism 12 | 13 | DON'T 14 | 15 | - use offensive or derogatory language 16 | - troll or spam 17 | - personally attack or harass others 18 | 19 | Repetitive violations of these guidelines might get your access to the repository restricted. 20 | 21 | If you feel like a user is violating these guidelines or feel treated unfairly, please refrain from vigilantism 22 | and instead report the issue to a moderator! The best way is joining our [official Discord community](https://discord.gg/suncord) 23 | and opening a modmail ticket. 24 | -------------------------------------------------------------------------------- /browser/Vencord.ts: -------------------------------------------------------------------------------- 1 | /*! 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import "./VencordNativeStub"; 20 | 21 | export * from "../src/Vencord"; 22 | -------------------------------------------------------------------------------- /browser/background.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @template T 3 | * @param {T[]} arr 4 | * @param {(v: T) => boolean} predicate 5 | */ 6 | function removeFirst(arr, predicate) { 7 | const idx = arr.findIndex(predicate); 8 | if (idx !== -1) arr.splice(idx, 1); 9 | } 10 | 11 | chrome.webRequest.onHeadersReceived.addListener( 12 | ({ responseHeaders, type, url }) => { 13 | if (!responseHeaders) return; 14 | 15 | if (type === "main_frame") { 16 | // In main frame requests, the CSP needs to be removed to enable fetching of custom css 17 | // as desired by the user 18 | removeFirst(responseHeaders, h => h.name.toLowerCase() === "content-security-policy"); 19 | } else if (type === "stylesheet" && url.startsWith("https://raw.githubusercontent.com/")) { 20 | // Most users will load css from GitHub, but GitHub doesn't set the correct content type, 21 | // so we fix it here 22 | removeFirst(responseHeaders, h => h.name.toLowerCase() === "content-type"); 23 | responseHeaders.push({ 24 | name: "Content-Type", 25 | value: "text/css" 26 | }); 27 | } 28 | return { responseHeaders }; 29 | }, 30 | { urls: ["https://raw.githubusercontent.com/*", "*://*.discord.com/*"], types: ["main_frame", "stylesheet"] }, 31 | ["blocking", "responseHeaders"] 32 | ); 33 | -------------------------------------------------------------------------------- /browser/content.js: -------------------------------------------------------------------------------- 1 | if (typeof browser === "undefined") { 2 | var browser = chrome; 3 | } 4 | 5 | const style = document.createElement("link"); 6 | style.type = "text/css"; 7 | style.rel = "stylesheet"; 8 | style.href = browser.runtime.getURL("dist/Vencord.css"); 9 | 10 | document.addEventListener( 11 | "DOMContentLoaded", 12 | () => { 13 | document.documentElement.append(style); 14 | window.postMessage({ 15 | type: "vencord:meta", 16 | meta: { 17 | EXTENSION_VERSION: browser.runtime.getManifest().version, 18 | EXTENSION_BASE_URL: browser.runtime.getURL(""), 19 | } 20 | }); 21 | }, 22 | { once: true } 23 | ); 24 | -------------------------------------------------------------------------------- /browser/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/verticalsync/Suncord/e9682235804d61a14652903d9751bd456c06c4bb/browser/icon.png -------------------------------------------------------------------------------- /browser/manifestv2.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 2, 3 | "minimum_chrome_version": "91", 4 | 5 | "name": "Suncord Web", 6 | "description": "Fork of vencord", 7 | "author": "verticalsync", 8 | "homepage_url": "https://github.com/verticalsync/Suncord", 9 | "icons": { 10 | "128": "icon.png" 11 | }, 12 | 13 | "permissions": [ 14 | "webRequest", 15 | "webRequestBlocking", 16 | "*://*.discord.com/*", 17 | "https://raw.githubusercontent.com/*" 18 | ], 19 | 20 | "content_scripts": [ 21 | { 22 | "run_at": "document_start", 23 | "matches": ["*://*.discord.com/*"], 24 | "js": ["content.js"], 25 | "all_frames": true, 26 | "world": "ISOLATED" 27 | }, 28 | { 29 | "run_at": "document_start", 30 | "matches": ["*://*.discord.com/*"], 31 | "js": ["dist/Vencord.js"], 32 | "all_frames": true, 33 | "world": "MAIN" 34 | } 35 | ], 36 | 37 | "background": { 38 | "scripts": ["background.js"] 39 | }, 40 | 41 | "web_accessible_resources": ["dist/Vencord.js", "dist/Vencord.css"], 42 | 43 | "browser_specific_settings": { 44 | "gecko": { 45 | "id": "suncord@riseup.net", 46 | "strict_min_version": "128.0" 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /browser/modifyResponseHeaders.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 1, 4 | "action": { 5 | "type": "modifyHeaders", 6 | "responseHeaders": [ 7 | { 8 | "header": "content-security-policy", 9 | "operation": "remove" 10 | }, 11 | { 12 | "header": "content-security-policy-report-only", 13 | "operation": "remove" 14 | } 15 | ] 16 | }, 17 | "condition": { 18 | "resourceTypes": ["main_frame", "sub_frame"] 19 | } 20 | }, 21 | { 22 | "id": 2, 23 | "action": { 24 | "type": "modifyHeaders", 25 | "responseHeaders": [ 26 | { 27 | "header": "content-type", 28 | "operation": "set", 29 | "value": "text/css" 30 | } 31 | ] 32 | }, 33 | "condition": { 34 | "resourceTypes": ["stylesheet"], 35 | "urlFilter": "https://raw.githubusercontent.com/*" 36 | } 37 | } 38 | ] 39 | -------------------------------------------------------------------------------- /browser/monaco.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import "./patch-worker"; 8 | 9 | import * as monaco from "monaco-editor/esm/vs/editor/editor.main.js"; 10 | 11 | declare global { 12 | const baseUrl: string; 13 | const getCurrentCss: () => Promise; 14 | const setCss: (css: string) => void; 15 | const getTheme: () => string; 16 | } 17 | 18 | const BASE = "/dist/monaco/vs"; 19 | 20 | self.MonacoEnvironment = { 21 | getWorkerUrl(_moduleId: unknown, label: string) { 22 | const path = label === "css" ? "/language/css/css.worker.js" : "/editor/editor.worker.js"; 23 | return new URL(BASE + path, baseUrl).toString(); 24 | } 25 | }; 26 | 27 | getCurrentCss().then(css => { 28 | const editor = monaco.editor.create( 29 | document.getElementById("container")!, 30 | { 31 | value: css, 32 | language: "css", 33 | theme: getTheme(), 34 | } 35 | ); 36 | editor.onDidChangeModelContent(() => 37 | setCss(editor.getValue()) 38 | ); 39 | window.addEventListener("resize", () => { 40 | // make monaco re-layout 41 | editor.layout(); 42 | }); 43 | }); 44 | -------------------------------------------------------------------------------- /browser/monacoWin.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Suncord QuickCSS Editor 6 | 20 | 21 | 22 | 23 |
24 | 25 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /browser/userscript.meta.js: -------------------------------------------------------------------------------- 1 | // ==UserScript== 2 | // @name Suncord 3 | // @description A Discord client mod - Web version 4 | // @version %version% 5 | // @author verticalsync (https://github.com/verticalsync) 6 | // @namespace https://github.com/verticalsync/Suncord 7 | // @supportURL https://github.com/verticalsync/Suncord 8 | // @license GPL-3.0 9 | // @match *://*.discord.com/* 10 | // @grant GM_xmlhttpRequest 11 | // @run-at document-start 12 | // @compatible chrome Chrome + Tampermonkey or Violentmonkey 13 | // @compatible firefox Firefox Tampermonkey 14 | // @compatible opera Opera + Tampermonkey or Violentmonkey 15 | // @compatible edge Edge + Tampermonkey or Violentmonkey 16 | // @compatible safari Safari + Tampermonkey or Violentmonkey 17 | // ==/UserScript== 18 | 19 | // this UserScript DOES NOT work on Firefox with Violentmonkey or Greasemonkey due to a bug that makes it impossible 20 | // to overwrite stuff on the window on sites that use CSP. Use Tampermonkey or use a chromium based browser 21 | // https://github.com/violentmonkey/violentmonkey/issues/997 22 | 23 | // this is a compiled and minified version of Suncord. For the source code, visit the GitHub repo 24 | -------------------------------------------------------------------------------- /packages/vencord-types/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.*ignore 3 | !package.json 4 | !*.md 5 | !prepare.ts 6 | !index.d.ts 7 | !globals.d.ts 8 | -------------------------------------------------------------------------------- /packages/vencord-types/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | prepare.ts 3 | .gitignore 4 | HOW2PUB.md 5 | -------------------------------------------------------------------------------- /packages/vencord-types/HOW2PUB.md: -------------------------------------------------------------------------------- 1 | # How to publish 2 | 3 | 1. run `pnpm generateTypes` in the project root 4 | 2. bump package.json version 5 | 3. npm publish 6 | -------------------------------------------------------------------------------- /packages/vencord-types/README.md: -------------------------------------------------------------------------------- 1 | # Vencord Types 2 | 3 | Typings for Vencord's api, published to npm 4 | 5 | ```sh 6 | npm i @vencord/types 7 | 8 | yarn add @vencord/types 9 | 10 | pnpm add @vencord/types 11 | ``` 12 | -------------------------------------------------------------------------------- /packages/vencord-types/globals.d.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | declare global { 20 | export var VencordNative: typeof import("./VencordNative").default; 21 | export var Vencord: typeof import("./Vencord"); 22 | } 23 | 24 | export { }; 25 | -------------------------------------------------------------------------------- /packages/vencord-types/index.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | /// 4 | /// 5 | /// 6 | -------------------------------------------------------------------------------- /packages/vencord-types/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@vencord/types", 3 | "private": false, 4 | "version": "0.1.3", 5 | "description": "", 6 | "types": "index.d.ts", 7 | "scripts": { 8 | "prepublishOnly": "tsx ./prepare.ts", 9 | "test": "echo \"Error: no test specified\" && exit 1" 10 | }, 11 | "keywords": [], 12 | "author": "Vencord", 13 | "license": "GPL-3.0", 14 | "devDependencies": { 15 | "@types/fs-extra": "^11.0.4", 16 | "fs-extra": "^11.2.0", 17 | "tsx": "^3.12.6" 18 | }, 19 | "dependencies": { 20 | "@types/lodash": "^4.14.191", 21 | "@types/node": "^18.11.18", 22 | "@types/react": "^18.2.0", 23 | "@types/react-dom": "^18.0.10", 24 | "discord-types": "^1.3.26", 25 | "standalone-electron-types": "^1.0.0", 26 | "type-fest": "^3.5.3" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /patches/eslint-plugin-path-alias@1.0.0.patch: -------------------------------------------------------------------------------- 1 | diff --git a/lib/rules/no-relative.js b/lib/rules/no-relative.js 2 | index 71594c83f1f4f733ffcc6047d7f7084348335dbe..d8623d87c89499c442171db3272cba07c9efabbe 100644 3 | --- a/lib/rules/no-relative.js 4 | +++ b/lib/rules/no-relative.js 5 | @@ -41,7 +41,7 @@ module.exports = { 6 | ImportDeclaration(node) { 7 | const importPath = node.source.value; 8 | 9 | - if (!/^(\.?\.\/)/.test(importPath)) { 10 | + if (!/^(\.\.\/)/.test(importPath)) { 11 | return; 12 | } 13 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - packages/* 3 | -------------------------------------------------------------------------------- /scripts/build/inject/react.mjs: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export const VencordFragment = /* #__PURE__*/ Symbol.for("react.fragment"); 20 | export let VencordCreateElement = 21 | (...args) => (VencordCreateElement = Vencord.Webpack.Common.React.createElement)(...args); 22 | -------------------------------------------------------------------------------- /scripts/build/module/style.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | (window.VencordStyles ??= new Map()).set(STYLE_NAME, { 20 | name: STYLE_NAME, 21 | source: STYLE_SOURCE, 22 | classNames: {}, 23 | dom: null, 24 | }); 25 | 26 | export default STYLE_NAME; 27 | -------------------------------------------------------------------------------- /scripts/build/tsconfig.esbuild.json: -------------------------------------------------------------------------------- 1 | // Work around https://github.com/evanw/esbuild/issues/2460 2 | { 3 | "extends": "../../tsconfig.json", 4 | "compilerOptions": { 5 | "jsx": "react" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /scripts/checkNodeVersion.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | if (Number(process.versions.node.split(".")[0]) < 18) 20 | throw `Your node version (${process.version}) is too old, please update to v18 or higher https://nodejs.org/en/download/`; 21 | -------------------------------------------------------------------------------- /scripts/header-new.txt: -------------------------------------------------------------------------------- 1 | Vencord, a Discord client mod 2 | Copyright (c) {year} {author} 3 | SPDX-License-Identifier: GPL-3.0-or-later 4 | -------------------------------------------------------------------------------- /scripts/header-old.txt: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) {year} {author} 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | -------------------------------------------------------------------------------- /scripts/suppressExperimentalWarnings.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | process.emit = (originalEmit => function (name, data) { 20 | if (name === "warning" && data?.name === "ExperimentalWarning") 21 | return false; 22 | 23 | return originalEmit.apply(process, arguments); 24 | })(process.emit); 25 | -------------------------------------------------------------------------------- /scripts/utils.mjs: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | /** 20 | * @param {string} filePath 21 | * @returns {string | null} 22 | */ 23 | export function getPluginTarget(filePath) { 24 | const pathParts = filePath.split(/[/\\]/); 25 | if (/^index\.tsx?$/.test(pathParts.at(-1))) pathParts.pop(); 26 | 27 | const identifier = pathParts.at(-1).replace(/\.tsx?$/, ""); 28 | const identiferBits = identifier.split("."); 29 | return identiferBits.length === 1 ? null : identiferBits.at(-1); 30 | } 31 | -------------------------------------------------------------------------------- /src/api/ChatButton.css: -------------------------------------------------------------------------------- 1 | .vc-chatbar-button { 2 | display: flex; 3 | align-items: center; 4 | } 5 | -------------------------------------------------------------------------------- /src/api/Notifications/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./Notifications"; 20 | -------------------------------------------------------------------------------- /src/assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/verticalsync/Suncord/e9682235804d61a14652903d9751bd456c06c4bb/src/assets/icon.png -------------------------------------------------------------------------------- /src/components/Badge.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export function Badge({ text, color }): JSX.Element { 20 | return ( 21 |
26 | {text} 27 |
28 | ); 29 | } 30 | -------------------------------------------------------------------------------- /src/components/CodeBlock.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { findByPropsLazy } from "@webpack"; 8 | import { Parser } from "@webpack/common"; 9 | 10 | const CodeContainerClasses = findByPropsLazy("markup", "codeContainer"); 11 | 12 | /** 13 | * Renders code in a Discord codeblock 14 | */ 15 | export function CodeBlock(props: { content?: string, lang: string; }) { 16 | return ( 17 |
18 | {Parser.defaultRules.codeBlock.react(props, null, {})} 19 |
20 | ); 21 | } 22 | -------------------------------------------------------------------------------- /src/components/ErrorCard.css: -------------------------------------------------------------------------------- 1 | .vc-error-card { 2 | padding: 2em; 3 | background-color: #e7828430; 4 | border: 1px solid #e78284; 5 | border-radius: 5px; 6 | color: var(--text-normal, white); 7 | } 8 | -------------------------------------------------------------------------------- /src/components/ErrorCard.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import "./ErrorCard.css"; 20 | 21 | import { classes } from "@utils/misc"; 22 | import type { HTMLProps } from "react"; 23 | 24 | export function ErrorCard(props: React.PropsWithChildren>) { 25 | return ( 26 |
27 | {props.children} 28 |
29 | ); 30 | } 31 | -------------------------------------------------------------------------------- /src/components/ExpandableHeader.css: -------------------------------------------------------------------------------- 1 | .vc-expandableheader-center-flex { 2 | display: flex; 3 | justify-items: center; 4 | align-items: center; 5 | } 6 | 7 | .vc-expandableheader-btn { 8 | all: unset; 9 | cursor: pointer; 10 | width: 24px; 11 | height: 24px; 12 | } 13 | -------------------------------------------------------------------------------- /src/components/Grid.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { CSSProperties } from "react"; 8 | 9 | interface Props { 10 | columns: number; 11 | gap?: string; 12 | inline?: boolean; 13 | } 14 | 15 | export function Grid(props: Props & JSX.IntrinsicElements["div"]) { 16 | const style: CSSProperties = { 17 | display: props.inline ? "inline-grid" : "grid", 18 | gridTemplateColumns: `repeat(${props.columns}, 1fr)`, 19 | gap: props.gap, 20 | ...props.style 21 | }; 22 | 23 | return ( 24 |
25 | {props.children} 26 |
27 | ); 28 | } 29 | -------------------------------------------------------------------------------- /src/components/Link.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { React } from "@webpack/common"; 20 | 21 | interface Props extends React.DetailedHTMLProps, HTMLAnchorElement> { 22 | disabled?: boolean; 23 | } 24 | 25 | export function Link(props: React.PropsWithChildren) { 26 | if (props.disabled) { 27 | props.style ??= {}; 28 | props.style.pointerEvents = "none"; 29 | props["aria-disabled"] = true; 30 | } 31 | return ( 32 | 33 | {props.children} 34 | 35 | ); 36 | } 37 | -------------------------------------------------------------------------------- /src/components/PluginSettings/LinkIconButton.css: -------------------------------------------------------------------------------- 1 | .vc-settings-modal-link-icon { 2 | height: 32px; 3 | width: 32px; 4 | border-radius: 50%; 5 | border: 4px solid var(--background-tertiary); 6 | box-sizing: border-box 7 | } 8 | 9 | .vc-settings-modal-links { 10 | display: flex; 11 | gap: 0.2em; 12 | } 13 | -------------------------------------------------------------------------------- /src/components/PluginSettings/LinkIconButton.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import "./LinkIconButton.css"; 8 | 9 | import { MaskedLink, Tooltip } from "@webpack/common"; 10 | 11 | import { GithubIcon, WebsiteIcon } from ".."; 12 | 13 | export function GithubLinkIcon() { 14 | return ; 15 | } 16 | 17 | export function WebsiteLinkIcon() { 18 | return ; 19 | } 20 | 21 | interface Props { 22 | text: string; 23 | href: string; 24 | } 25 | 26 | function LinkIcon({ text, href, Icon }: Props & { Icon: React.ComponentType; }) { 27 | return ( 28 | 29 | {props => ( 30 | 31 | 32 | 33 | )} 34 | 35 | ); 36 | } 37 | 38 | export const WebsiteButton = (props: Props) => ; 39 | export const GithubButton = (props: Props) => ; 40 | -------------------------------------------------------------------------------- /src/components/PluginSettings/PluginModal.css: -------------------------------------------------------------------------------- 1 | .vc-plugin-modal-info { 2 | align-items: center; 3 | } 4 | 5 | .vc-plugin-modal-description { 6 | flex-grow: 1; 7 | } 8 | -------------------------------------------------------------------------------- /src/components/PluginSettings/components/SettingCustomComponent.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { PluginOptionComponent } from "@utils/types"; 20 | 21 | import { ISettingElementProps } from "."; 22 | 23 | export function SettingCustomComponent({ option, onChange, onError }: ISettingElementProps) { 24 | return option.component({ setValue: onChange, setError: onError, option }); 25 | } 26 | -------------------------------------------------------------------------------- /src/components/PluginSettings/contributorModal.css: -------------------------------------------------------------------------------- 1 | .vc-author-modal-root { 2 | padding: 1em; 3 | } 4 | 5 | .vc-author-modal-header { 6 | display: flex; 7 | align-items: center; 8 | margin-bottom: 1em; 9 | } 10 | 11 | .vc-author-modal-name { 12 | text-transform: none; 13 | flex-grow: 0; 14 | background: var(--background-tertiary); 15 | border-radius: 0 9999px 9999px 0; 16 | padding: 6px 0.8em 6px 0.5em; 17 | font-size: 20px; 18 | height: 20px; 19 | position: relative; 20 | text-wrap: nowrap; 21 | } 22 | 23 | .vc-author-modal-name::before { 24 | content: ""; 25 | display: block; 26 | position: absolute; 27 | height: 100%; 28 | width: 32px; 29 | background: var(--background-tertiary); 30 | z-index: -1; 31 | left: -32px; 32 | top: 0; 33 | border-top-left-radius: 9999px; 34 | border-bottom-left-radius: 9999px; 35 | } 36 | 37 | .vc-author-modal-avatar { 38 | height: 32px; 39 | width: 32px; 40 | border-radius: 50%; 41 | } 42 | 43 | .vc-author-modal-links { 44 | margin-left: auto; 45 | } 46 | 47 | .vc-author-modal-plugins { 48 | display: grid; 49 | gap: 0.5em; 50 | margin-top: 0.75em; 51 | } 52 | -------------------------------------------------------------------------------- /src/components/Switch.css: -------------------------------------------------------------------------------- 1 | .vc-switch-slider { 2 | transition: 100ms transform ease-in-out; 3 | } 4 | -------------------------------------------------------------------------------- /src/components/VencordSettings/PluginsTab.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import PluginSettings from "@components/PluginSettings"; 20 | 21 | import { wrapTab } from "./shared"; 22 | 23 | export default wrapTab(PluginSettings, "Plugins"); 24 | -------------------------------------------------------------------------------- /src/components/VencordSettings/quickActions.css: -------------------------------------------------------------------------------- 1 | .vc-settings-quickActions-card { 2 | display: grid; 3 | grid-template-columns: repeat(auto-fill, minmax(200px, max-content)); 4 | gap: 0.5em; 5 | justify-content: center; 6 | padding: 0.5em 0; 7 | margin-bottom: 1em; 8 | } 9 | 10 | .vc-settings-quickActions-pill { 11 | all: unset; 12 | background: var(--background-secondary); 13 | color: var(--header-secondary); 14 | display: flex; 15 | align-items: center; 16 | gap: 0.5em; 17 | padding: 8px 12px; 18 | border-radius: 9999px; 19 | } 20 | 21 | .vc-settings-quickActions-pill:hover { 22 | background: var(--background-secondary-alt); 23 | } 24 | 25 | .vc-settings-quickActions-pill:focus-visible { 26 | outline: 2px solid var(--focus-primary); 27 | outline-offset: 2px; 28 | } 29 | 30 | .vc-settings-quickActions-img { 31 | width: 24px; 32 | height: 24px; 33 | } 34 | -------------------------------------------------------------------------------- /src/components/VencordSettings/quickActions.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import "./quickActions.css"; 8 | 9 | import { classNameFactory } from "@api/Styles"; 10 | import { Card } from "@webpack/common"; 11 | import type { ComponentType, PropsWithChildren, ReactNode } from "react"; 12 | 13 | const cl = classNameFactory("vc-settings-quickActions-"); 14 | 15 | export interface QuickActionProps { 16 | Icon: ComponentType<{ className?: string; }>; 17 | text: ReactNode; 18 | action?: () => void; 19 | disabled?: boolean; 20 | } 21 | 22 | export function QuickAction(props: QuickActionProps) { 23 | const { Icon, action, text, disabled } = props; 24 | 25 | return ( 26 | 30 | ); 31 | } 32 | 33 | export function QuickActionCard(props: PropsWithChildren) { 34 | return ( 35 | 36 | {props.children} 37 | 38 | ); 39 | } 40 | -------------------------------------------------------------------------------- /src/components/VencordSettings/themesStyles.css: -------------------------------------------------------------------------------- 1 | .vc-settings-theme-grid { 2 | display: grid; 3 | grid-gap: 16px; 4 | grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); 5 | } 6 | 7 | .vc-settings-theme-card { 8 | display: flex; 9 | flex-direction: column; 10 | background-color: var(--background-secondary-alt); 11 | color: var(--interactive-active); 12 | border-radius: 8px; 13 | padding: 1em; 14 | width: 100%; 15 | transition: 0.1s ease-out; 16 | transition-property: box-shadow, transform, background, opacity; 17 | } 18 | 19 | .vc-settings-theme-card-text { 20 | text-overflow: ellipsis; 21 | height: 1.2em; 22 | margin-bottom: 2px; 23 | white-space: nowrap; 24 | overflow: hidden; 25 | } 26 | 27 | .vc-settings-theme-author::before { 28 | content: "by "; 29 | } 30 | -------------------------------------------------------------------------------- /src/components/handleComponentFailed.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { maybePromptToUpdate } from "@utils/updater"; 20 | 21 | export function handleComponentFailed() { 22 | maybePromptToUpdate( 23 | "Uh Oh! Failed to render this Page." + 24 | " However, there is an update available that might fix it." + 25 | " Would you like to update and restart now?" 26 | ); 27 | } 28 | -------------------------------------------------------------------------------- /src/components/iconStyles.css: -------------------------------------------------------------------------------- 1 | .vc-open-external-icon { 2 | transform: rotate(45deg); 3 | } 4 | 5 | .vc-owner-crown-icon { 6 | color: var(--text-warning); 7 | } 8 | -------------------------------------------------------------------------------- /src/components/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | export * from "./Badge"; 8 | export * from "./CheckedTextInput"; 9 | export * from "./CodeBlock"; 10 | export * from "./DonateButton"; 11 | export { default as ErrorBoundary } from "./ErrorBoundary"; 12 | export * from "./ErrorCard"; 13 | export * from "./ExpandableHeader"; 14 | export * from "./Flex"; 15 | export * from "./Heart"; 16 | export * from "./Icons"; 17 | export * from "./Link"; 18 | export * from "./Switch"; 19 | -------------------------------------------------------------------------------- /src/main/updater/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | if (!IS_UPDATER_DISABLED) 20 | require(IS_STANDALONE ? "./http" : "./git"); 21 | -------------------------------------------------------------------------------- /src/plugins/_api/badges/fixBadgeOverflow.css: -------------------------------------------------------------------------------- 1 | [class*="profileBadges"] { 2 | flex: none; 3 | } 4 | -------------------------------------------------------------------------------- /src/plugins/_api/chatButtons.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { Devs } from "@utils/constants"; 8 | import definePlugin from "@utils/types"; 9 | 10 | export default definePlugin({ 11 | name: "ChatInputButtonAPI", 12 | description: "API to add buttons to the chat input", 13 | authors: [Devs.Ven], 14 | 15 | patches: [{ 16 | find: '"sticker")', 17 | replacement: { 18 | match: /return\(!\i\.\i&&(?=\(\i\.isDM.+?(\i)\.push\(.{0,50}"gift")/, 19 | replace: "$&(Vencord.Api.ChatButtons._injectButtons($1,arguments[0]),true)&&" 20 | } 21 | }] 22 | }); 23 | -------------------------------------------------------------------------------- /src/plugins/betterGifPicker/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { Devs } from "@utils/constants"; 8 | import definePlugin from "@utils/types"; 9 | 10 | export default definePlugin({ 11 | name: "BetterGifPicker", 12 | description: "Makes the gif picker open the favourite category by default", 13 | authors: [Devs.Samwich], 14 | patches: [ 15 | { 16 | find: '"state",{resultType:', 17 | replacement: [{ 18 | match: /(?<="state",{resultType:)null/, 19 | replace: '"Favorites"' 20 | }] 21 | } 22 | ] 23 | }); 24 | -------------------------------------------------------------------------------- /src/plugins/betterSessions/components/RenameButton.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { openModal } from "@utils/modal"; 8 | import { Button } from "@webpack/common"; 9 | 10 | import { SessionInfo } from "../types"; 11 | import { RenameModal } from "./RenameModal"; 12 | 13 | export function RenameButton({ session, state }: { session: SessionInfo["session"], state: [string, React.Dispatch>]; }) { 14 | return ( 15 | 36 | ); 37 | } 38 | -------------------------------------------------------------------------------- /src/plugins/betterSessions/types.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export interface SessionInfo { 20 | session: { 21 | id_hash: string; 22 | approx_last_used_time: Date; 23 | client_info: { 24 | os: string; 25 | platform: string; 26 | location: string; 27 | }; 28 | }, 29 | current?: boolean; 30 | } 31 | 32 | export type Session = SessionInfo["session"]; 33 | -------------------------------------------------------------------------------- /src/plugins/biggerStreamPreview/webpack/stores.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { findStoreLazy } from "@webpack"; 20 | 21 | import * as t from "./types/stores"; 22 | 23 | export const ApplicationStreamPreviewStore: t.ApplicationStreamPreviewStore = findStoreLazy("ApplicationStreamPreviewStore"); 24 | export const ApplicationStreamingStore: t.ApplicationStreamingStore = findStoreLazy("ApplicationStreamingStore"); 25 | -------------------------------------------------------------------------------- /src/plugins/clientTheme/clientTheme.css: -------------------------------------------------------------------------------- 1 | .client-theme-settings { 2 | display: flex; 3 | flex-direction: column; 4 | } 5 | 6 | .client-theme-container { 7 | display: flex; 8 | flex-direction: row; 9 | justify-content: space-between; 10 | } 11 | 12 | .client-theme-settings-labels { 13 | display: flex; 14 | flex-direction: column; 15 | justify-content: flex-start; 16 | } 17 | 18 | .client-theme-container > [class^="colorSwatch"] > [class^="swatch"] { 19 | border: thin solid var(--background-modifier-accent) !important; 20 | } 21 | 22 | .client-theme-warning * { 23 | color: var(--text-danger); 24 | } 25 | 26 | .client-theme-contrast-warning { 27 | background-color: var(--background-primary); 28 | padding: 0.5rem; 29 | border-radius: .5rem; 30 | display: flex; 31 | flex-direction: row; 32 | justify-content: space-between; 33 | align-items: center; 34 | } 35 | -------------------------------------------------------------------------------- /src/plugins/consoleShortcuts/native.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { IpcMainInvokeEvent } from "electron"; 8 | 9 | export function initDevtoolsOpenEagerLoad(e: IpcMainInvokeEvent) { 10 | const handleDevtoolsOpened = () => e.sender.executeJavaScript("Vencord.Plugins.plugins.ConsoleShortcuts.eagerLoad(true)"); 11 | 12 | if (e.sender.isDevToolsOpened()) 13 | handleDevtoolsOpened(); 14 | else 15 | e.sender.once("devtools-opened", () => handleDevtoolsOpened()); 16 | } 17 | -------------------------------------------------------------------------------- /src/plugins/dearrow/styles.css: -------------------------------------------------------------------------------- 1 | .vc-dearrow-toggle-off svg { 2 | filter: grayscale(1); 3 | } 4 | 5 | .vc-dearrow-toggle-on, .vc-dearrow-toggle-off { 6 | all: unset; 7 | display: inline; 8 | cursor: pointer; 9 | position: absolute; 10 | top: 0.75rem; 11 | right: 0.75rem; 12 | } 13 | -------------------------------------------------------------------------------- /src/plugins/decor/lib/constants.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | export const BASE_URL = "https://decor.fieryflames.dev"; 8 | export const API_URL = BASE_URL + "/api"; 9 | export const AUTHORIZE_URL = API_URL + "/authorize"; 10 | export const CDN_URL = "https://ugc.decor.fieryflames.dev"; 11 | export const CLIENT_ID = "1096966363416899624"; 12 | export const SKU_ID = "100101099111114"; // decor in ascii numbers 13 | export const RAW_SKU_ID = "11497119"; // raw in ascii numbers 14 | export const GUILD_ID = "1096357702931841148"; 15 | export const INVITE_KEY = "dXp2SdxDcP"; 16 | export const DECORATION_FETCH_COOLDOWN = 1000 * 60 * 60 * 4; // 4 hours 17 | -------------------------------------------------------------------------------- /src/plugins/decor/lib/utils/decoration.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { AvatarDecoration } from "../../"; 8 | import { Decoration } from "../api"; 9 | import { SKU_ID } from "../constants"; 10 | 11 | export function decorationToAsset(decoration: Decoration) { 12 | return `${decoration.animated ? "a_" : ""}${decoration.hash}`; 13 | } 14 | 15 | export function decorationToAvatarDecoration(decoration: Decoration): AvatarDecoration { 16 | return { asset: decorationToAsset(decoration), skuId: SKU_ID }; 17 | } 18 | -------------------------------------------------------------------------------- /src/plugins/decor/ui/components/DecorDecorationGridDecoration.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { ContextMenuApi } from "@webpack/common"; 8 | import type { HTMLProps } from "react"; 9 | 10 | import { Decoration } from "../../lib/api"; 11 | import { decorationToAvatarDecoration } from "../../lib/utils/decoration"; 12 | import { DecorationGridDecoration } from "."; 13 | import DecorationContextMenu from "./DecorationContextMenu"; 14 | 15 | interface DecorDecorationGridDecorationProps extends HTMLProps { 16 | decoration: Decoration; 17 | isSelected: boolean; 18 | onSelect: () => void; 19 | } 20 | 21 | export default function DecorDecorationGridDecoration(props: DecorDecorationGridDecorationProps) { 22 | const { decoration } = props; 23 | 24 | return { 27 | ContextMenuApi.openContextMenu(e, () => ( 28 | 31 | )); 32 | }} 33 | avatarDecoration={decorationToAvatarDecoration(decoration)} 34 | />; 35 | } 36 | -------------------------------------------------------------------------------- /src/plugins/decor/ui/components/DecorationGridCreate.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { PlusIcon } from "@components/Icons"; 8 | import { i18n, Text } from "@webpack/common"; 9 | import { HTMLProps } from "react"; 10 | 11 | import { DecorationGridItem } from "."; 12 | 13 | type DecorationGridCreateProps = HTMLProps & { 14 | onSelect: () => void; 15 | }; 16 | 17 | export default function DecorationGridCreate(props: DecorationGridCreateProps) { 18 | return 22 | 23 | 27 | {i18n.Messages.CREATE} 28 | 29 | ; 30 | } 31 | -------------------------------------------------------------------------------- /src/plugins/decor/ui/components/DecorationGridNone.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { NoEntrySignIcon } from "@components/Icons"; 8 | import { i18n, Text } from "@webpack/common"; 9 | import { HTMLProps } from "react"; 10 | 11 | import { DecorationGridItem } from "."; 12 | 13 | type DecorationGridNoneProps = HTMLProps & { 14 | isSelected: boolean; 15 | onSelect: () => void; 16 | }; 17 | 18 | export default function DecorationGridNone(props: DecorationGridNoneProps) { 19 | return 22 | 23 | 27 | {i18n.Messages.NONE} 28 | 29 | ; 30 | } 31 | -------------------------------------------------------------------------------- /src/plugins/decor/ui/components/Grid.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { React } from "@webpack/common"; 8 | 9 | import { cl } from "../"; 10 | 11 | export interface GridProps { 12 | renderItem: (item: ItemT) => JSX.Element; 13 | getItemKey: (item: ItemT) => string; 14 | itemKeyPrefix?: string; 15 | items: Array; 16 | } 17 | 18 | export default function Grid({ renderItem, getItemKey, itemKeyPrefix: ikp, items }: GridProps) { 19 | return
20 | {items.map(item => 21 | 24 | {renderItem(item)} 25 | 26 | )} 27 |
; 28 | } 29 | -------------------------------------------------------------------------------- /src/plugins/decor/ui/components/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { findComponentByCode, LazyComponentWebpack } from "@webpack"; 8 | import { React } from "@webpack/common"; 9 | import type { ComponentType, HTMLProps, PropsWithChildren } from "react"; 10 | 11 | import { AvatarDecoration } from "../.."; 12 | 13 | type DecorationGridItemComponent = ComponentType> & { 14 | onSelect: () => void, 15 | isSelected: boolean, 16 | }>; 17 | 18 | export let DecorationGridItem: DecorationGridItemComponent; 19 | export const setDecorationGridItem = v => DecorationGridItem = v; 20 | 21 | export const AvatarDecorationModalPreview = LazyComponentWebpack(() => { 22 | const component = findComponentByCode(".shopPreviewBanner"); 23 | return React.memo(component); 24 | }); 25 | 26 | type DecorationGridDecorationComponent = React.ComponentType & { 27 | avatarDecoration: AvatarDecoration; 28 | onSelect: () => void, 29 | isSelected: boolean, 30 | }>; 31 | 32 | export let DecorationGridDecoration: DecorationGridDecorationComponent; 33 | export const setDecorationGridDecoration = v => DecorationGridDecoration = v; 34 | -------------------------------------------------------------------------------- /src/plugins/decor/ui/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { classNameFactory } from "@api/Styles"; 8 | import { extractAndLoadChunksLazy, findByPropsLazy } from "@webpack"; 9 | 10 | export const cl = classNameFactory("vc-decor-"); 11 | export const DecorationModalStyles = findByPropsLazy("modalFooterShopButton"); 12 | 13 | export const requireAvatarDecorationModal = extractAndLoadChunksLazy([".COLLECTIBLES_SHOP_FULLSCREEN&&"]); 14 | export const requireCreateStickerModal = extractAndLoadChunksLazy(["stickerInspected]:"]); 15 | -------------------------------------------------------------------------------- /src/plugins/dontRoundMyTimestamps/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { Devs } from "@utils/constants"; 20 | import definePlugin from "@utils/types"; 21 | import { moment } from "@webpack/common"; 22 | 23 | export default definePlugin({ 24 | name: "DontRoundMyTimestamps", 25 | authors: [Devs.Lexi], 26 | description: "Always rounds relative timestamps down, so 7.6y becomes 7y instead of 8y", 27 | 28 | start() { 29 | moment.relativeTimeRounding(Math.floor); 30 | }, 31 | 32 | stop() { 33 | moment.relativeTimeRounding(Math.round); 34 | } 35 | }); 36 | -------------------------------------------------------------------------------- /src/plugins/experiments/hideBugReport.css: -------------------------------------------------------------------------------- 1 | #staff-help-popout-staff-help-bug-reporter { 2 | display: none; 3 | } 4 | -------------------------------------------------------------------------------- /src/plugins/fakeProfileThemes/index.css: -------------------------------------------------------------------------------- 1 | .vc-fpt-preview * { 2 | pointer-events: none; 3 | } 4 | -------------------------------------------------------------------------------- /src/plugins/fixSpotifyEmbeds.desktop/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { definePluginSettings } from "@api/Settings"; 8 | import { makeRange } from "@components/PluginSettings/components"; 9 | import { Devs } from "@utils/constants"; 10 | import definePlugin, { OptionType } from "@utils/types"; 11 | 12 | // The entire code of this plugin can be found in ipcPlugins 13 | export default definePlugin({ 14 | name: "FixSpotifyEmbeds", 15 | description: "Fixes spotify embeds being incredibly loud by letting you customise the volume", 16 | authors: [Devs.Ven], 17 | settings: definePluginSettings({ 18 | volume: { 19 | type: OptionType.SLIDER, 20 | description: "The volume % to set for spotify embeds. Anything above 10% is veeeery loud", 21 | markers: makeRange(0, 100, 10), 22 | stickToMarkers: false, 23 | default: 10 24 | } 25 | }) 26 | }); 27 | -------------------------------------------------------------------------------- /src/plugins/fixSpotifyEmbeds.desktop/native.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { RendererSettings } from "@main/settings"; 8 | import { app } from "electron"; 9 | 10 | app.on("browser-window-created", (_, win) => { 11 | win.webContents.on("frame-created", (_, { frame }) => { 12 | frame.once("dom-ready", () => { 13 | if (frame.url.startsWith("https://open.spotify.com/embed/")) { 14 | const settings = RendererSettings.store.plugins?.FixSpotifyEmbeds; 15 | if (!settings?.enabled) return; 16 | 17 | frame.executeJavaScript(` 18 | const original = Audio.prototype.play; 19 | Audio.prototype.play = function() { 20 | this.volume = ${(settings.volume / 100) || 0.1}; 21 | return original.apply(this, arguments); 22 | } 23 | `); 24 | } 25 | }); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/plugins/fixYoutubeEmbeds.desktop/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { Devs } from "@utils/constants"; 8 | import definePlugin from "@utils/types"; 9 | 10 | export default definePlugin({ 11 | name: "FixYoutubeEmbeds", 12 | description: "Bypasses youtube videos being blocked from display on Discord (for example by UMG)", 13 | authors: [Devs.coolelectronics] 14 | }); 15 | -------------------------------------------------------------------------------- /src/plugins/fixYoutubeEmbeds.desktop/native.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { RendererSettings } from "@main/settings"; 8 | import { app } from "electron"; 9 | 10 | app.on("browser-window-created", (_, win) => { 11 | win.webContents.on("frame-created", (_, { frame }) => { 12 | frame.once("dom-ready", () => { 13 | if (frame.url.startsWith("https://www.youtube.com/")) { 14 | const settings = RendererSettings.store.plugins?.FixYoutubeEmbeds; 15 | if (!settings?.enabled) return; 16 | 17 | frame.executeJavaScript(` 18 | new MutationObserver(() => { 19 | if( 20 | document.querySelector('div.ytp-error-content-wrap-subreason a[href*="www.youtube.com/watch?v="]') 21 | ) location.reload() 22 | }).observe(document.body, { childList: true, subtree:true }); 23 | `); 24 | } 25 | }); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/plugins/gameActivityToggle/style.css: -------------------------------------------------------------------------------- 1 | [class*="panels"] [class*="avatarWrapper"] { 2 | min-width: 88px; 3 | } 4 | -------------------------------------------------------------------------------- /src/plugins/iLoveSpam/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { Devs } from "@utils/constants"; 20 | import definePlugin from "@utils/types"; 21 | 22 | export default definePlugin({ 23 | name: "iLoveSpam", 24 | description: "Do not hide messages from 'likely spammers'", 25 | authors: [Devs.botato, Devs.Nyako], 26 | patches: [ 27 | { 28 | find: "hasFlag:{writable", 29 | replacement: { 30 | match: /if\((\i)<=(?:1<<30|1073741824)\)return/, 31 | replace: "if($1===(1<<20))return false;$&", 32 | }, 33 | }, 34 | ], 35 | }); 36 | -------------------------------------------------------------------------------- /src/plugins/imageLink/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { Devs } from "@utils/constants"; 8 | import definePlugin from "@utils/types"; 9 | 10 | export default definePlugin({ 11 | name: "ImageLink", 12 | description: "Never hide image links in messages, even if it's the only content", 13 | authors: [Devs.Kyuuhachi, Devs.Sqaaakoi], 14 | 15 | patches: [ 16 | { 17 | find: "unknownUserMentionPlaceholder:", 18 | replacement: { 19 | // SimpleEmbedTypes.has(embed.type) && isEmbedInline(embed) 20 | match: /\i\.has\(\i\.type\)&&\(0,\i\.\i\)\(\i\)/, 21 | replace: "false", 22 | } 23 | } 24 | ] 25 | }); 26 | -------------------------------------------------------------------------------- /src/plugins/imageZoom/constants.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export const ELEMENT_ID = "vc-imgzoom-magnify-modal"; 20 | -------------------------------------------------------------------------------- /src/plugins/imageZoom/styles.css: -------------------------------------------------------------------------------- 1 | .vc-imgzoom-lens { 2 | position: absolute; 3 | inset: 0; 4 | z-index: 9999; 5 | border: 2px solid grey; 6 | border-radius: 50%; 7 | overflow: hidden; 8 | cursor: none; 9 | box-shadow: inset 0 0 10px 2px grey; 10 | filter: drop-shadow(0 0 2px grey); 11 | pointer-events: none; 12 | } 13 | 14 | .vc-imgzoom-square { 15 | border-radius: 0; 16 | } 17 | 18 | .vc-imgzoom-nearest-neighbor>img { 19 | image-rendering: pixelated; 20 | 21 | /* https://googlechrome.github.io/samples/image-rendering-pixelated/index.html */ 22 | } 23 | 24 | /* make the carousel take up less space so we can click the backdrop and exit out of it */ 25 | [class*="modalCarouselWrapper_"] { 26 | top: 0 !important; 27 | } 28 | 29 | [class*="carouselModal_"] { 30 | height: 0 !important; 31 | } 32 | -------------------------------------------------------------------------------- /src/plugins/imageZoom/utils/waitFor.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export function waitFor(condition: () => boolean, cb: () => void) { 20 | if (condition()) cb(); 21 | else requestAnimationFrame(() => waitFor(condition, cb)); 22 | } 23 | -------------------------------------------------------------------------------- /src/plugins/memberCount/style.css: -------------------------------------------------------------------------------- 1 | .vc-membercount-widget { 2 | display: flex; 3 | align-content: center; 4 | 5 | --color-online: var(--green-360); 6 | --color-total: var(--primary-400); 7 | } 8 | 9 | .vc-membercount-tooltip { 10 | margin-top: 0.25em; 11 | margin-left: 2px; 12 | } 13 | 14 | .vc-membercount-member-list { 15 | justify-content: center; 16 | margin-top: 1em; 17 | padding-inline: 1em; 18 | } 19 | 20 | .vc-membercount-online { 21 | color: var(--color-online); 22 | } 23 | 24 | .vc-membercount-total { 25 | color: var(--color-total); 26 | } 27 | 28 | .vc-membercount-online-dot { 29 | background-color: var(--color-online); 30 | display: inline-block; 31 | width: 12px; 32 | height: 12px; 33 | border-radius: 50%; 34 | margin-right: 0.5em; 35 | } 36 | 37 | .vc-membercount-total-dot { 38 | display: inline-block; 39 | width: 6px; 40 | height: 6px; 41 | border-radius: 50%; 42 | border: 3px solid var(--color-total); 43 | margin: 0 0.5em 0 1em; 44 | } 45 | -------------------------------------------------------------------------------- /src/plugins/mentionAvatars/styles.css: -------------------------------------------------------------------------------- 1 | .vc-mentionAvatars-avatar { 2 | vertical-align: middle; 3 | width: 1em !important; /* insane discord sets width: 100% in channel topic */ 4 | height: 1em; 5 | margin: 0 4px 0.2rem 2px; 6 | border-radius: 50%; 7 | box-sizing: border-box; 8 | } 9 | -------------------------------------------------------------------------------- /src/plugins/messageLogger/deleteStyleOverlay.css: -------------------------------------------------------------------------------- 1 | .messagelogger-deleted { 2 | background-color: hsla(var(--red-430-hsl, 0 85% 61%) / 15%) !important; 3 | } 4 | -------------------------------------------------------------------------------- /src/plugins/messageLogger/deleteStyleText.css: -------------------------------------------------------------------------------- 1 | /* Message content highlighting */ 2 | .messagelogger-deleted [class*="contents"] > :is(div, h1, h2, h3, p) { 3 | color: var(--status-danger, #f04747) !important; 4 | } 5 | 6 | /* Markdown title highlighting */ 7 | .messagelogger-deleted [class*="contents"] :is(h1, h2, h3) { 8 | color: var(--status-danger, #f04747) !important; 9 | } 10 | 11 | /* Bot "thinking" text highlighting */ 12 | .messagelogger-deleted [class*="colorStandard"] { 13 | color: var(--status-danger, #f04747) !important; 14 | } 15 | 16 | /* Embed highlighting */ 17 | .messagelogger-deleted article :is(div, span, h1, h2, h3, p) { 18 | color: var(--status-danger, #f04747) !important; 19 | } 20 | 21 | .messagelogger-deleted a { 22 | color: var(--red-460, #be3535) !important; 23 | text-decoration: underline; 24 | } 25 | -------------------------------------------------------------------------------- /src/plugins/messageLogger/messageLogger.css: -------------------------------------------------------------------------------- 1 | .messagelogger-deleted [class^="buttons"] { 2 | display: none; 3 | } 4 | 5 | .messagelogger-deleted 6 | :is( 7 | video, 8 | .emoji, 9 | [data-type="sticker"], 10 | iframe, 11 | .messagelogger-deleted-attachment, 12 | [class|="inlineMediaEmbed"] 13 | ) { 14 | filter: grayscale(1) !important; 15 | transition: 150ms filter ease-in-out; 16 | 17 | &[class*="hiddenMosaicItem_"] { 18 | filter: grayscale(1) blur(var(--custom-message-attachment-spoiler-blur-radius, 44px)) !important; 19 | } 20 | } 21 | 22 | .messagelogger-deleted 23 | :is( 24 | video, 25 | .emoji, 26 | [data-type="sticker"], 27 | iframe, 28 | .messagelogger-deleted-attachment, 29 | [class|="inlineMediaEmbed"] 30 | ):hover { 31 | filter: grayscale(0) !important; 32 | } 33 | 34 | .theme-dark .messagelogger-edited { 35 | filter: brightness(80%); 36 | } 37 | 38 | .theme-light .messagelogger-edited { 39 | opacity: 0.5; 40 | } 41 | 42 | .messagelogger-edit-marker { 43 | cursor: pointer; 44 | } 45 | 46 | .vc-ml-modal-timestamp { 47 | cursor: unset; 48 | height: unset; 49 | } 50 | 51 | .vc-ml-modal-tab-bar { 52 | flex-wrap: wrap; 53 | gap: 16px; 54 | } 55 | -------------------------------------------------------------------------------- /src/plugins/noDefaultHangStatus/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { Devs } from "@utils/constants"; 8 | import definePlugin from "@utils/types"; 9 | 10 | export default definePlugin({ 11 | name: "NoDefaultHangStatus", 12 | description: "Disable the default hang status when joining voice channels", 13 | authors: [Devs.D3SOX], 14 | 15 | patches: [ 16 | { 17 | find: ".CHILLING)", 18 | replacement: { 19 | match: /{enableHangStatus:(\i),/, 20 | replace: "{_enableHangStatus:$1=false," 21 | } 22 | } 23 | ] 24 | }); 25 | -------------------------------------------------------------------------------- /src/plugins/noF1/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { Devs } from "@utils/constants"; 20 | import definePlugin from "@utils/types"; 21 | 22 | export default definePlugin({ 23 | name: "NoF1", 24 | description: "Disables F1 help bind.", 25 | authors: [Devs.Cyn], 26 | patches: [ 27 | { 28 | find: ',"f1"],comboKeysBindGlobal:', 29 | replacement: { 30 | match: ',"f1"],comboKeysBindGlobal:', 31 | replace: "],comboKeysBindGlobal:", 32 | }, 33 | }, 34 | ], 35 | }); 36 | -------------------------------------------------------------------------------- /src/plugins/noMosaic/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { definePluginSettings } from "@api/Settings"; 8 | import { Devs } from "@utils/constants"; 9 | import definePlugin, { OptionType } from "@utils/types"; 10 | 11 | const settings = definePluginSettings({ 12 | inlineVideo: { 13 | description: "Play videos without carousel modal", 14 | type: OptionType.BOOLEAN, 15 | default: true, 16 | restartNeeded: true 17 | } 18 | }); 19 | 20 | export default definePlugin({ 21 | name: "NoMosaic", 22 | authors: [Devs.AutumnVN], 23 | description: "Removes Discord new image mosaic", 24 | tags: ["image", "mosaic", "media"], 25 | 26 | settings, 27 | 28 | patches: [ 29 | { 30 | find: '=>"IMAGE"===', 31 | replacement: { 32 | match: /=>"IMAGE"===\i\|\|"VIDEO"===\i;/, 33 | replace: "=>false;" 34 | } 35 | }, 36 | { 37 | find: "renderAttachments(", 38 | predicate: () => settings.store.inlineVideo, 39 | replacement: { 40 | match: /url:(\i)\.url\}\);return /, 41 | replace: "$&$1.content_type?.startsWith('image/')&&" 42 | } 43 | }, 44 | ] 45 | }); 46 | -------------------------------------------------------------------------------- /src/plugins/noOnboardingDelay/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { Devs } from "@utils/constants"; 20 | import definePlugin from "@utils/types"; 21 | 22 | export default definePlugin({ 23 | name: "NoOnboardingDelay", 24 | description: "Skips the slow and annoying onboarding delay", 25 | authors: [Devs.nekohaxx], 26 | patches: [ 27 | { 28 | find: "Messages.ONBOARDING_COVER_WELCOME_SUBTITLE", 29 | replacement: { 30 | match: "3e3", 31 | replace: "0" 32 | }, 33 | }, 34 | ], 35 | }); 36 | -------------------------------------------------------------------------------- /src/plugins/noRPC.discordDesktop/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { Devs } from "@utils/constants"; 20 | import definePlugin from "@utils/types"; 21 | 22 | export default definePlugin({ 23 | name: "NoRPC", 24 | description: "Disables Discord's RPC server.", 25 | authors: [Devs.Cyn], 26 | patches: [ 27 | { 28 | find: '.ensureModule("discord_rpc")', 29 | replacement: { 30 | match: /\.ensureModule\("discord_rpc"\)\.then\(\(.+?\)}\)}/, 31 | replace: '.ensureModule("discord_rpc")}', 32 | }, 33 | }, 34 | ], 35 | }); 36 | -------------------------------------------------------------------------------- /src/plugins/noTypingAnimation/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { Devs } from "@utils/constants"; 8 | import definePlugin from "@utils/types"; 9 | 10 | export default definePlugin({ 11 | name: "NoTypingAnimation", 12 | authors: [Devs.AutumnVN], 13 | description: "Disables the CPU-intensive typing dots animation", 14 | patches: [{ 15 | find: "dotCycle", 16 | replacement: { 17 | match: /document.hasFocus\(\)/, 18 | replace: "false" 19 | } 20 | }] 21 | }); 22 | -------------------------------------------------------------------------------- /src/plugins/normalizeMessageLinks/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { Devs } from "@utils/constants"; 8 | import definePlugin from "@utils/types"; 9 | 10 | export default definePlugin({ 11 | name: "NormalizeMessageLinks", 12 | description: "Strip canary/ptb from message links", 13 | authors: [Devs.bb010g], 14 | patches: [ 15 | { 16 | find: ".Messages.COPY_MESSAGE_LINK,", 17 | replacement: { 18 | match: /\.concat\(location\.host\)/, 19 | replace: ".concat($self.normalizeHost(location.host))", 20 | }, 21 | }, 22 | ], 23 | normalizeHost(host: string) { 24 | return host.replace(/(^|\b)(canary\.|ptb\.)(discord.com)$/, "$1$3"); 25 | }, 26 | }); 27 | -------------------------------------------------------------------------------- /src/plugins/notificationVolume/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { definePluginSettings } from "@api/Settings"; 8 | import { Devs } from "@utils/constants"; 9 | import definePlugin, { OptionType } from "@utils/types"; 10 | 11 | const settings = definePluginSettings({ 12 | notificationVolume: { 13 | type: OptionType.SLIDER, 14 | description: "Notification volume", 15 | markers: [0, 25, 50, 75, 100], 16 | default: 100, 17 | stickToMarkers: false 18 | } 19 | }); 20 | 21 | export default definePlugin({ 22 | name: "NotificationVolume", 23 | description: "Save your ears and set a separate volume for notifications and in-app sounds", 24 | authors: [Devs.philipbry], 25 | settings, 26 | patches: [ 27 | { 28 | find: "_ensureAudio(){", 29 | replacement: { 30 | match: /(?=Math\.min\(\i\.\i\.getOutputVolume\(\)\/100)/, 31 | replace: "$self.settings.store.notificationVolume/100*" 32 | }, 33 | }, 34 | ], 35 | }); 36 | -------------------------------------------------------------------------------- /src/plugins/nsfwGateBypass/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { Devs } from "@utils/constants"; 20 | import definePlugin from "@utils/types"; 21 | 22 | export default definePlugin({ 23 | name: "NSFWGateBypass", 24 | description: "Allows you to access NSFW channels without setting/verifying your age", 25 | authors: [Devs.Commandtechno], 26 | patches: [ 27 | { 28 | find: ".nsfwAllowed=null", 29 | replacement: { 30 | match: /(?<=\.nsfwAllowed=)null!==.+?(?=[,;])/, 31 | replace: "!0", 32 | }, 33 | }, 34 | ], 35 | }); 36 | -------------------------------------------------------------------------------- /src/plugins/openInApp/native.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { IpcMainInvokeEvent } from "electron"; 8 | import { request } from "https"; 9 | 10 | // These links don't support CORS, so this has to be native 11 | const validRedirectUrls = /^https:\/\/(spotify\.link|s\.team)\/.+$/; 12 | 13 | function getRedirect(url: string) { 14 | return new Promise((resolve, reject) => { 15 | const req = request(new URL(url), { method: "HEAD" }, res => { 16 | resolve( 17 | res.headers.location 18 | ? getRedirect(res.headers.location) 19 | : url 20 | ); 21 | }); 22 | req.on("error", reject); 23 | req.end(); 24 | }); 25 | } 26 | 27 | export async function resolveRedirect(_: IpcMainInvokeEvent, url: string) { 28 | if (!validRedirectUrls.test(url)) return url; 29 | 30 | return getRedirect(url); 31 | } 32 | -------------------------------------------------------------------------------- /src/plugins/pictureInPicture/styles.css: -------------------------------------------------------------------------------- 1 | .vc-pip-button { 2 | color: var(--interactive-normal); 3 | } 4 | 5 | .vc-pip-button:hover { 6 | background-color: var(--background-modifier-hover); 7 | color: var(--interactive-hover); 8 | } 9 | -------------------------------------------------------------------------------- /src/plugins/pinDms/constants.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | export const DEFAULT_CHUNK_SIZE = 256; 8 | export const DEFAULT_COLOR = 10070709; 9 | 10 | export const SWATCHES = [ 11 | 1752220, 12 | 3066993, 13 | 3447003, 14 | 10181046, 15 | 15277667, 16 | 15844367, 17 | 15105570, 18 | 15158332, 19 | 9807270, 20 | 6323595, 21 | 22 | 1146986, 23 | 2067276, 24 | 2123412, 25 | 7419530, 26 | 11342935, 27 | 12745742, 28 | 11027200, 29 | 10038562, 30 | 9936031, 31 | 5533306 32 | ]; 33 | -------------------------------------------------------------------------------- /src/plugins/pinDms/styles.css: -------------------------------------------------------------------------------- 1 | .vc-pindms-section-container { 2 | box-sizing: border-box; 3 | text-overflow: ellipsis; 4 | white-space: nowrap; 5 | overflow: hidden; 6 | text-transform: uppercase; 7 | font-size: 12px; 8 | line-height: 16px; 9 | letter-spacing: .02em; 10 | font-family: var(--font-display); 11 | font-weight: 600; 12 | flex: 1 1 auto; 13 | color: var(--channels-default); 14 | cursor: pointer; 15 | } 16 | 17 | .vc-pindms-modal-content { 18 | display: grid; 19 | justify-content: center; 20 | padding: 1rem; 21 | gap: 1.5rem; 22 | } 23 | 24 | .vc-pindms-modal-content [class^="defaultContainer"] { 25 | display: none; 26 | } 27 | 28 | .vc-pindms-collapse-icon { 29 | width: 16px; 30 | height: 16px; 31 | color: var(--interactive-normal); 32 | transform: rotate(90deg) 33 | } 34 | 35 | .vc-pindms-collapsed .vc-pindms-collapse-icon { 36 | transform: rotate(0deg); 37 | } 38 | -------------------------------------------------------------------------------- /src/plugins/plainFolderIcon/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { Devs } from "@utils/constants"; 20 | import definePlugin from "@utils/types"; 21 | 22 | export default definePlugin({ 23 | name: "PlainFolderIcon", 24 | description: "Doesn't show the small guild icons in folders", 25 | authors: [Devs.botato], 26 | patches: [{ 27 | find: ".expandedFolderIconWrapper", 28 | replacement: [{ 29 | match: /\(\w\|\|\w\)&&(\(.{0,40}\(.{1,3}\.animated)/, 30 | replace: "$1", 31 | }] 32 | }] 33 | }); 34 | -------------------------------------------------------------------------------- /src/plugins/platformIndicators/style.css: -------------------------------------------------------------------------------- 1 | .vc-platform-indicator { 2 | display: inline-flex; 3 | justify-content: center; 4 | align-items: center; 5 | vertical-align: top; 6 | position: relative; 7 | } 8 | -------------------------------------------------------------------------------- /src/plugins/pronoundb/styles.css: -------------------------------------------------------------------------------- 1 | .vc-pronoundb-compact { 2 | display: none; 3 | } 4 | 5 | [class*="compact"] .vc-pronoundb-compact { 6 | display: inline-block; 7 | margin-left: -2px; 8 | margin-right: 0.25rem; 9 | } 10 | -------------------------------------------------------------------------------- /src/plugins/readAllNotificationsButton/style.css: -------------------------------------------------------------------------------- 1 | .vc-ranb-button { 2 | color: var(--interactive-normal); 3 | padding: 0 0.5em; 4 | margin-bottom: 0.5em; 5 | width: 100%; 6 | box-sizing: border-box; 7 | } 8 | 9 | .vc-ranb-button:hover { 10 | color: var(--interactive-active); 11 | } 12 | -------------------------------------------------------------------------------- /src/plugins/replyTimestamp/style.css: -------------------------------------------------------------------------------- 1 | .vc-reply-timestamp { 2 | margin-right: 0.25em; 3 | } 4 | -------------------------------------------------------------------------------- /src/plugins/secretRingTone/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { Devs } from "@utils/constants"; 8 | import definePlugin from "@utils/types"; 9 | 10 | // NOTE - Ultimately should probably be turned into a ringtone picker plugin 11 | export default definePlugin({ 12 | name: "SecretRingToneEnabler", 13 | description: "Always play the secret version of the discord ringtone (except during special ringtone events)", 14 | authors: [Devs.AndrewDLO, Devs.FieryFlames], 15 | patches: [ 16 | { 17 | find: '"call_ringing_beat"', 18 | replacement: { 19 | match: /500!==\i\(\)\.random\(1,1e3\)/, 20 | replace: "false", 21 | } 22 | }, 23 | ], 24 | }); 25 | -------------------------------------------------------------------------------- /src/plugins/sendTimestamps/styles.css: -------------------------------------------------------------------------------- 1 | .vc-st-modal-content input { 2 | background-color: var(--input-background); 3 | color: var(--text-normal); 4 | width: 95%; 5 | padding: 8px 8px 8px 12px; 6 | margin: 1em 0; 7 | outline: none; 8 | border: 1px solid var(--input-background); 9 | border-radius: 4px; 10 | font-weight: 500; 11 | font-style: inherit; 12 | font-size: 100%; 13 | } 14 | 15 | .vc-st-format-label, 16 | .vc-st-format-label span { 17 | background-color: transparent; 18 | } 19 | 20 | .vc-st-modal-content [class|="select"] { 21 | margin-bottom: 1em; 22 | } 23 | 24 | .vc-st-modal-content [class|="select"] span { 25 | background-color: var(--input-background); 26 | } 27 | 28 | .vc-st-modal-header { 29 | justify-content: space-between; 30 | align-content: center; 31 | } 32 | 33 | .vc-st-modal-header h1 { 34 | margin: 0; 35 | } 36 | 37 | .vc-st-modal-header button { 38 | padding: 0; 39 | } 40 | 41 | .vc-st-preview-text { 42 | margin-bottom: 1em; 43 | } 44 | 45 | .vc-st-button svg { 46 | transform: scale(1.1) translateY(1px); 47 | } 48 | -------------------------------------------------------------------------------- /src/plugins/serverInfo/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { findGroupChildrenByChildId, NavContextMenuPatchCallback } from "@api/ContextMenu"; 8 | import { migratePluginSettings } from "@api/Settings"; 9 | import { Devs } from "@utils/constants"; 10 | import definePlugin from "@utils/types"; 11 | import { Menu } from "@webpack/common"; 12 | import { Guild } from "discord-types/general"; 13 | 14 | import { openGuildInfoModal } from "./GuildInfoModal"; 15 | 16 | const Patch: NavContextMenuPatchCallback = (children, { guild }: { guild: Guild; }) => { 17 | const group = findGroupChildrenByChildId("privacy", children); 18 | 19 | group?.push( 20 | openGuildInfoModal(guild)} 24 | /> 25 | ); 26 | }; 27 | 28 | migratePluginSettings("ServerInfo", "ServerProfile"); // what was I thinking with this name lmao 29 | export default definePlugin({ 30 | name: "ServerInfo", 31 | description: "Allows you to view info about a server", 32 | authors: [Devs.Ven, Devs.Nuckyz], 33 | tags: ["guild", "info", "ServerProfile"], 34 | contextMenus: { 35 | "guild-context": Patch, 36 | "guild-header-popout": Patch 37 | } 38 | }); 39 | -------------------------------------------------------------------------------- /src/plugins/shikiCodeblocks.desktop/devicon.css: -------------------------------------------------------------------------------- 1 | @import url("https://cdn.jsdelivr.net/gh/devicons/devicon@v2.10.1/devicon.min.css"); 2 | -------------------------------------------------------------------------------- /src/plugins/shikiCodeblocks.desktop/hooks/useCopyCooldown.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { Clipboard, React } from "@webpack/common"; 20 | 21 | export function useCopyCooldown(cooldown: number) { 22 | const [copyCooldown, setCopyCooldown] = React.useState(false); 23 | 24 | function copy(text: string) { 25 | Clipboard.copy(text); 26 | setCopyCooldown(true); 27 | 28 | setTimeout(() => { 29 | setCopyCooldown(false); 30 | }, cooldown); 31 | } 32 | 33 | return [copyCooldown, copy] as const; 34 | } 35 | -------------------------------------------------------------------------------- /src/plugins/shikiCodeblocks.desktop/previewExample.tsx: -------------------------------------------------------------------------------- 1 | /* eslint-disable simple-header/header */ 2 | import React from "react"; 3 | 4 | const handleClick = async () => 5 | console.log((await import("@webpack/common")).Clipboard.copy("\u200b")); 6 | 7 | export const Example: React.FC<{ 8 | real: boolean, 9 | shigged?: number, 10 | }> = ({ real, shigged }) => <> 11 |

{`Shigg${real ? `ies${shigged === 0x1B ? "t" : ""}` : "y"}`}

12 | 13 | ; 14 | -------------------------------------------------------------------------------- /src/plugins/shikiCodeblocks.desktop/utils/color.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export function hex2Rgb(hex: string) { 20 | hex = hex.slice(1); 21 | if (hex.length < 6) 22 | hex = hex 23 | .split("") 24 | .map(c => c + c) 25 | .join(""); 26 | if (hex.length === 6) hex += "ff"; 27 | if (hex.length > 6) hex = hex.slice(0, 6); 28 | return hex 29 | .split(/(..)/) 30 | .filter(Boolean) 31 | .map(c => parseInt(c, 16)); 32 | } 33 | -------------------------------------------------------------------------------- /src/plugins/shikiCodeblocks.desktop/utils/createStyle.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | const styles = new Map(); 20 | 21 | export function setStyle(css: string, id: string) { 22 | const style = document.createElement("style"); 23 | style.innerText = css; 24 | document.head.appendChild(style); 25 | styles.set(id, style); 26 | } 27 | 28 | export function removeStyle(id: string) { 29 | styles.get(id)?.remove(); 30 | return styles.delete(id); 31 | } 32 | 33 | export const clearStyles = () => { 34 | styles.forEach(style => style.remove()); 35 | styles.clear(); 36 | }; 37 | -------------------------------------------------------------------------------- /src/plugins/showAllRoles/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { Devs } from "@utils/constants"; 8 | import definePlugin from "@utils/types"; 9 | 10 | export default definePlugin({ 11 | name: "ShowAllRoles", 12 | description: "Show all roles in new profiles.", 13 | authors: [Devs.Luna], 14 | patches: [ 15 | { 16 | find: ".Messages.VIEW_ALL_ROLES", 17 | replacement: { 18 | match: /(\i)\.slice\(0,\i\)/, 19 | replace: "$1" 20 | } 21 | } 22 | ] 23 | }); 24 | -------------------------------------------------------------------------------- /src/plugins/showConnections/styles.css: -------------------------------------------------------------------------------- 1 | .vc-user-connection { 2 | all: unset; 3 | display: inline-block; 4 | cursor: pointer; 5 | } 6 | 7 | .vc-sc-tooltip { 8 | display: inline-flex; 9 | gap: 0.25em; 10 | align-items: center; 11 | } 12 | 13 | .vc-sc-connection-name { 14 | word-break: break-all; 15 | } 16 | 17 | .vc-sc-tooltip svg { 18 | min-width: 16px; 19 | } 20 | -------------------------------------------------------------------------------- /src/plugins/showMeYourName/styles.css: -------------------------------------------------------------------------------- 1 | .vc-smyn-suffix { 2 | color: var(--text-muted); 3 | } 4 | 5 | .vc-smyn-suffix::before { 6 | content: "("; 7 | } 8 | 9 | .vc-smyn-suffix::after { 10 | content: ")"; 11 | } 12 | -------------------------------------------------------------------------------- /src/plugins/showTimeoutDuration/styles.css: -------------------------------------------------------------------------------- 1 | .vc-std-wrapper { 2 | display: flex; 3 | align-items: center; 4 | } 5 | 6 | .vc-std-wrapper [class*="communicationDisabled"] { 7 | margin-right: 0; 8 | } 9 | -------------------------------------------------------------------------------- /src/plugins/spotifyControls/hoverOnly.css: -------------------------------------------------------------------------------- 1 | .vc-spotify-button-row { 2 | height: 0; 3 | opacity: 0; 4 | pointer-events: none; 5 | transition: 0.2s; 6 | transition-property: height; 7 | } 8 | 9 | #vc-spotify-player:hover .vc-spotify-button-row { 10 | opacity: 1; 11 | height: 32px; 12 | pointer-events: auto; 13 | 14 | /* only transition opacity on show to prevent clipping */ 15 | transition-property: height, opacity; 16 | } 17 | -------------------------------------------------------------------------------- /src/plugins/translate/styles.css: -------------------------------------------------------------------------------- 1 | .vc-trans-modal-content { 2 | padding: 1em; 3 | } 4 | 5 | .vc-trans-modal-header { 6 | justify-content: space-between; 7 | align-content: center; 8 | } 9 | 10 | .vc-trans-modal-header h1 { 11 | margin: 0; 12 | } 13 | 14 | .vc-trans-accessory { 15 | color: var(--text-muted); 16 | margin-top: 0.5em; 17 | font-style: italic; 18 | font-weight: 400; 19 | } 20 | 21 | .vc-trans-accessory svg { 22 | margin-right: 0.25em; 23 | } 24 | 25 | .vc-trans-dismiss { 26 | all: unset; 27 | cursor: pointer; 28 | color: var(--text-link); 29 | } 30 | 31 | .vc-trans-dismiss:is(:hover, :focus) { 32 | text-decoration: underline; 33 | } 34 | 35 | .vc-trans-auto-translate { 36 | color: var(--green-360); 37 | } 38 | 39 | .vc-trans-chat-button { 40 | scale: 1.085; 41 | } 42 | -------------------------------------------------------------------------------- /src/plugins/typingIndicator/style.css: -------------------------------------------------------------------------------- 1 | .vc-typing-indicator { 2 | display: flex; 3 | align-items: center; 4 | height: 20px; 5 | } 6 | 7 | .vc-typing-indicator-avatars { 8 | margin-left: 6px; 9 | } 10 | 11 | .vc-typing-indicator-dots { 12 | margin-left: 6px; 13 | height: 16px; 14 | display: flex; 15 | align-items: center; 16 | z-index: 0; 17 | cursor: pointer; 18 | } 19 | -------------------------------------------------------------------------------- /src/plugins/unlockedAvatarZoom/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { definePluginSettings } from "@api/Settings"; 8 | import { makeRange } from "@components/PluginSettings/components"; 9 | import { Devs } from "@utils/constants"; 10 | import definePlugin, { OptionType } from "@utils/types"; 11 | 12 | const settings = definePluginSettings({ 13 | zoomMultiplier: { 14 | type: OptionType.SLIDER, 15 | description: "Zoom multiplier", 16 | markers: makeRange(2, 16), 17 | default: 4, 18 | }, 19 | }); 20 | 21 | export default definePlugin({ 22 | name: "UnlockedAvatarZoom", 23 | description: "Allows you to zoom in further in the image crop tool when changing your avatar", 24 | authors: [Devs.nakoyasha], 25 | settings, 26 | patches: [ 27 | { 28 | find: ".Messages.AVATAR_UPLOAD_EDIT_MEDIA", 29 | replacement: { 30 | match: /maxValue:\d/, 31 | replace: "maxValue:$self.settings.store.zoomMultiplier", 32 | } 33 | } 34 | ] 35 | }); 36 | -------------------------------------------------------------------------------- /src/plugins/userVoiceShow/components/VoiceChannelSection.css: -------------------------------------------------------------------------------- 1 | .vc-uvs-button>div { 2 | white-space: normal !important; 3 | } 4 | 5 | .vc-uvs-button { 6 | width: 100%; 7 | margin: auto; 8 | height: unset; 9 | } 10 | 11 | .vc-uvs-header { 12 | color: var(--header-primary); 13 | margin-bottom: 6px; 14 | } 15 | 16 | .vc-uvs-modal-margin { 17 | margin: 0 12px; 18 | } 19 | 20 | .vc-uvs-modal-margin div { 21 | margin-bottom: 0 !important; 22 | } 23 | 24 | .vc-uvs-popout-margin-self>[class^="section"] { 25 | padding-top: 0; 26 | padding-bottom: 12px; 27 | } 28 | -------------------------------------------------------------------------------- /src/plugins/usrbg/index.css: -------------------------------------------------------------------------------- 1 | :is([class*="userProfile"], [class*="userPopout"]) [class*="bannerPremium"] { 2 | background: center / cover no-repeat; 3 | } 4 | 5 | [class*="NonPremium"]:has([class*="bannerPremium"]) [class*="avatarPositionNormal"], 6 | [class*="PremiumWithoutBanner"]:has([class*="bannerPremium"]) [class*="avatarPositionPremiumNoBanner"] { 7 | top: 76px; 8 | } 9 | 10 | [style*="background-image"] [class*="background_"] { 11 | background-color: transparent !important; 12 | } 13 | -------------------------------------------------------------------------------- /src/plugins/voiceDownload/style.css: -------------------------------------------------------------------------------- 1 | .vc-voice-download { 2 | width: 24px; 3 | height: 24px; 4 | color: var(--interactive-normal); 5 | margin-left: 12px; 6 | cursor: pointer; 7 | position: relative; 8 | } 9 | 10 | .vc-voice-download:hover { 11 | color: var(--interactive-active); 12 | } 13 | -------------------------------------------------------------------------------- /src/plugins/voiceMessages/native.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { app } from "electron"; 8 | import { readFile } from "fs/promises"; 9 | import { basename, normalize } from "path"; 10 | 11 | export async function readRecording(_, filePath: string) { 12 | filePath = normalize(filePath); 13 | const filename = basename(filePath); 14 | const discordBaseDirWithTrailingSlash = normalize(app.getPath("userData") + "/"); 15 | console.log(filename, discordBaseDirWithTrailingSlash, filePath); 16 | if (filename !== "recording.ogg" || !filePath.startsWith(discordBaseDirWithTrailingSlash)) return null; 17 | 18 | try { 19 | const buf = await readFile(filePath); 20 | return new Uint8Array(buf.buffer); 21 | } catch { 22 | return null; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/plugins/voiceMessages/settings.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { definePluginSettings } from "@api/Settings"; 20 | import { OptionType } from "@utils/types"; 21 | 22 | export const settings = definePluginSettings({ 23 | noiseSuppression: { 24 | type: OptionType.BOOLEAN, 25 | description: "Noise Suppression", 26 | default: true, 27 | }, 28 | echoCancellation: { 29 | type: OptionType.BOOLEAN, 30 | description: "Echo Cancellation", 31 | default: true, 32 | }, 33 | }); 34 | -------------------------------------------------------------------------------- /src/plugins/voiceMessages/styles.css: -------------------------------------------------------------------------------- 1 | .vc-vmsg-modal { 2 | padding: 1em; 3 | } 4 | 5 | .vc-vmsg-buttons { 6 | display: grid; 7 | grid-template-columns: repeat(3, minmax(0, 1fr)); 8 | gap: 0.5em; 9 | margin-bottom: 1em; 10 | } 11 | 12 | .vc-vmsg-modal audio { 13 | width: 100%; 14 | } 15 | 16 | .vc-vmsg-preview { 17 | color: var(--text-normal); 18 | border-radius: 24px; 19 | background-color: var(--background-secondary); 20 | position: relative; 21 | display: flex; 22 | align-items: center; 23 | padding: 0 16px; 24 | height: 48px; 25 | } 26 | 27 | .vc-vmsg-preview-indicator { 28 | background: var(--button-secondary-background); 29 | width: 16px; 30 | height: 16px; 31 | border-radius: 50%; 32 | transition: background 0.2s ease-in-out; 33 | } 34 | 35 | .vc-vmsg-preview-recording .vc-vmsg-preview-indicator { 36 | background: var(--status-danger); 37 | } 38 | 39 | .vc-vmsg-preview-time { 40 | opacity: 0.8; 41 | margin: 0 0.5em; 42 | font-size: 80%; 43 | 44 | /* monospace so different digits have same size */ 45 | font-family: var(--font-code); 46 | } 47 | 48 | .vc-vmsg-preview-label { 49 | opacity: 0.5; 50 | letter-spacing: 0.125em; 51 | font-weight: 600; 52 | flex: 1; 53 | text-align: center; 54 | } 55 | -------------------------------------------------------------------------------- /src/plugins/voiceMessages/utils.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { classNameFactory } from "@api/Styles"; 20 | import { findStoreLazy } from "@webpack"; 21 | 22 | export const MediaEngineStore = findStoreLazy("MediaEngineStore"); 23 | export const cl = classNameFactory("vc-vmsg-"); 24 | -------------------------------------------------------------------------------- /src/plugins/watchTogetherAdblock.desktop/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { Devs } from "@utils/constants"; 8 | import definePlugin from "@utils/types"; 9 | 10 | // The entire code of this plugin can be found in native.ts 11 | export default definePlugin({ 12 | name: "WatchTogetherAdblock", 13 | description: "Block ads in the YouTube WatchTogether activity via AdGuard", 14 | authors: [Devs.ImLvna], 15 | }); 16 | -------------------------------------------------------------------------------- /src/plugins/watchTogetherAdblock.desktop/native.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { RendererSettings } from "@main/settings"; 8 | import { app } from "electron"; 9 | import adguard from "file://adguard.js?minify"; 10 | 11 | app.on("browser-window-created", (_, win) => { 12 | win.webContents.on("frame-created", (_, { frame }) => { 13 | frame.once("dom-ready", () => { 14 | if (frame.url.includes("discordsays") && frame.url.includes("youtube.com")) { 15 | if (!RendererSettings.store.plugins?.WatchTogetherAdblock?.enabled) return; 16 | 17 | frame.executeJavaScript(adguard); 18 | } 19 | }); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /src/plugins/webScreenShareFixes.web/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { Devs } from "@utils/constants"; 8 | import definePlugin from "@utils/types"; 9 | 10 | export default definePlugin({ 11 | name: "WebScreenShareFixes", 12 | authors: [Devs.Kaitlyn], 13 | description: "Removes 2500kbps bitrate cap on chromium and vesktop clients.", 14 | enabledByDefault: true, 15 | patches: [ 16 | { 17 | find: "x-google-max-bitrate", 18 | replacement: [ 19 | { 20 | match: /"x-google-max-bitrate=".concat\(\i\)/, 21 | replace: '"x-google-max-bitrate=".concat("80_000")' 22 | }, 23 | { 24 | match: /;level-asymmetry-allowed=1/, 25 | replace: ";b=AS:800000;level-asymmetry-allowed=1" 26 | } 27 | ] 28 | } 29 | ] 30 | }); 31 | -------------------------------------------------------------------------------- /src/plugins/xsOverlay.desktop/native.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { createSocket, Socket } from "dgram"; 8 | 9 | let xsoSocket: Socket; 10 | 11 | export function sendToOverlay(_, data: any) { 12 | data.icon = Buffer.from(data.icon).toString("base64"); 13 | const json = JSON.stringify(data); 14 | xsoSocket ??= createSocket("udp4"); 15 | xsoSocket.send(json, 42069, "127.0.0.1"); 16 | } 17 | -------------------------------------------------------------------------------- /src/shared/debounce.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | /** 20 | * Returns a new function that will call the wrapped function 21 | * after the specified delay. If the function is called again 22 | * within the delay, the timer will be reset. 23 | * @param func The function to wrap 24 | * @param delay The delay in milliseconds 25 | */ 26 | export function debounce(func: T, delay = 300): T { 27 | let timeout: NodeJS.Timeout; 28 | return function (...args: any[]) { 29 | clearTimeout(timeout); 30 | timeout = setTimeout(() => { func(...args); }, delay); 31 | } as any; 32 | } 33 | -------------------------------------------------------------------------------- /src/shared/vencordUserAgent.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import gitHash from "~git-hash"; 8 | import gitRemote from "~git-remote"; 9 | 10 | export { gitHash, gitRemote }; 11 | 12 | export const VENCORD_USER_AGENT = `Suncord/${gitHash}${gitRemote ? ` (https://github.com/${gitRemote})` : ""}`; 13 | export const VENCORD_USER_AGENT_HASHLESS = `Suncord${gitRemote ? ` (https://github.com/${gitRemote})` : ""}`; 14 | -------------------------------------------------------------------------------- /src/suncordplugins/MessageLinkTooltip/style.css: -------------------------------------------------------------------------------- 1 | .c98-message-link-tooltip { 2 | width: max-content; 3 | max-width: 80vw; 4 | } 5 | -------------------------------------------------------------------------------- /src/suncordplugins/allCallTimers/TimerIcon.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | export function TimerIcon({ height = 16, width = 16, className }: Readonly<{ 8 | height?: number; 9 | width?: number; 10 | className?: string; 11 | }>) { 12 | return ( 13 | 20 | 24 | 25 | ); 26 | } 27 | -------------------------------------------------------------------------------- /src/suncordplugins/allCallTimers/timerText.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | export function TimerText({ text, className }: Readonly<{ text: string; className: string; }>) { 8 | return
{text}
; 17 | } 18 | -------------------------------------------------------------------------------- /src/suncordplugins/amITyping/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { Devs } from "@utils/constants"; 8 | import definePlugin from "@utils/types"; 9 | 10 | export default definePlugin({ 11 | name: "AmITyping", 12 | description: "Shows you if other people can see you typing.", 13 | authors: [Devs.MrDiamond], 14 | 15 | patches: [ 16 | { 17 | find: "\"handleDismissInviteEducation\"", 18 | replacement: { 19 | match: /\i\.default\.getCurrentUser\(\)/, 20 | replace: "\"\"" 21 | } 22 | } 23 | ] 24 | }); 25 | -------------------------------------------------------------------------------- /src/suncordplugins/betterActivities/components/Caret.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | export function Caret({ disabled, direction }: { disabled: boolean; direction: "left" | "right"; }) { 8 | return ( 9 | 10 | 11 | 12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /src/suncordplugins/betterActivities/components/SpotifyIcon.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import type { SVGProps } from "react"; 8 | 9 | export function SpotifyIcon(props: SVGProps) { 10 | return (); 11 | } 12 | -------------------------------------------------------------------------------- /src/suncordplugins/betterActivities/components/TwitchIcon.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import type { SVGProps } from "react"; 8 | 9 | export function TwitchIcon(props: SVGProps) { 10 | return (); 11 | } 12 | -------------------------------------------------------------------------------- /src/suncordplugins/betterBanReasons/styles.css: -------------------------------------------------------------------------------- 1 | .vc-bbr-reason-wrapper { 2 | display: grid; 3 | padding: 0; 4 | padding-bottom: 0.5rem; 5 | gap: 0.5rem; 6 | grid-template-columns: 6fr 1fr; 7 | } 8 | 9 | .vc-bbr-remove-button { 10 | height: 100%; 11 | } 12 | -------------------------------------------------------------------------------- /src/suncordplugins/betterMicrophone.desktop/components/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./MicrophoneSettingsModal"; 20 | -------------------------------------------------------------------------------- /src/suncordplugins/betterMicrophone.desktop/constants/constants.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { Devs } from "@utils/constants"; 20 | 21 | import { types } from "../../philsPluginLibrary"; 22 | 23 | export const PluginInfo = { 24 | PLUGIN_NAME: "BetterMicrophone", 25 | DESCRIPTION: "This plugin allows you to further customize your microphone.", 26 | AUTHOR: { 27 | ...Devs.philhk, 28 | github: "https://github.com/philhk" 29 | }, 30 | CONTRIBUTORS: {} 31 | } as const satisfies types.PluginInfo; 32 | -------------------------------------------------------------------------------- /src/suncordplugins/betterMicrophone.desktop/constants/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./constants"; 20 | -------------------------------------------------------------------------------- /src/suncordplugins/betterMicrophone.desktop/logger/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { Logger } from "@utils/Logger"; 20 | 21 | import { PluginInfo } from "../constants"; 22 | 23 | export const logger = new Logger(PluginInfo.PLUGIN_NAME); 24 | -------------------------------------------------------------------------------- /src/suncordplugins/betterMicrophone.desktop/patchers/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./microphone"; 20 | -------------------------------------------------------------------------------- /src/suncordplugins/betterMicrophone.desktop/stores/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./microphoneStore"; 20 | -------------------------------------------------------------------------------- /src/suncordplugins/betterScreenshare.dev/components/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./AudioSourceSelect"; 20 | export * from "./OpenScreenshareSettingsButton"; 21 | export * from "./ScreenshareSettingsModal"; 22 | -------------------------------------------------------------------------------- /src/suncordplugins/betterScreenshare.dev/constants/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./constants"; 20 | -------------------------------------------------------------------------------- /src/suncordplugins/betterScreenshare.dev/logger/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { Logger } from "@utils/Logger"; 20 | 21 | import { PluginInfo } from "../constants"; 22 | 23 | export const logger = new Logger(PluginInfo.PLUGIN_NAME); 24 | -------------------------------------------------------------------------------- /src/suncordplugins/betterScreenshare.dev/patchers/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./screenshare"; 20 | export * from "./screenshareAudio"; 21 | -------------------------------------------------------------------------------- /src/suncordplugins/betterScreenshare.dev/patches/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./screenshareModal"; 20 | -------------------------------------------------------------------------------- /src/suncordplugins/betterScreenshare.dev/stores/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./screenshareAudioStore"; 20 | export * from "./screenshareStore"; 21 | -------------------------------------------------------------------------------- /src/suncordplugins/blockKrisp/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { Devs } from "@utils/constants"; 8 | import definePlugin from "@utils/types"; 9 | 10 | export default definePlugin({ 11 | name: "BlockKrisp", 12 | description: "Prevent Krisp from loading", 13 | authors: [Devs.D3SOX], 14 | patches: [ 15 | // Block loading modules on Desktop 16 | { 17 | find: "Failed to load Krisp module", 18 | replacement: { 19 | match: /await \i.\i.ensureModule\("discord_krisp"\)/, 20 | replace: "throw new Error();$&" 21 | } 22 | }, 23 | // Block loading modules on Web 24 | { 25 | find: "krisp_browser_models", 26 | replacement: { 27 | match: /\i:function\(\)\{/, 28 | replace: "$&return null;" 29 | } 30 | }, 31 | // Set Krisp to not supported 32 | { 33 | find: "\"shouldSkipMuteUnmuteSound\"", 34 | replacement: { 35 | match: /isNoiseCancellationSupported\(\)\{/, 36 | replace: "$&return false;" 37 | } 38 | } 39 | ], 40 | }); 41 | -------------------------------------------------------------------------------- /src/suncordplugins/blockKrisp/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/verticalsync/Suncord/e9682235804d61a14652903d9751bd456c06c4bb/src/suncordplugins/blockKrisp/screenshot.png -------------------------------------------------------------------------------- /src/suncordplugins/discordColorways/components/SelectionCircle.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | export default function () { 8 | return
19 | 23 |
; 24 | } 25 | -------------------------------------------------------------------------------- /src/suncordplugins/discordColorways/components/Spinner.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { CSSProperties } from "react"; 8 | 9 | export default function ({ className, style }: { className?: string, style?: CSSProperties; }) { 10 | return
11 |
12 | 13 | 14 | 15 | 16 | 17 |
18 |
; 19 | } 20 | -------------------------------------------------------------------------------- /src/suncordplugins/followUser/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/verticalsync/Suncord/e9682235804d61a14652903d9751bd456c06c4bb/src/suncordplugins/followUser/screenshot.png -------------------------------------------------------------------------------- /src/suncordplugins/hideMessage/EyeIcon.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | export function EyeIcon({ height = 24, width = 24, className }: { height?: number; width?: number; className?: string; }) { 8 | return ( 9 | 10 | 11 | 12 | 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /src/suncordplugins/hideMessage/HideMessageAccessory.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { cl, revealMessage } from "./"; 8 | import { HideIcon } from "./HideIcon"; 9 | 10 | export const HideMessageAccessory = ({ id }: { id: string; }) => { 11 | return ( 12 | 13 | 14 | This message is hidden •{" "} 15 | 18 | 19 | ); 20 | }; 21 | -------------------------------------------------------------------------------- /src/suncordplugins/hideMessage/styles.css: -------------------------------------------------------------------------------- 1 | .vc-hide-message-accessory { 2 | margin-top: 4px; 3 | font-size: 12px; 4 | font-weight: 400; 5 | color: var(--text-muted); 6 | } 7 | 8 | .vc-hide-message-accessory svg { 9 | margin-right: 4px; 10 | vertical-align: text-bottom; 11 | } 12 | 13 | .vc-hide-message-reveal { 14 | all: unset; 15 | cursor: pointer; 16 | color: var(--text-link); 17 | } 18 | 19 | .vc-hide-message-reveal:is(:hover, :focus) { 20 | text-decoration: underline; 21 | } 22 | -------------------------------------------------------------------------------- /src/suncordplugins/holyNotes/components/icons/HelpIcon.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { classes } from "@utils/misc"; 8 | 9 | export default ({ className }: { className?: string; }): JSX.Element => ( 10 | 23 | ); 24 | -------------------------------------------------------------------------------- /src/suncordplugins/holyNotes/components/icons/NoteButton.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | const component = (props: React.SVGProps): JSX.Element => ( 8 | )}> 9 | 13 | 14 | ); 15 | 16 | export default component; 17 | export const Popover = component as unknown as (props: unknown) => JSX.Element; 18 | -------------------------------------------------------------------------------- /src/suncordplugins/holyNotes/components/modals/ManageNotebookButton.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { openModal } from "@utils/modal"; 8 | import { Button, React } from "@webpack/common"; 9 | 10 | import NotebookCreateModal from "./NotebookCreateModal"; 11 | import NotebookDeleteModal from "./NotebookDeleteModal"; 12 | 13 | export default ({ notebook, setNotebook }: { notebook: string, setNotebook: React.Dispatch>; }) => { 14 | const isNotMain = notebook !== "Main"; 15 | 16 | return ( 17 | 27 | ); 28 | }; 29 | -------------------------------------------------------------------------------- /src/suncordplugins/holyNotes/types.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { Embed, MessageAttachment, MessageReaction } from "discord-types/general"; 8 | 9 | export declare namespace Discord { 10 | export interface Sticker { 11 | format_type: number; 12 | id: string; 13 | name: string; 14 | } 15 | 16 | export interface Attachment extends MessageAttachment { 17 | sensitive: boolean; 18 | } 19 | 20 | export interface Reaction extends MessageReaction { 21 | burst_colors: string[]; 22 | borst_count: number; 23 | count_details: { burst: number; normal: number; }; 24 | me_burst: boolean; 25 | } 26 | } 27 | 28 | export declare namespace HolyNotes { 29 | export interface Note { 30 | id: string; 31 | channel_id: string; 32 | guild_id: string; 33 | content: string; 34 | author: { 35 | id: string; 36 | avatar: string; 37 | discriminator: string; 38 | username: string; 39 | }; 40 | flags: number; 41 | timestamp: string; 42 | attachments: Discord.Attachment[]; 43 | embeds: Embed[]; 44 | reactions: Discord.Reaction[]; 45 | stickerItems: Discord.Sticker[]; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/suncordplugins/ignoreTerms/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { Devs } from "@utils/constants"; 8 | import definePlugin from "@utils/types"; 9 | 10 | export default definePlugin({ 11 | name: "IgnoreTerms", 12 | description: "Ignore Discord's new terms of service", 13 | authors: [Devs.D3SOX], 14 | patches: [ 15 | { 16 | find: "Messages.NEW_TERMS_TITLE", 17 | replacement: { 18 | match: /function (\i)\((\i)\)\{let\{transitionState:(\i)\}=(\i)/g, 19 | replace: "function $1($2){return $self.closeModal($2);let{transitionState:$3}=$4" 20 | } 21 | } 22 | ], 23 | 24 | closeModal(event) { 25 | event.transitionState = null; 26 | event.onClose(); 27 | return null; 28 | } 29 | }); 30 | -------------------------------------------------------------------------------- /src/suncordplugins/ignoreTerms/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/verticalsync/Suncord/e9682235804d61a14652903d9751bd456c06c4bb/src/suncordplugins/ignoreTerms/screenshot.png -------------------------------------------------------------------------------- /src/suncordplugins/mediaDownloader.desktop/mediaDownloader.css: -------------------------------------------------------------------------------- 1 | /* Only way to make on:hover styles */ 2 | 3 | .media-downloader-link { 4 | text-decoration: none !important; 5 | } 6 | 7 | .media-downloader-link:hover { 8 | text-decoration: none !important; 9 | } 10 | -------------------------------------------------------------------------------- /src/suncordplugins/mediaPlaybackSpeed/components/SpeedIcon.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | function SpeedIcon() { 8 | return ( 9 | 16 | 17 | 18 | ); 19 | } 20 | 21 | export default SpeedIcon; 22 | -------------------------------------------------------------------------------- /src/suncordplugins/mediaPlaybackSpeed/styles.css: -------------------------------------------------------------------------------- 1 | .vc-media-playback-speed-icon { 2 | background-color: transparent; 3 | height: 100%; 4 | z-index: 2; 5 | color: var(--interactive-normal); 6 | } 7 | 8 | .vc-media-playback-speed-icon:hover { 9 | color: var(--interactive-active); 10 | } 11 | -------------------------------------------------------------------------------- /src/suncordplugins/messageColors/styles.css: -------------------------------------------------------------------------------- 1 | .vc-color-block { 2 | aspect-ratio: 1/1; 3 | background: var(--color); 4 | height: 1rem; 5 | vertical-align: middle; 6 | border-radius: 4px; 7 | display: inline-block; 8 | user-select: none; 9 | margin-left: 2px; 10 | } 11 | 12 | .vc-chat-color-picker { 13 | background-color: var(--background-secondary); 14 | border-radius: 8px; 15 | box-shadow: var(--elevation-stroke), var(--elevation-high); 16 | padding: 1rem 1.5rem; 17 | } 18 | 19 | .vc-chat-color-picker > button { 20 | margin-top: 0.5rem; 21 | } 22 | 23 | .vc-chat-color-picker [class^="defaultContainer"] { 24 | display: none; 25 | } 26 | 27 | .vc-color-bg { 28 | background: var(--color); 29 | } 30 | 31 | /* Light color in dark theme */ 32 | .theme-dark .vc-color-bg.vc-color-bg-invert, 33 | .theme-light .vc-color-bg:not(.vc-color-bg-invert) { 34 | color: var(--background-tertiary); 35 | } 36 | -------------------------------------------------------------------------------- /src/suncordplugins/messageLoggerEnhanced/native/utils.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { access, mkdir } from "fs/promises"; 8 | import path from "path"; 9 | 10 | export async function exists(filename: string) { 11 | try { 12 | await access(filename); 13 | return true; 14 | } catch (error) { 15 | return false; 16 | } 17 | } 18 | 19 | export async function ensureDirectoryExists(cacheDir: string) { 20 | if (!await exists(cacheDir)) 21 | await mkdir(cacheDir); 22 | } 23 | 24 | export function getAttachmentIdFromFilename(filename: string) { 25 | return path.parse(filename).name; 26 | } 27 | -------------------------------------------------------------------------------- /src/suncordplugins/messageLoggerEnhanced/utils/LimitedMap.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { settings } from "../index"; 20 | 21 | export class LimitedMap { 22 | public map: Map = new Map(); 23 | constructor() { } 24 | 25 | set(key: K, value: V) { 26 | if (settings.store.cacheLimit > 0 && this.map.size >= settings.store.cacheLimit) { 27 | // delete the first entry 28 | this.map.delete(this.map.keys().next().value); 29 | } 30 | this.map.set(key, value); 31 | } 32 | 33 | get(key: K) { 34 | return this.map.get(key); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/suncordplugins/messageLoggerEnhanced/utils/constants.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export const DEFAULT_IMAGE_CACHE_DIR = "savedImages"; 20 | -------------------------------------------------------------------------------- /src/suncordplugins/messageLoggerEnhanced/utils/freedom/importMeToPreload.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | //! hi this file is now usless. but ill keep it here just in case some people forgot to remove it from the preload.ts 20 | -------------------------------------------------------------------------------- /src/suncordplugins/notifyUserChanges/components/NotificationsOffIcon.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import type { SVGProps } from "react"; 8 | 9 | export function NotificationsOffIcon(props: SVGProps) { 10 | return (); 11 | } 12 | -------------------------------------------------------------------------------- /src/suncordplugins/notifyUserChanges/components/NotificationsOnIcon.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import type { SVGProps } from "react"; 8 | 9 | export function NotificationsOnIcon(props: SVGProps) { 10 | return (); 11 | } 12 | -------------------------------------------------------------------------------- /src/suncordplugins/notifyUserChanges/context-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/verticalsync/Suncord/e9682235804d61a14652903d9751bd456c06c4bb/src/suncordplugins/notifyUserChanges/context-menu.png -------------------------------------------------------------------------------- /src/suncordplugins/notifyUserChanges/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/verticalsync/Suncord/e9682235804d61a14652903d9751bd456c06c4bb/src/suncordplugins/notifyUserChanges/screenshot.png -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/components/buttons/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./CopyButton"; 20 | export * from "./DeleteButton"; 21 | export * from "./IconTooltipButton"; 22 | export * from "./NewButton"; 23 | export * from "./SaveButton"; 24 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/components/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./AuthorSummaryItem"; 20 | export * from "./buttons"; 21 | export * from "./ContributorAuthorSummary"; 22 | export * from "./settingsModal"; 23 | export * from "./settingsPanel"; 24 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/components/settingsModal/SettingsModalCardRow.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import React from "react"; 20 | 21 | export interface SettingsModalRowProps extends Pick, 22 | | "children" 23 | | "style"> { 24 | gap?: string; 25 | } 26 | 27 | export const SettingsModalCardRow = ({ children, style, gap }: SettingsModalRowProps) => { 28 | return ( 29 |
{children}
30 | ); 31 | }; 32 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/components/settingsModal/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./SettingsModal"; 20 | export * from "./SettingsModalCard"; 21 | export * from "./SettingsModalCardItem"; 22 | export * from "./SettingsModalCardRow"; 23 | export * from "./SettingsModalProfilesCard"; 24 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/components/settingsPanel/SettingsPanel.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { React } from "@webpack/common"; 20 | 21 | import { panelClasses } from "../../discordModules"; 22 | 23 | 24 | export interface SettingsPanelProps { 25 | children: React.ComponentProps<"div">["children"]; 26 | } 27 | 28 | export const SettingsPanel = ({ children }: SettingsPanelProps) => { 29 | return ( 30 |
32 | {children} 33 |
34 | ); 35 | }; 36 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/components/settingsPanel/index.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./SettingsPanel"; 20 | export * from "./SettingsPanelButton"; 21 | export * from "./SettingsPanelRow"; 22 | export * from "./SettingsPanelTooltipButton"; 23 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/constants/constants.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { Devs } from "@utils/constants"; 20 | 21 | import * as types from "../types/constants"; 22 | 23 | export const PluginInfo: types.PluginInfo = { 24 | PLUGIN_NAME: "PhilsPluginLibrary", 25 | DESCRIPTION: "A library for phil's plugins", 26 | AUTHOR: { 27 | ...Devs.philhk, 28 | github: "https://github.com/philhk" 29 | }, 30 | } as const; 31 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/constants/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./constants"; 20 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/discordModules/classes.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { findByPropsLazy } from "@webpack"; 20 | 21 | import * as types from "../types"; 22 | 23 | export const panelClasses: types.PanelClasses = findByPropsLazy("button", "buttonContents", "buttonColor"); 24 | 25 | // waitFor(filters.byProps("button", "buttonContents", "buttonColor"), result => panelClasses = result); 26 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/discordModules/components.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { LazyComponent } from "@utils/react"; 20 | import { findByCode } from "@webpack"; 21 | 22 | import { types } from "../"; 23 | 24 | export const UserSummaryItem = LazyComponent>(() => findByCode("defaultRenderUser", "showDefaultAvatarsForNullUsers")); 25 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/discordModules/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./classes"; 20 | export * from "./components"; 21 | export * from "./modules"; 22 | export * from "./stores"; 23 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/discordModules/modules.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { filters, waitFor } from "@webpack"; 20 | 21 | import * as types from "../types"; 22 | 23 | export let utils: types.Utils; 24 | 25 | waitFor(filters.byProps("getPidFromDesktopSource"), result => utils = result); 26 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/discordModules/stores.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { waitForStore } from "webpack/common/internal"; 20 | 21 | import * as types from "../types"; 22 | 23 | export let MediaEngineStore: types.MediaEngineStore; 24 | 25 | waitForStore("MediaEngineStore", store => MediaEngineStore = store); 26 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/emitter/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./emitter"; 20 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/patchers/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./patcher"; 20 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/patchers/patcher.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export abstract class Patcher { 20 | protected unpatchFunctions: (() => any)[] = []; 21 | public abstract patch(): this; 22 | public abstract unpatch(): this; 23 | protected _unpatch(): this { 24 | this.unpatchFunctions.forEach(fn => fn()); 25 | this.unpatchFunctions = []; 26 | 27 | return this; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/patches/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./audio"; 20 | export * from "./userPanel"; 21 | export * from "./video"; 22 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/store/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./profileable"; 20 | export * from "./store"; 21 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/styles/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./styles"; 20 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/styles/styles.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export const Styles = { 20 | infoCard: { 21 | padding: "1em", 22 | width: "100%", 23 | boxSizing: "border-box" 24 | }, 25 | } as const satisfies Record; 26 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/types/constants/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { PluginAuthor } from "@utils/types"; 20 | 21 | export type Author = PluginAuthor & { github?: string; }; 22 | export type Contributor = Author; 23 | 24 | export interface PluginInfo { 25 | [key: string]: any; 26 | PLUGIN_NAME: string, 27 | DESCRIPTION: string, 28 | AUTHOR: PluginAuthor & { github?: string; }, 29 | CONTRIBUTORS?: Record, 30 | README?: string; 31 | } 32 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/types/discordModules/classes/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./panelClasses"; 20 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/types/discordModules/components/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./userSummaryItem"; 20 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/types/discordModules/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./classes"; 20 | export * from "./components"; 21 | export * from "./modules"; 22 | export * from "./stores"; 23 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/types/discordModules/modules/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./conn"; 20 | export * from "./connection"; 21 | export * from "./framerateReducer"; 22 | export * from "./mediaEngine"; 23 | export * from "./utils"; 24 | export * from "./videoQualityManager"; 25 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/types/discordModules/stores/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./mediaEngineStore"; 20 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/types/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./common"; 20 | export * from "./constants"; 21 | export * from "./discordModules"; 22 | -------------------------------------------------------------------------------- /src/suncordplugins/philsPluginLibrary/utils/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./utils"; 20 | -------------------------------------------------------------------------------- /src/suncordplugins/runInConsole/style.css: -------------------------------------------------------------------------------- 1 | /* stylelint-disable selector-class-pattern */ 2 | .vc-ric-modal.small_f8e677 { 3 | height: 800px; 4 | width: 1000px; 5 | } 6 | 7 | .vc-ric-modal-content-code-input textarea { 8 | height: 95%; 9 | width: 100%; 10 | padding: 10px; 11 | font-size: 14px; 12 | font-family: monospace; 13 | resize: none; 14 | } 15 | 16 | .vc-ric-modal-header { 17 | justify-content: space-between; 18 | align-content: center; 19 | } 20 | 21 | .vc-ric-modal-header h1 { 22 | margin: 0; 23 | } 24 | 25 | .vc-ric-modal-header button { 26 | padding: 0; 27 | } 28 | -------------------------------------------------------------------------------- /src/suncordplugins/showBadgesInChat/styles.css: -------------------------------------------------------------------------------- 1 | .badge-settings { 2 | display: flex; 3 | gap: 5px; 4 | flex-direction: row; 5 | } 6 | 7 | .image-container { 8 | position: relative; 9 | transition: 0.15s; 10 | } 11 | 12 | .image-container img { 13 | width: 25px; 14 | height: 25px; 15 | cursor: pointer; 16 | } 17 | 18 | .disabled { 19 | opacity: 0.5; 20 | scale: 0.95; 21 | } 22 | -------------------------------------------------------------------------------- /src/suncordplugins/silentTyping/screenshot-guild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/verticalsync/Suncord/e9682235804d61a14652903d9751bd456c06c4bb/src/suncordplugins/silentTyping/screenshot-guild.png -------------------------------------------------------------------------------- /src/suncordplugins/silentTyping/screenshot-user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/verticalsync/Suncord/e9682235804d61a14652903d9751bd456c06c4bb/src/suncordplugins/silentTyping/screenshot-user.png -------------------------------------------------------------------------------- /src/suncordplugins/suncordToolbox/index.css: -------------------------------------------------------------------------------- 1 | .vc-toolbox-btn, 2 | .vc-toolbox-btn>svg { 3 | -webkit-app-region: no-drag; 4 | } 5 | 6 | .vc-toolbox-btn>svg { 7 | color: var(--interactive-normal); 8 | } 9 | 10 | .vc-toolbox-btn[class*="selected"]>svg { 11 | color: var(--interactive-active); 12 | } 13 | 14 | .vc-toolbox-btn:hover>svg { 15 | color: var(--interactive-hover); 16 | } 17 | -------------------------------------------------------------------------------- /src/suncordplugins/themeLibrary/native.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { IpcMainInvokeEvent } from "electron"; 8 | import { existsSync, type PathLike, writeFileSync } from "fs"; 9 | import { join } from "path"; 10 | 11 | import type { Theme } from "./types"; 12 | 13 | export async function themeExists(_: IpcMainInvokeEvent, dir: PathLike, theme: Theme) { 14 | return existsSync(join(dir.toString(), `${theme.name}.theme.css`)); 15 | } 16 | 17 | export function getThemesDir(_: IpcMainInvokeEvent, dir: PathLike, theme: Theme) { 18 | return join(dir.toString(), `${theme.name}.theme.css`); 19 | } 20 | 21 | export async function downloadTheme(_: IpcMainInvokeEvent, dir: PathLike, theme: Theme) { 22 | if (!theme.content || !theme.name) return; 23 | const path = join(dir.toString(), `${theme.name}.theme.css`); 24 | writeFileSync(path, Buffer.from(theme.content, "base64")); 25 | } 26 | -------------------------------------------------------------------------------- /src/utils/guards.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export function isTruthy(item: T): item is Exclude { 20 | return Boolean(item); 21 | } 22 | 23 | export function isNonNullish(item: T): item is Exclude { 24 | return item != null; 25 | } 26 | -------------------------------------------------------------------------------- /src/utils/lazyReact.tsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { ComponentType } from "react"; 8 | 9 | import { makeLazy } from "./lazy"; 10 | 11 | const NoopComponent = () => null; 12 | 13 | /** 14 | * A lazy component. The factory method is called on first render. 15 | * @param factory Function returning a Component 16 | * @param attempts How many times to try to get the component before giving up 17 | * @returns Result of factory function 18 | */ 19 | export function LazyComponent(factory: () => React.ComponentType, attempts = 5) { 20 | const get = makeLazy(factory, attempts); 21 | const LazyComponent = (props: T) => { 22 | const Component = get() ?? NoopComponent; 23 | return ; 24 | }; 25 | 26 | LazyComponent.$$vencordInternal = get; 27 | 28 | return LazyComponent as ComponentType; 29 | } 30 | -------------------------------------------------------------------------------- /src/utils/localStorage.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export const { localStorage } = window; 20 | -------------------------------------------------------------------------------- /src/utils/mergeDefaults.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | /** 8 | * Recursively merges defaults into an object and returns the same object 9 | * @param obj Object 10 | * @param defaults Defaults 11 | * @returns obj 12 | */ 13 | export function mergeDefaults(obj: T, defaults: T): T { 14 | for (const key in defaults) { 15 | const v = defaults[key]; 16 | if (typeof v === "object" && !Array.isArray(v)) { 17 | obj[key] ??= {} as any; 18 | mergeDefaults(obj[key], v); 19 | } else { 20 | obj[key] ??= v; 21 | } 22 | } 23 | return obj; 24 | } 25 | -------------------------------------------------------------------------------- /src/utils/native.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export function relaunch() { 20 | if (IS_DISCORD_DESKTOP) 21 | window.DiscordNative.app.relaunch(); 22 | else 23 | window.VesktopNative.app.relaunch(); 24 | } 25 | 26 | export function showItemInFolder(path: string) { 27 | if (IS_DISCORD_DESKTOP) 28 | window.DiscordNative.fileManager.showItemInFolder(path); 29 | else 30 | window.VesktopNative.fileManager.showItemInFolder(path); 31 | } 32 | -------------------------------------------------------------------------------- /src/utils/onlyOnce.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export function onlyOnce(f: F): F { 20 | let called = false; 21 | let result: any; 22 | return function onlyOnceWrapper(this: unknown) { 23 | if (called) return result; 24 | 25 | called = true; 26 | 27 | return (result = f.apply(this, arguments)); 28 | } as unknown as F; 29 | } 30 | -------------------------------------------------------------------------------- /src/utils/web-metadata.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | export let EXTENSION_BASE_URL: string; 8 | export let EXTENSION_VERSION: string; 9 | 10 | if (IS_EXTENSION) { 11 | const listener = (e: MessageEvent) => { 12 | if (e.data?.type === "vencord:meta") { 13 | ({ EXTENSION_BASE_URL, EXTENSION_VERSION } = e.data.meta); 14 | window.removeEventListener("message", listener); 15 | } 16 | }; 17 | 18 | window.addEventListener("message", listener); 19 | } 20 | -------------------------------------------------------------------------------- /src/webpack/common/classes.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import { findByPropsLazy, findLazy } from "@webpack"; 20 | 21 | import * as t from "./types/classes"; 22 | 23 | export const ModalImageClasses: t.ImageModalClasses = findLazy(m => m.image && m.modal && !m.applicationIcon); 24 | export const ButtonWrapperClasses: t.ButtonWrapperClasses = findByPropsLazy("buttonWrapper", "buttonContent"); 25 | -------------------------------------------------------------------------------- /src/webpack/common/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./classes"; 20 | export * from "./components"; 21 | export * from "./menu"; 22 | export * from "./react"; 23 | export * from "./stores"; 24 | export * as ComponentTypes from "./types/components.d"; 25 | export * as MenuTypes from "./types/menu.d"; 26 | export * as UtilTypes from "./types/utils.d"; 27 | export * from "./userSettings"; 28 | export * from "./utils"; 29 | -------------------------------------------------------------------------------- /src/webpack/common/types/classes.d.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export interface ImageModalClasses { 20 | image: string, 21 | modal: string, 22 | } 23 | 24 | export interface ButtonWrapperClasses { 25 | hoverScale: string; 26 | buttonWrapper: string; 27 | button: string; 28 | iconMask: string; 29 | buttonContent: string; 30 | icon: string; 31 | pulseIcon: string; 32 | pulseButton: string; 33 | notificationDot: string; 34 | sparkleContainer: string; 35 | sparkleStar: string; 36 | sparklePlus: string; 37 | sparkle: string; 38 | active: string; 39 | } 40 | -------------------------------------------------------------------------------- /src/webpack/common/types/index.d.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * from "./classes"; 20 | export * from "./components"; 21 | export * from "./fluxEvents"; 22 | export * from "./i18nMessages"; 23 | export * from "./menu"; 24 | export * from "./passiveupdatestate"; 25 | export * from "./stores"; 26 | export * from "./utils"; 27 | export * from "./voicestate"; 28 | -------------------------------------------------------------------------------- /src/webpack/common/types/passiveupdatestate.d.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { VoiceState } from "./voicestate"; 8 | 9 | export interface PassiveUpdateState { 10 | type: string; 11 | guildId: string; 12 | members?: ({ 13 | user: { 14 | avatar: null | string; 15 | communication_disabled_until: null | string; 16 | deaf: boolean; 17 | flags: number; 18 | joined_at: string; 19 | mute: boolean; 20 | nick: string; 21 | pending: boolean; 22 | premium_since: null | string; 23 | }; 24 | roles: (string)[]; 25 | premium_since: null | string; 26 | pending: boolean; 27 | nick: string | null; 28 | mute: boolean; 29 | joined_at: string; 30 | flags: number; 31 | deaf: boolean; 32 | communication_disabled_until: null | string; 33 | avatar: null | string; 34 | })[]; 35 | channels: ({ 36 | lastPinTimestamp?: string; 37 | lastMessageId: string; 38 | id: string; 39 | })[]; 40 | voiceStates?: VoiceState[]; 41 | } 42 | -------------------------------------------------------------------------------- /src/webpack/common/types/voicestate.d.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2024 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | export interface VoiceState { 8 | userId: string; 9 | channelId?: string; 10 | oldChannelId?: string; 11 | guildId?: string; 12 | deaf: boolean; 13 | mute: boolean; 14 | selfDeaf: boolean; 15 | selfMute: boolean; 16 | selfStream: boolean; 17 | selfVideo: boolean; 18 | sessionId: string; 19 | suppress: boolean; 20 | requestToSpeakTimestamp: string | null; 21 | } 22 | -------------------------------------------------------------------------------- /src/webpack/common/userSettings.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a Discord client mod 3 | * Copyright (c) 2023 Vendicated and contributors 4 | * SPDX-License-Identifier: GPL-3.0-or-later 5 | */ 6 | 7 | import { findLazy } from "@webpack"; 8 | 9 | export const UserSettingsActionCreators = { 10 | FrecencyUserSettingsActionCreators: findLazy(m => m.ProtoClass?.typeName?.endsWith(".FrecencyUserSettings")), 11 | PreloadedUserSettingsActionCreators: findLazy(m => m.ProtoClass?.typeName?.endsWith(".PreloadedUserSettings")), 12 | }; 13 | -------------------------------------------------------------------------------- /src/webpack/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Vencord, a modification for Discord's desktop app 3 | * Copyright (c) 2022 Vendicated and contributors 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | export * as Common from "./common"; 20 | export * from "./webpack"; 21 | --------------------------------------------------------------------------------