/* * 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 . */ import { ApplicationCommandInputType, ApplicationCommandOptionType, findOption, sendBotMessage } from "@api/Commands"; import { definePluginSettings } from "@api/settings"; import ErrorBoundary from "@components/ErrorBoundary"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; import { Button, ButtonLooks, ButtonWrapperClasses, FluxDispatcher, React, Tooltip } from "@webpack/common"; const settings = definePluginSettings({ showIcon: { type: OptionType.BOOLEAN, default: false, description: "Show an icon for toggling the plugin", restartNeeded: true, }, isEnabled: { type: OptionType.BOOLEAN, description: "Toggle functionality", default: true, } }); function SilentTypingToggle() { const { isEnabled } = settings.use(["isEnabled"]); const toggle = () => settings.store.isEnabled = !settings.store.isEnabled; return ( {(tooltipProps: any) => (
)}
); } export default definePlugin({ name: "SilentTyping", authors: [Devs.Ven, Devs.dzshn], description: "Hide that you are typing", patches: [ { find: "startTyping:", replacement: { match: /startTyping:.+?,stop/, replace: "startTyping:$self.startTyping,stop" } }, { find: ".activeCommandOption", predicate: () => settings.store.showIcon, replacement: { match: /\i=\i\.activeCommand,\i=\i\.activeCommandOption,.{1,133}(.)=\[\];/, replace: "$&;$1.push($self.chatBarIcon());", } }, ], dependencies: ["CommandsAPI"], settings, commands: [{ name: "silenttype", description: "Toggle whether you're hiding that you're typing or not.", inputType: ApplicationCommandInputType.BUILT_IN, options: [ { name: "value", description: "whether to hide or not that you're typing (default is toggle)", required: false, type: ApplicationCommandOptionType.BOOLEAN, }, ], execute: async (args, ctx) => { settings.store.isEnabled = !!findOption(args, "value", !settings.store.isEnabled); sendBotMessage(ctx.channel.id, { content: settings.store.isEnabled ? "Silent typing enabled!" : "Silent typing disabled!", }); }, }], async startTyping(channelId: string) { if (settings.store.isEnabled) return; FluxDispatcher.dispatch({ type: "TYPING_START_LOCAL", channelId }); }, chatBarIcon: ErrorBoundary.wrap(SilentTypingToggle, { noop: true }), });