aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/translate/utils.ts
diff options
context:
space:
mode:
authorV <vendicated@riseup.net>2023-05-10 23:14:04 +0200
committerGitHub <noreply@github.com>2023-05-10 23:14:04 +0200
commitcb385d1b280551eb16f1f9836a93cc9bcc43da15 (patch)
tree87897b84fe78d4d10686981c8bd1c31a5326b46d /src/plugins/translate/utils.ts
parent195f1a032fc63d4fd35564a9d11f8ed4afbcac4d (diff)
downloadVencord-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/utils.ts')
-rw-r--r--src/plugins/translate/utils.ts75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/plugins/translate/utils.ts b/src/plugins/translate/utils.ts
new file mode 100644
index 0000000..784ec25
--- /dev/null
+++ b/src/plugins/translate/utils.ts
@@ -0,0 +1,75 @@
+/*
+ * 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 { classNameFactory } from "@api/Styles";
+
+import { settings } from "./settings";
+
+export const cl = classNameFactory("vc-trans-");
+
+interface TranslationData {
+ src: string;
+ sentences: {
+ // 🏳️‍⚧️
+ trans: string;
+ }[];
+}
+
+export interface TranslationValue {
+ src: string;
+ text: string;
+}
+
+export async function translate(kind: "received" | "sent", text: string): Promise<TranslationValue> {
+ const sourceLang = settings.store[kind + "Input"];
+ const targetLang = settings.store[kind + "Output"];
+
+ const url = "https://translate.googleapis.com/translate_a/single?" + new URLSearchParams({
+ // see https://stackoverflow.com/a/29537590 for more params
+ // holy shidd nvidia
+ client: "gtx",
+ // source language
+ sl: sourceLang,
+ // target language
+ tl: targetLang,
+ // what to return, t = translation probably
+ dt: "t",
+ // Send json object response instead of weird array
+ dj: "1",
+ source: "input",
+ // query, duh
+ q: text
+ });
+
+ const res = await fetch(url);
+ if (!res.ok)
+ throw new Error(
+ `Failed to translate "${text}" (${sourceLang} -> ${targetLang}`
+ + `\n${res.status} ${res.statusText}`
+ );
+
+ const { src, sentences }: TranslationData = await res.json();
+
+ return {
+ src,
+ text: sentences.
+ map(s => s?.trans).
+ filter(Boolean).
+ join("")
+ };
+}