Update code to typescript

This commit is contained in:
2026-05-14 20:06:15 +02:00
parent fdb4b2d50f
commit f2ce38c176
68 changed files with 7647 additions and 5121 deletions

42
src/modules/mangle.ts Normal file
View File

@@ -0,0 +1,42 @@
import { join } from "node:path";
import { respond } from "../audio/AudioService.js";
import type { Module } from "./types.js";
/**
* Calls Google Translate's unofficial endpoint. No SDK — the maintained
* `node-google-translate-skidz` wrapper was abandoned, so we hit the same
* single_translate endpoint directly with a fetch.
*/
async function translate(text: string, fromLang: string, toLang: string): Promise<string> {
const url = new URL("https://translate.googleapis.com/translate_a/single");
url.searchParams.set("client", "gtx");
url.searchParams.set("sl", fromLang);
url.searchParams.set("tl", toLang);
url.searchParams.set("dt", "t");
url.searchParams.set("q", text);
const res = await fetch(url.toString());
if (!res.ok) throw new Error(`translate ${fromLang}->${toLang} failed: ${res.status}`);
const json = (await res.json()) as unknown[];
const segments = json[0];
if (!Array.isArray(segments)) throw new Error("translate: unexpected response shape");
return segments
.map((seg) => (Array.isArray(seg) && typeof seg[0] === "string" ? seg[0] : ""))
.join("");
}
export const mangle: Module = ({ audio, commands, config, rootDir }) => {
const sysmsg = join(rootDir, "sysmsg.wav");
const langs = (config.MANGLE_LANGS ?? "en,de,ja,ru,en").split(",").map((l) => l.trim());
commands.register("mangle", async (_args, message) => {
let str = message.content.slice(config.PREFIX.length + "mangle".length).trim();
if (!str) return;
for (let i = 0; i < langs.length - 1; i++) {
const from = langs[i];
const to = langs[i + 1];
if (!from || !to) break;
str = await translate(str, from, to);
}
respond(audio, sysmsg, message, str);
});
};