diff options
author | Nuckyz <61953774+Nuckyz@users.noreply.github.com> | 2023-04-02 21:13:44 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-03 02:13:44 +0200 |
commit | ae80749dd80b69fd269df23956c66832951ebcd5 (patch) | |
tree | bbe476334c335301271709be53a0e9e5a812d841 /src/plugins | |
parent | 8c47b7080d1b16df319cfadbc442f8a25e5a5a49 (diff) | |
download | Vencord-ae80749dd80b69fd269df23956c66832951ebcd5.tar.gz Vencord-ae80749dd80b69fd269df23956c66832951ebcd5.tar.bz2 Vencord-ae80749dd80b69fd269df23956c66832951ebcd5.zip |
Game Activity Toggle and SettingsStoreAPI (#587)
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/apiSettingsStore.ts | 38 | ||||
-rw-r--r-- | src/plugins/gameActivityToggle/index.tsx | 73 | ||||
-rw-r--r-- | src/plugins/gameActivityToggle/style.css | 19 |
3 files changed, 130 insertions, 0 deletions
diff --git a/src/plugins/apiSettingsStore.ts b/src/plugins/apiSettingsStore.ts new file mode 100644 index 0000000..ca1dc65 --- /dev/null +++ b/src/plugins/apiSettingsStore.ts @@ -0,0 +1,38 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2022 Vendicated and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. +*/ + +import { Devs } from "@utils/constants"; +import definePlugin from "@utils/types"; + +export default definePlugin({ + name: "SettingsStoreAPI", + description: "Patches Discord's SettingsStores to expose their group and name", + authors: [Devs.Nuckyz], + + patches: [ + { + find: '"textAndImages","renderSpoilers"', + replacement: [ + { + match: /(?<=INFREQUENT_USER_ACTION.{0,20}),useSetting:function/, + replace: ",settingsStoreApiGroup:arguments[0],settingsStoreApiName:arguments[1]$&" + } + ] + } + ] +}); diff --git a/src/plugins/gameActivityToggle/index.tsx b/src/plugins/gameActivityToggle/index.tsx new file mode 100644 index 0000000..1617e9c --- /dev/null +++ b/src/plugins/gameActivityToggle/index.tsx @@ -0,0 +1,73 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2023 Vendicated and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. +*/ + +import "./style.css"; + +import { getSettingStoreLazy } from "@api/SettingsStore"; +import ErrorBoundary from "@components/ErrorBoundary"; +import { Devs } from "@utils/constants"; +import definePlugin from "@utils/types"; +import { Tooltip } from "@webpack/common"; + +const ShowCurrentGame = getSettingStoreLazy<boolean>("status", "showCurrentGame"); + +function GameActivityToggleButton() { + const showCurrentGame = ShowCurrentGame?.useSetting(); + + return ( + <Tooltip text="Toggle Game Activity"> + {tooltipProps => ( + <button + {...tooltipProps} + className="game-activity-toggle-btn" + onClick={() => ShowCurrentGame?.updateSetting(old => !old)} + > + <svg + width="24" + height="24" + viewBox="0 96 960 960" + > + <g fill="currentColor"> + <path d="M182 856q-51 0-79-35.5T82 734l42-300q9-60 53.5-99T282 296h396q60 0 104.5 39t53.5 99l42 300q7 51-21 86.5T778 856q-21 0-39-7.5T706 826l-90-90H344l-90 90q-15 15-33 22.5t-39 7.5Zm498-240q17 0 28.5-11.5T720 576q0-17-11.5-28.5T680 536q-17 0-28.5 11.5T640 576q0 17 11.5 28.5T680 616Zm-80-120q17 0 28.5-11.5T640 456q0-17-11.5-28.5T600 416q-17 0-28.5 11.5T560 456q0 17 11.5 28.5T600 496ZM310 616h60v-70h70v-60h-70v-70h-60v70h-70v60h70v70Z" /> + {!showCurrentGame && <line x1="920" y1="280" x2="40" y2="880" stroke="var(--status-danger)" stroke-width="80" />} + </g> + </svg> + </button> + )} + </Tooltip> + ); +} + +export default definePlugin({ + name: "GameActivityToggle", + description: "Adds a button next to the mic and deafen button to toggle game activity.", + authors: [Devs.Nuckyz], + dependencies: ["SettingsStoreAPI"], + + patches: [ + { + find: ".Messages.ACCOUNT_SPEAKING_WHILE_MUTED", + replacement: { + match: /this\.renderNameZone\(\).+?children:\[/, + replace: "$&$self.GameActivityToggleButton()," + } + } + ], + + GameActivityToggleButton: ErrorBoundary.wrap(GameActivityToggleButton, { noop: true }) +}); diff --git a/src/plugins/gameActivityToggle/style.css b/src/plugins/gameActivityToggle/style.css new file mode 100644 index 0000000..b6abf47 --- /dev/null +++ b/src/plugins/gameActivityToggle/style.css @@ -0,0 +1,19 @@ +[class*="withTagAsButton"] { + min-width: 88px; +} + +.game-activity-toggle-btn { + all: unset; + color: var(--interactive-normal); + width: 32px; + height: 32px; + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; +} + +.game-activity-toggle-btn:hover { + color: var(--interactive-hover); + background-color: var(--background-modifier-selected); +} |