From e348c258dc12898616afd550ef6e101c638b51a5 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 29 Aug 2024 09:29:54 -0400 Subject: [PATCH] Fix SoundboardLogger --- .../components/SoundBoardLog.tsx | 19 ++++++++++ .../soundBoardLogger/index.tsx | 35 ++++++++++++++++--- .../soundBoardLogger/settings.tsx | 6 ++++ 3 files changed, 56 insertions(+), 4 deletions(-) diff --git a/src/equicordplugins/soundBoardLogger/components/SoundBoardLog.tsx b/src/equicordplugins/soundBoardLogger/components/SoundBoardLog.tsx index 9d8a5fd5..8d85b3de 100644 --- a/src/equicordplugins/soundBoardLogger/components/SoundBoardLog.tsx +++ b/src/equicordplugins/soundBoardLogger/components/SoundBoardLog.tsx @@ -9,15 +9,23 @@ import { Flex } from "@components/Flex"; import { Margins } from "@utils/margins"; import { classes, copyWithToast } from "@utils/misc"; import { closeModal, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalRoot, ModalSize, openModal } from "@utils/modal"; +import { LazyComponent } from "@utils/react"; +import { filters, find } from "@webpack"; import { Button, Clickable, Forms, Text, Tooltip, useEffect, UserUtils, useState } from "@webpack/common"; import { User } from "discord-types/general"; import settings from "../settings"; import { clearLoggedSounds, getLoggedSounds } from "../store"; import { addListener, AvatarStyles, cl, downloadAudio, getEmojiUrl, playSound, removeListener, SoundLogEntry, UserSummaryItem } from "../utils"; +import { LogIcon } from "./Icons"; import { openMoreUsersModal } from "./MoreUsersModal"; import { openUserModal } from "./UserModal"; +const HeaderBarIcon = LazyComponent(() => { + const filter = filters.byCode(".HEADER_BAR_BADGE"); + return find(m => m.Icon && filter(m.Icon)).Icon; +}); + export async function openSoundBoardLog(): Promise { const data = await getLoggedSounds(); @@ -29,6 +37,17 @@ export async function openSoundBoardLog(): Promise { } +export function OpenSBLogsButton() { + return ( + openSoundBoardLog()} + tooltip={"Open SoundBoard Log"} + icon={LogIcon} + /> + ); +} + export default function SoundBoardLog({ data, closeModal }) { const [sounds, setSounds] = useState(data); const [users, setUsers] = useState([]); diff --git a/src/equicordplugins/soundBoardLogger/index.tsx b/src/equicordplugins/soundBoardLogger/index.tsx index 889d7238..06d9370c 100644 --- a/src/equicordplugins/soundBoardLogger/index.tsx +++ b/src/equicordplugins/soundBoardLogger/index.tsx @@ -6,11 +6,13 @@ import { addChatBarButton, removeChatBarButton } from "@api/ChatButtons"; import { disableStyle, enableStyle } from "@api/Styles"; +import ErrorBoundary from "@components/ErrorBoundary"; import { Devs, EquicordDevs } from "@utils/constants"; import definePlugin from "@utils/types"; import { FluxDispatcher } from "@webpack/common"; import { ChatBarIcon } from "./components/Icons"; +import { OpenSBLogsButton } from "./components/SoundBoardLog"; import settings from "./settings"; import { updateLoggedSounds } from "./store"; import styles from "./styles.css?managed"; @@ -19,9 +21,34 @@ import { getListeners } from "./utils"; export default definePlugin({ name: "SoundBoardLogger", authors: [Devs.Moxxie, EquicordDevs.Fres, Devs.echo, EquicordDevs.thororen], - dependencies: ["ChatInputButtonAPI"], - settings, description: "Logs all soundboards that are played in a voice chat and allows you to download them", + dependencies: ["ChatInputButtonAPI"], + patches: [ + { + predicate: () => settings.store.IconLocation === "toolbar", + find: "toolbar:function", + replacement: { + match: /(function \i\(\i\){)(.{1,200}toolbar.{1,100}mobileToolbar)/, + replace: "$1$self.addSBIconToToolBar(arguments[0]);$2" + } + } + ], + settings, + addSBIconToToolBar(e: { toolbar: React.ReactNode[] | React.ReactNode; }) { + if (Array.isArray(e.toolbar)) + return e.toolbar.push( + + + + ); + + e.toolbar = [ + + + , + e.toolbar, + ]; + }, start() { enableStyle(styles); FluxDispatcher.subscribe("VOICE_CHANNEL_EFFECT_SEND", async sound => { @@ -29,10 +56,10 @@ export default definePlugin({ await updateLoggedSounds(sound); getListeners().forEach(cb => cb()); }); - addChatBarButton("vc-soundlog-button", ChatBarIcon); + if (settings.store.IconLocation === "chat") addChatBarButton("vc-soundlog-button", ChatBarIcon); }, stop() { disableStyle(styles); - removeChatBarButton("vc-soundlog-button"); + if (settings.store.IconLocation === "chat") removeChatBarButton("vc-soundlog-button"); } }); diff --git a/src/equicordplugins/soundBoardLogger/settings.tsx b/src/equicordplugins/soundBoardLogger/settings.tsx index 4c300344..b53bf7fa 100644 --- a/src/equicordplugins/soundBoardLogger/settings.tsx +++ b/src/equicordplugins/soundBoardLogger/settings.tsx @@ -85,6 +85,12 @@ const settings = definePluginSettings({ default: 0.5, markers: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] }, + showLogsButton: { + default: true, + type: OptionType.BOOLEAN, + description: "Toggle to whenever show the toolbox or not", + restartNeeded: true, + }, }); export default settings;