translate command
This commit is contained in:
parent
9630f02275
commit
663b97ae39
2 changed files with 206 additions and 3 deletions
204
src/modules/misc/translate.js
Normal file
204
src/modules/misc/translate.js
Normal file
|
|
@ -0,0 +1,204 @@
|
|||
const Command = require("#lib/command.js");
|
||||
const InteractionCommand = require("#lib/interactionCommand.js");
|
||||
|
||||
const {ApplicationCommandOptionTypes} = require("#util/dconstants.js");
|
||||
const {Icons} = require("#util/constants.js");
|
||||
|
||||
const languageCodeToName = {
|
||||
en: "English",
|
||||
sq: "Albanian",
|
||||
ar: "Arabic",
|
||||
az: "Azerbaijani",
|
||||
eu: "Basque",
|
||||
bn: "Bengali",
|
||||
bg: "Bulgarian",
|
||||
ca: "Catalan",
|
||||
"zh-Hans": "Chinese",
|
||||
"zh-Hant": "Chinese (traditional)",
|
||||
cs: "Czech",
|
||||
da: "Danish",
|
||||
nl: "Dutch",
|
||||
eo: "Esperanto",
|
||||
et: "Estonian",
|
||||
fi: "Finnish",
|
||||
fr: "French",
|
||||
gl: "Galician",
|
||||
de: "German",
|
||||
el: "Greek",
|
||||
he: "Hebrew",
|
||||
hi: "Hindi",
|
||||
hu: "Hungarian",
|
||||
id: "Indonesian",
|
||||
ga: "Irish",
|
||||
it: "Italian",
|
||||
ja: "Japanese",
|
||||
ko: "Korean",
|
||||
ky: "Kyrgyz",
|
||||
lv: "Latvian",
|
||||
lt: "Lithuanian",
|
||||
ms: "Malay",
|
||||
nb: "Norwegian",
|
||||
fa: "Persian",
|
||||
pl: "Polish",
|
||||
pt: "Portuguese",
|
||||
"pt-BR": "Portuguese (Brazil)",
|
||||
ro: "Romanian",
|
||||
ru: "Russian",
|
||||
sk: "Slovak",
|
||||
sl: "Slovenian",
|
||||
es: "Spanish",
|
||||
sv: "Swedish",
|
||||
tl: "Tagalog",
|
||||
th: "Thai",
|
||||
tr: "Turkish",
|
||||
uk: "Ukrainian",
|
||||
ur: "Urdu",
|
||||
auto: "Auto Detect",
|
||||
};
|
||||
const languageCodeToFlag = {
|
||||
en: "\ud83c\uddfa\ud83c\uddf8",
|
||||
sq: "\ud83c\udde6\ud83c\uddf1",
|
||||
ar: "\ud83c\uddea\ud83c\uddec",
|
||||
az: "\ud83c\udde6\ud83c\uddff",
|
||||
eu: "\ud83d\udfe5",
|
||||
bn: "\ud83c\udde7\ud83c\udde9",
|
||||
bg: "\ud83c\udde7\ud83c\uddec",
|
||||
ca: "\ud83c\udde6\ud83c\udde9",
|
||||
"zh-Hans": "\ud83c\udde8\ud83c\uddf3",
|
||||
"zh-Hant": "\ud83c\udde8\ud83c\uddf3",
|
||||
cs: "\ud83c\udde8\ud83c\uddff",
|
||||
da: "\ud83c\udde9\ud83c\uddf0",
|
||||
nl: "\ud83c\uddf3\ud83c\uddf1",
|
||||
eo: "\ud83d\udfe9",
|
||||
et: "\ud83c\uddea\ud83c\uddea",
|
||||
fi: "\ud83c\uddeb\ud83c\uddee",
|
||||
fr: "\ud83c\uddeb\ud83c\uddf7",
|
||||
gl: "\ud83d\udfe6",
|
||||
de: "\ud83c\udde9\ud83c\uddea",
|
||||
el: "\ud83c\uddec\ud83c\uddf7",
|
||||
he: "\ud83c\uddee\ud83c\uddf1",
|
||||
hi: "\ud83c\uddee\ud83c\uddf3",
|
||||
hu: "\ud83c\udded\ud83c\uddfa",
|
||||
id: "\ud83c\uddee\ud83c\udde9",
|
||||
ga: "\ud83c\uddee\ud83c\uddea",
|
||||
it: "\ud83c\uddee\ud83c\uddf9",
|
||||
ja: "\ud83c\uddef\ud83c\uddf5",
|
||||
ko: "\ud83c\uddf0\ud83c\uddf7",
|
||||
ky: "\ud83c\uddf0\ud83c\uddec",
|
||||
lv: "\ud83c\uddf1\ud83c\uddfb",
|
||||
lt: "\ud83c\uddf1\ud83c\uddf9",
|
||||
ms: "\ud83c\uddf2\ud83c\uddfe",
|
||||
nb: "\ud83c\uddf3\ud83c\uddf4",
|
||||
fa: "\ud83c\uddee\ud83c\uddf7",
|
||||
pl: "\ud83c\uddf5\ud83c\uddf1",
|
||||
pt: "\ud83c\uddf5\ud83c\uddf9",
|
||||
"pt-BR": "\ud83c\udde7\ud83c\uddf7",
|
||||
ro: "\ud83c\uddf7\ud83c\uddf4",
|
||||
ru: "\ud83c\uddf7\ud83c\uddfa",
|
||||
sk: "\ud83c\uddf8\ud83c\uddf0",
|
||||
sl: "\ud83c\uddf8\ud83c\uddee",
|
||||
es: "\ud83c\uddea\ud83c\uddf8",
|
||||
sv: "\ud83c\uddf8\ud83c\uddfb",
|
||||
tl: "\ud83c\uddf5\ud83c\udded",
|
||||
th: "\ud83c\uddf9\ud83c\udded",
|
||||
tr: "\ud83c\uddf9\ud83c\uddf7",
|
||||
uk: "\ud83c\uddfa\ud83c\udde6",
|
||||
ur: "\ud83c\uddf5\ud83c\uddf0",
|
||||
};
|
||||
|
||||
const translate = new Command("translate");
|
||||
translate.category = "misc";
|
||||
translate.helpText = "Translate";
|
||||
translate.usage = "<--from=lang> <--to=lang> [string]";
|
||||
translate.addAlias("tr");
|
||||
translate.callback = async function (msg, line, args, {from, to, languages}) {
|
||||
if (!hf.config.libretranslate) return "No translation provider is set on this instance.";
|
||||
|
||||
if (languages) {
|
||||
return Object.keys(languageCodeToName)
|
||||
.map((code) => `${languageCodeToFlag} ${languageCodeToName[code]} - \`${code}\``)
|
||||
.join("\n");
|
||||
}
|
||||
|
||||
let text = args?.join(" ") ?? "";
|
||||
if (text == null || text == "") {
|
||||
if (msg.messageReference?.messageID) {
|
||||
const reply = await msg.channel.getMessage(msg.messageReference.messageID);
|
||||
text = reply.content;
|
||||
} else {
|
||||
return "Arguments or reply required.";
|
||||
}
|
||||
}
|
||||
|
||||
if (text == null || text == "") return "No text provided.";
|
||||
|
||||
if (from == null) from = "auto";
|
||||
if (to == null) to = "en";
|
||||
if (languageCodeToName[from] == null) {
|
||||
from = "auto";
|
||||
}
|
||||
if (languageCodeToName[to] == null) {
|
||||
to = "en";
|
||||
}
|
||||
|
||||
const res = await fetch(`${hf.config.libretranslate}/translate`, {
|
||||
method: "POST",
|
||||
headers: {"Content-Type": "application/json"},
|
||||
body: JSON.stringify({
|
||||
q: text,
|
||||
source: from,
|
||||
target: to,
|
||||
alternatives: 0,
|
||||
api_key: "",
|
||||
}),
|
||||
}).then((res) => res.json());
|
||||
|
||||
const fromLanguage = res.detectedLanguage?.language ?? from;
|
||||
const confidence = res.detectedLanguage ? ` (${res.detectedLanguage.confidence}%)` : "";
|
||||
|
||||
return `-# Translated from ${languageCodeToFlag[fromLanguage] ?? Icons.blank} **${
|
||||
languageCodeToName[fromLanguage] ?? `<unknown: \`${fromLanguage}\`>`
|
||||
}**${confidence} to ${languageCodeToFlag[to] ?? Icons.blank} **${
|
||||
languageCodeToName[to] ?? `<unknown: \`${to}\`>`
|
||||
}**\n${res.translatedText
|
||||
.replaceAll("`", "\\`")
|
||||
.replaceAll("*", "\\*")
|
||||
.replaceAll("_", "\\_")
|
||||
.replaceAll("||", "|\u200b|")
|
||||
.replaceAll("~~", "~\u200b~")}`;
|
||||
};
|
||||
hf.registerCommand(translate);
|
||||
|
||||
const translateInteraction = new InteractionCommand("translate");
|
||||
translateInteraction.helpText = "Translate";
|
||||
translateInteraction.options.content = {
|
||||
name: "text",
|
||||
type: ApplicationCommandOptionTypes.STRING,
|
||||
description: "Text to translate",
|
||||
required: true,
|
||||
default: "",
|
||||
};
|
||||
translateInteraction.options.from = {
|
||||
name: "from",
|
||||
type: ApplicationCommandOptionTypes.STRING,
|
||||
description: "Language to translate from (default: Auto Detect)",
|
||||
default: "auto",
|
||||
choices: Object.entries(languageCodeToName).map(([code, name]) => ({name, value: code})),
|
||||
};
|
||||
translateInteraction.options.to = {
|
||||
name: "to",
|
||||
type: ApplicationCommandOptionTypes.STRING,
|
||||
description: "Language to translate to (default: English)",
|
||||
default: "en",
|
||||
choices: Object.entries(languageCodeToName)
|
||||
.filter(([code]) => code !== "auto")
|
||||
.map(([code, name]) => ({name, value: code})),
|
||||
};
|
||||
translateInteraction.callback = async function (interaction) {
|
||||
const text = this.getOption(interaction, "text");
|
||||
const from = this.getOption(interaction, "from");
|
||||
const to = this.getOption(interaction, "to");
|
||||
|
||||
return translate.callback(interaction, text, text.split(" "), {from, to});
|
||||
};
|
||||
hf.registerCommand(translateInteraction);
|
||||
|
|
@ -35,8 +35,8 @@ charinfo.callback = async function (msg, line) {
|
|||
.replace("_", "\\_")
|
||||
.replace("`", "\\`")
|
||||
.replace("*", "\\*")
|
||||
.replace("<", "\\<")
|
||||
.replace(">", "\\>")}`
|
||||
.replace("<", "\\<")
|
||||
.replace(">", "\\>")}`
|
||||
)
|
||||
.join("\n");
|
||||
|
||||
|
|
@ -71,4 +71,3 @@ charinfoInteraction.callback = async function (interaction) {
|
|||
return charinfo.callback(interaction, content);
|
||||
};
|
||||
hf.registerCommand(charinfoInteraction);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue