diff options
author | V <vendicated@riseup.net> | 2023-05-10 23:14:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-10 23:14:04 +0200 |
commit | cb385d1b280551eb16f1f9836a93cc9bcc43da15 (patch) | |
tree | 87897b84fe78d4d10686981c8bd1c31a5326b46d /src/plugins/translate/index.tsx | |
parent | 195f1a032fc63d4fd35564a9d11f8ed4afbcac4d (diff) | |
download | Vencord-cb385d1b280551eb16f1f9836a93cc9bcc43da15.tar.gz Vencord-cb385d1b280551eb16f1f9836a93cc9bcc43da15.tar.bz2 Vencord-cb385d1b280551eb16f1f9836a93cc9bcc43da15.zip |
New Plugin: Translate (#1089)
Co-authored-by: Nuckyz <61953774+Nuckyz@users.noreply.github.com>
Diffstat (limited to 'src/plugins/translate/index.tsx')
-rw-r--r-- | src/plugins/translate/index.tsx | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/src/plugins/translate/index.tsx b/src/plugins/translate/index.tsx new file mode 100644 index 0000000..cb61254 --- /dev/null +++ b/src/plugins/translate/index.tsx @@ -0,0 +1,86 @@ +/* + * 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 "./styles.css"; + +import { addAccessory, removeAccessory } from "@api/MessageAccessories"; +import { addPreSendListener, removePreSendListener } from "@api/MessageEvents"; +import { addButton, removeButton } from "@api/MessagePopover"; +import ErrorBoundary from "@components/ErrorBoundary"; +import { Devs } from "@utils/constants"; +import definePlugin from "@utils/types"; +import { ChannelStore } from "@webpack/common"; + +import { settings } from "./settings"; +import { TranslateChatBarIcon, TranslateIcon } from "./TranslateIcon"; +import { handleTranslate, TranslationAccessory } from "./TranslationAccessory"; +import { translate } from "./utils"; + +export default definePlugin({ + name: "Translate", + description: "Translate messages with Google Translate", + authors: [Devs.Ven], + dependencies: ["MessageAccessoriesAPI", "MessagePopoverAPI", "MessageEventsAPI"], + settings, + // not used, just here in case some other plugin wants it or w/e + translate, + + patches: [ + { + find: ".activeCommandOption", + replacement: { + match: /(.)\.push.{1,30}disabled:(\i),.{1,20}\},"gift"\)\)/, + replace: "$&;try{$2||$1.push($self.chatBarIcon())}catch{}", + } + }, + ], + + start() { + addAccessory("vc-translation", props => <TranslationAccessory message={props.message} />); + + addButton("vc-translate", message => { + if (!message.content) return null; + + return { + label: "Translate", + icon: TranslateIcon, + message, + channel: ChannelStore.getChannel(message.channel_id), + onClick: async () => { + const trans = await translate("received", message.content); + handleTranslate(message.id, trans); + } + }; + }); + + this.preSend = addPreSendListener(async (_, message) => { + if (!settings.store.autoTranslate) return; + if (!message.content) return; + + message.content = (await translate("sent", message.content)).text; + }); + }, + + stop() { + removePreSendListener(this.preSend); + removeButton("vc-translate"); + removeAccessory("vc-translation"); + }, + + chatBarIcon: ErrorBoundary.wrap(TranslateChatBarIcon, { noop: true }), +}); |