/* * Vencord, a Discord client mod * Copyright (c) 2025 Vendicated and contributors * SPDX-License-Identifier: GPL-3.0-or-later */ import "./styles.css"; import { Icon, User } from "@vencord/discord-types"; import { findComponentByCodeLazy, findStoreLazy } from "@webpack"; import { Button, ChannelStore, MediaEngineStore, NavigationRouter, Tooltip, UserStore, VoiceActions } from "@webpack/common"; import { JSX } from "react"; import { settings } from "./settings"; const SoundboardStore = findStoreLazy("SoundboardStore"); const DeafenIconSelf = findComponentByCodeLazy("M22.7 2.7a1", "1.4l20-20ZM17") as Icon; const DeafenIconOther = findComponentByCodeLazy("M21.76.83a5.02", "M12.38") as Icon; const ChatIcon = findComponentByCodeLazy(".css,d:\"M12 22a10") as Icon; const MuteIconSelf = findComponentByCodeLazy("d:\"m2.7 22.7 20-20a1", "1.4ZM10.8") as Icon; const MuteIconOther = findComponentByCodeLazy("M21.76.83a5.02", "M12 2c.33 0") as Icon; function VoiceUserButton({ user, tooltip, icon, onClick }: { user: User; tooltip: string; icon: JSX.Element; onClick: () => void; }) { const isCurrent = (user.id === UserStore.getCurrentUser().id); if (isCurrent && settings.store.showButtonsSelf === "hide") return null; const disabled = isCurrent && settings.store.showButtonsSelf === "disable"; return (
{({ onMouseEnter, onMouseLeave }) => ( )}
); } function getUserName(user: User) { const username = `@${user.username}`; if (settings.store.whichNameToShow === "global") { return user.globalName ?? username; } else if (settings.store.whichNameToShow === "nickname") { return username; } else if (settings.store.whichNameToShow === "both" && user.globalName) { return `${user.globalName} / ${username}`; } return username; } export function UserChatButton({ user }: { user: User; }) { const isCurrent = (user.id === UserStore.getCurrentUser().id); return ( } onClick={() => { if (isCurrent) { NavigationRouter.transitionTo("/users/@me/"); return; } const chanId = ChannelStore.getDMFromUserId(user.id); NavigationRouter.transitionTo(`/channels/@me/${chanId}/`); }} /> ); } export function UserMuteButton({ user }: { user: User; }) { const isCurrent = (user.id === UserStore.getCurrentUser().id); const isMuted = (isCurrent && MediaEngineStore.isSelfMute()) || MediaEngineStore.isLocalMute(user.id); const color = isMuted ? "var(--status-danger)" : "var(--channels-default)"; return ( : } onClick={() => { if (isCurrent) { VoiceActions.toggleSelfMute(); return; } VoiceActions.toggleLocalMute(user.id); }} /> ); } export function UserDeafenButton({ user }: { user: User; }) { const isCurrent = (user.id === UserStore.getCurrentUser().id); const isMuted = MediaEngineStore.isLocalMute(user.id); const isSoundboardMuted = SoundboardStore.isLocalSoundboardMuted(user.id); const isVideoDisabled = MediaEngineStore.isLocalVideoDisabled(user.id); const isDeafened = isCurrent && MediaEngineStore.isSelfDeaf() || isMuted && isSoundboardMuted && isVideoDisabled; const color = isDeafened ? "var(--status-danger)" : "var(--channels-default)"; return ( : } onClick={() => { if (isCurrent) { VoiceActions.toggleSelfDeaf(); return; } if (isMuted) { VoiceActions.toggleLocalMute(user.id); if (settings.store.muteSoundboard && isSoundboardMuted) { VoiceActions.toggleLocalSoundboardMute(user.id); } if (settings.store.disableVideo && isVideoDisabled) { VoiceActions.setDisableLocalVideo( user.id, "ENABLED", "default" ); } } else { VoiceActions.toggleLocalMute(user.id); if (settings.store.muteSoundboard && !isSoundboardMuted) { VoiceActions.toggleLocalSoundboardMute(user.id); } if (settings.store.disableVideo && !isVideoDisabled) { VoiceActions.setDisableLocalVideo( user.id, "DISABLED", "default" ); } } }} /> ); }