Skip to content

Commit

Permalink
๐Ÿ”– Translate command rework
Browse files Browse the repository at this point in the history
๐ŸŽฏ Choose the target translation language
๐Ÿˆ‚๏ธ Support more languages
โš™๏ธ Preparation of translation system
  • Loading branch information
Pexilo committed Sep 4, 2022
1 parent 02cc5c8 commit baa03b4
Show file tree
Hide file tree
Showing 9 changed files with 154 additions and 51 deletions.
70 changes: 36 additions & 34 deletions src/commands/context-menu/translate-message.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
const { Command } = require("sheweny");
const { languageFlags } = require("../../languageList");

module.exports = class TranslateMessageContextMenuCommand extends Command {
constructor(client) {
super(client, {
name: "Translate",
type: "CONTEXT_MENU_MESSAGE",
description: "๐Ÿ”– Translate a message.",
examples:
"Use right click on a message -> `Applications` -> Translate.\n(Translate in server selected language)",
examples: "Use right click on a message -> `Applications` -> Translate.",
usage: "https://i.imgur.com/zjLEvcb.png",
category: "Context-Menu",
});
Expand All @@ -30,38 +28,42 @@ module.exports = class TranslateMessageContextMenuCommand extends Command {
),
});

const translated = await this.client.Translate(message.content, lang);
// what language the user can translate to
const translateTo = {
en: "๐Ÿ‡บ๐Ÿ‡ธ",
fr: "๐Ÿ‡ซ๐Ÿ‡ท",
de: "๐Ÿ‡ฉ๐Ÿ‡ช",
es: "๐Ÿ‡ช๐Ÿ‡ธ",
it: "๐Ÿ‡ฎ๐Ÿ‡น",
pt: "๐Ÿ‡ต๐Ÿ‡น",
ru: "๐Ÿ‡ท๐Ÿ‡บ",
ja: "๐Ÿ‡ฏ๐Ÿ‡ต",
};

// sort languages with the guild language in first
const sortedLanguages = {
[lang]: translateTo[lang],
...Object.fromEntries(
Object.entries(translateTo).filter(([key]) => key !== lang)
),
};

// create the buttons
const languagesButtons = Object.entries(sortedLanguages).map(
([key, value]) => {
return {
customId: `translate_${key}_${message.id}`,
style: key === lang ? "PRIMARY" : "SECONDARY",
emoji: value,
};
}
);

await interaction.editReply({
embeds: [
this.client
.Embed()
.setAuthor({
name: message.author.tag,
iconURL: message.author.displayAvatarURL({ dynamic: true }),
})
.addFields(
{
name:
`${
languageFlags[
translated.translations[0].detected_source_language.toLowerCase()
]
} ` +
`${await this.client.FastTranslate("Original", lang)}` +
":",
value: `${"```"}${message.content}${"```"}`,
},
{
name:
`${languageFlags[lang]} ` +
`${await this.client.FastTranslate("Translation", lang)}` +
":",
value: `${"```"}${translated.translations[0].text}${"```"}`,
}
)
.setFooter({
text: `Powered by DeepL.com`,
}),
content: "`๐Ÿ”–` Select a language to translate this message",
components: [
this.client.ButtonRow(languagesButtons.slice(0, 5)),
this.client.ButtonRow(languagesButtons.slice(5, 10)),
],
});
}
Expand Down
54 changes: 54 additions & 0 deletions src/interactions/buttons/translate-buttons.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
const { Button } = require("sheweny");
const { deeplLanguages } = require("../../languages/deeplLanguages");

module.exports = class translateButtons extends Button {
constructor(client) {
super(client, [/translate_.*/]);
}

async execute(button) {
if (!(await this.client.Defer(button))) return;
const { channel, customId } = button;

// Get the language, message from the button id
const lang = customId.split("_")[1];
const message = await channel.messages.fetch(customId.split("_")[2]);

// Translate the message
const translated = await this.client.Translate(message.content, lang);

return button.editReply({
embeds: [
this.client
.Embed()
.setAuthor({
name: message.author.tag,
iconURL: message.author.displayAvatarURL({ dynamic: true }),
})
.addFields(
{
name:
`${
deeplLanguages[
translated.translations[0].detected_source_language.toLowerCase()
]
} ` +
`${await this.client.FastTranslate("Original", lang)}` +
":",
value: `${"```"}${message.content}${"```"}`,
},
{
name:
`${deeplLanguages[lang]} ` +
`${await this.client.FastTranslate("Translation", lang)}` +
":",
value: `${"```"}${translated.translations[0].text}${"```"}`,
}
)
.setFooter({
text: `Powered by DeepL.com`,
}),
],
});
}
};
4 changes: 2 additions & 2 deletions src/interactions/select-menus/lang-thirdMsg-select.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const { SelectMenu } = require("sheweny");
const { languageFlags } = require("../../languageList");
const { supportedLanguages } = require("../../languages/supportedLanguages");

module.exports = class LanguageMenu3MsgSelect extends SelectMenu {
constructor(client) {
Expand All @@ -9,7 +9,7 @@ module.exports = class LanguageMenu3MsgSelect extends SelectMenu {
if (!(await this.client.Defer(selectMenu))) return;
const { guild } = selectMenu;

for (const [key, value] of Object.entries(languageFlags)) {
for (const [key, value] of Object.entries(supportedLanguages)) {
if (selectMenu.values[0] === `${key}_option`) {
this.client.updateGuild(guild, { language: key });

Expand Down
6 changes: 3 additions & 3 deletions src/interactions/select-menus/setupMenu-secondMsg-select.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const { SelectMenu } = require("sheweny");
const { ChannelType } = require("discord.js");
const { languageFlags } = require("../../languageList");
const { supportedLanguages } = require("../../languages/supportedLanguages");

module.exports = class SetupMenu2MsgSelect extends SelectMenu {
constructor(client) {
Expand All @@ -16,11 +16,11 @@ module.exports = class SetupMenu2MsgSelect extends SelectMenu {
case "lang_option":
const languageRow = this.client.SelectMenuRow(
"language-select",
"Which language do you want to use?"
"Select a supported language"
);

const defaultLanguage = fetchGuild.language;
for (const [key, value] of Object.entries(languageFlags)) {
for (const [key, value] of Object.entries(supportedLanguages)) {
languageRow.components[0].addOptions({
label: key,
value: `${key}_option`,
Expand Down
12 changes: 0 additions & 12 deletions src/languageList.js

This file was deleted.

53 changes: 53 additions & 0 deletions src/languages/deeplLanguages.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
module.exports = {
deeplLanguages: {
en: "๐Ÿ‡บ๐Ÿ‡ธ",
//french
fr: "๐Ÿ‡ซ๐Ÿ‡ท",
//german
de: "๐Ÿ‡ฉ๐Ÿ‡ช",
//spanish
es: "๐Ÿ‡ช๐Ÿ‡ธ",
//italian
it: "๐Ÿ‡ฎ๐Ÿ‡น",
//portuguese
pt: "๐Ÿ‡ต๐Ÿ‡น",
//russian
ru: "๐Ÿ‡ท๐Ÿ‡บ",
//jap
ja: "๐Ÿ‡ฏ๐Ÿ‡ต",
//bulgarian
bg: "๐Ÿ‡ง๐Ÿ‡ฌ",
//chineese
zh: "๐Ÿ‡จ๐Ÿ‡ณ",
//czech
cs: "๐Ÿ‡จ๐Ÿ‡ฟ",
//danish
da: "๐Ÿ‡ฉ๐Ÿ‡ฐ",
//dutch
nl: "๐Ÿ‡ณ๐Ÿ‡ฑ",
//finnish
fi: "๐Ÿ‡ซ๐Ÿ‡ฎ",
//estonian
et: "๐Ÿ‡ช๐Ÿ‡ช",
//greek
el: "๐Ÿ‡ฌ๐Ÿ‡ท",
//hungarian
hu: "๐Ÿ‡ญ๐Ÿ‡บ",
//indonesian
id: "๐Ÿ‡ฎ๐Ÿ‡ฉ",
//lithuanian
lt: "๐Ÿ‡ฑ๐Ÿ‡น",
//polish
pl: "๐Ÿ‡ต๐Ÿ‡ฑ",
//romanian
ro: "๐Ÿ‡ท๐Ÿ‡ด",
//slovak
sk: "๐Ÿ‡ธ๐Ÿ‡ฐ",
//slovenian
sl: "๐Ÿ‡ธ๐Ÿ‡ฎ",
//swedish
sv: "๐Ÿ‡ธ๐Ÿ‡ช",
//turkish
tr: "๐Ÿ‡น๐Ÿ‡ท",
},
};
Empty file added src/languages/en.json
Empty file.
Empty file added src/languages/fr.json
Empty file.
6 changes: 6 additions & 0 deletions src/languages/supportedLanguages.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
supportedLanguages: {
en: "๐Ÿ‡บ๐Ÿ‡ธ",
fr: "๐Ÿ‡ซ๐Ÿ‡ท",
},
};

0 comments on commit baa03b4

Please sign in to comment.