|
|
@ -12,6 +12,7 @@ from models.deepl_model import TranslationModel
|
|
|
|
from services.environment_service import EnvService
|
|
|
|
from services.environment_service import EnvService
|
|
|
|
from services.image_service import ImageService
|
|
|
|
from services.image_service import ImageService
|
|
|
|
from services.text_service import TextService
|
|
|
|
from services.text_service import TextService
|
|
|
|
|
|
|
|
|
|
|
|
ALLOWED_GUILDS = EnvService.get_allowed_guilds()
|
|
|
|
ALLOWED_GUILDS = EnvService.get_allowed_guilds()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -25,10 +26,15 @@ def build_translation_embed( text, translated_text, translated_language):
|
|
|
|
embed.add_field(name="Translated Text", value=translated_text, inline=False)
|
|
|
|
embed.add_field(name="Translated Text", value=translated_text, inline=False)
|
|
|
|
|
|
|
|
|
|
|
|
return embed
|
|
|
|
return embed
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TranslationService(discord.Cog, name="TranslationService"):
|
|
|
|
class TranslationService(discord.Cog, name="TranslationService"):
|
|
|
|
"""Cog containing a draw commands and file management for saved images"""
|
|
|
|
"""Cog containing a draw commands and file management for saved images"""
|
|
|
|
|
|
|
|
|
|
|
|
def __init__(
|
|
|
|
def __init__(
|
|
|
|
self, bot, translation_model,
|
|
|
|
self,
|
|
|
|
|
|
|
|
bot,
|
|
|
|
|
|
|
|
translation_model,
|
|
|
|
):
|
|
|
|
):
|
|
|
|
super().__init__()
|
|
|
|
super().__init__()
|
|
|
|
self.bot = bot
|
|
|
|
self.bot = bot
|
|
|
@ -45,10 +51,7 @@ class TranslationService(discord.Cog, name="TranslationService"):
|
|
|
|
embed.add_field(
|
|
|
|
embed.add_field(
|
|
|
|
name="Languages",
|
|
|
|
name="Languages",
|
|
|
|
value=", ".join(
|
|
|
|
value=", ".join(
|
|
|
|
[
|
|
|
|
[f"{name}" for name in TranslationModel.get_all_country_names()]
|
|
|
|
f"{name}"
|
|
|
|
|
|
|
|
for name in TranslationModel.get_all_country_names()
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
),
|
|
|
|
),
|
|
|
|
inline=False,
|
|
|
|
inline=False,
|
|
|
|
)
|
|
|
|
)
|
|
|
@ -60,14 +63,19 @@ class TranslationService(discord.Cog, name="TranslationService"):
|
|
|
|
await ctx.defer()
|
|
|
|
await ctx.defer()
|
|
|
|
# TODO Add pagination!
|
|
|
|
# TODO Add pagination!
|
|
|
|
|
|
|
|
|
|
|
|
if target_language.lower().strip() not in TranslationModel.get_all_country_names(lower=True):
|
|
|
|
if (
|
|
|
|
|
|
|
|
target_language.lower().strip()
|
|
|
|
|
|
|
|
not in TranslationModel.get_all_country_names(lower=True)
|
|
|
|
|
|
|
|
):
|
|
|
|
await ctx.respond(
|
|
|
|
await ctx.respond(
|
|
|
|
f"The language {target_language} is not recognized or supported. Please use `/languages` to see the list of supported languages."
|
|
|
|
f"The language {target_language} is not recognized or supported. Please use `/languages` to see the list of supported languages."
|
|
|
|
)
|
|
|
|
)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
response = await self.translation_model.send_translate_request(text, TranslationModel.get_country_code_from_name(target_language))
|
|
|
|
response = await self.translation_model.send_translate_request(
|
|
|
|
|
|
|
|
text, TranslationModel.get_country_code_from_name(target_language)
|
|
|
|
|
|
|
|
)
|
|
|
|
except aiohttp.ClientResponseError as e:
|
|
|
|
except aiohttp.ClientResponseError as e:
|
|
|
|
await ctx.respond(f"There was an error with the DeepL API: {e.message}")
|
|
|
|
await ctx.respond(f"There was an error with the DeepL API: {e.message}")
|
|
|
|
return
|
|
|
|
return
|
|
|
@ -76,40 +84,59 @@ class TranslationService(discord.Cog, name="TranslationService"):
|
|
|
|
|
|
|
|
|
|
|
|
async def translate_action(self, ctx, message):
|
|
|
|
async def translate_action(self, ctx, message):
|
|
|
|
await ctx.defer(ephemeral=True)
|
|
|
|
await ctx.defer(ephemeral=True)
|
|
|
|
selection_message = await ctx.respond("Select language", ephemeral=True, delete_after=60)
|
|
|
|
selection_message = await ctx.respond(
|
|
|
|
await selection_message.edit(view=TranslateView(self.translation_model, message, selection_message))
|
|
|
|
"Select language", ephemeral=True, delete_after=60
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
await selection_message.edit(
|
|
|
|
|
|
|
|
view=TranslateView(self.translation_model, message, selection_message)
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
async def languages_command(self, ctx):
|
|
|
|
async def languages_command(self, ctx):
|
|
|
|
"""Show all languages supported for translation"""
|
|
|
|
"""Show all languages supported for translation"""
|
|
|
|
await ctx.defer()
|
|
|
|
await ctx.defer()
|
|
|
|
await ctx.respond(embed=self.build_supported_language_embed())
|
|
|
|
await ctx.respond(embed=self.build_supported_language_embed())
|
|
|
|
|
|
|
|
|
|
|
|
class TranslateView(discord.ui.View):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TranslateView(discord.ui.View):
|
|
|
|
def __init__(self, translation_model, message, selection_message):
|
|
|
|
def __init__(self, translation_model, message, selection_message):
|
|
|
|
super().__init__()
|
|
|
|
super().__init__()
|
|
|
|
self.translation_model = translation_model
|
|
|
|
self.translation_model = translation_model
|
|
|
|
self.message = message
|
|
|
|
self.message = message
|
|
|
|
self.selection_message = selection_message
|
|
|
|
self.selection_message = selection_message
|
|
|
|
|
|
|
|
|
|
|
|
@discord.ui.select( # the decorator that lets you specify the properties of the select menu
|
|
|
|
@discord.ui.select( # the decorator that lets you specify the properties of the select menu
|
|
|
|
placeholder = "Language", # the placeholder text that will be displayed if nothing is selected
|
|
|
|
placeholder="Language", # the placeholder text that will be displayed if nothing is selected
|
|
|
|
min_values = 1, # the minimum number of values that must be selected by the users
|
|
|
|
min_values=1, # the minimum number of values that must be selected by the users
|
|
|
|
max_values = 1, # the maximum number of values that can be selected by the users
|
|
|
|
max_values=1, # the maximum number of values that can be selected by the users
|
|
|
|
options = [ # the list of options from which users can choose, a required field
|
|
|
|
options=[ # the list of options from which users can choose, a required field
|
|
|
|
discord.SelectOption(
|
|
|
|
discord.SelectOption(
|
|
|
|
label=name,
|
|
|
|
label=name,
|
|
|
|
) for name in TranslationModel.get_all_country_names()
|
|
|
|
)
|
|
|
|
]
|
|
|
|
for name in TranslationModel.get_all_country_names()
|
|
|
|
|
|
|
|
],
|
|
|
|
)
|
|
|
|
)
|
|
|
|
async def select_callback(self, select, interaction): # the function called when the user is done selecting options
|
|
|
|
async def select_callback(
|
|
|
|
|
|
|
|
self, select, interaction
|
|
|
|
|
|
|
|
): # the function called when the user is done selecting options
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
response = await self.translation_model.send_translate_request(self.message.content, TranslationModel.get_country_code_from_name(select.values[0]))
|
|
|
|
response = await self.translation_model.send_translate_request(
|
|
|
|
await self.message.reply(mention_author=False, embed=build_translation_embed(self.message.content, response, select.values[0]))
|
|
|
|
self.message.content,
|
|
|
|
|
|
|
|
TranslationModel.get_country_code_from_name(select.values[0]),
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
await self.message.reply(
|
|
|
|
|
|
|
|
mention_author=False,
|
|
|
|
|
|
|
|
embed=build_translation_embed(self.message.content, response, select.values[0]),
|
|
|
|
|
|
|
|
)
|
|
|
|
await self.selection_message.delete()
|
|
|
|
await self.selection_message.delete()
|
|
|
|
except aiohttp.ClientResponseError as e:
|
|
|
|
except aiohttp.ClientResponseError as e:
|
|
|
|
await interaction.response.send_message(f"There was an error with the DeepL API: {e.message}", ephemeral=True, delete_after=15)
|
|
|
|
await interaction.response.send_message(
|
|
|
|
|
|
|
|
f"There was an error with the DeepL API: {e.message}",
|
|
|
|
|
|
|
|
ephemeral=True,
|
|
|
|
|
|
|
|
delete_after=15,
|
|
|
|
|
|
|
|
)
|
|
|
|
return
|
|
|
|
return
|
|
|
|
except Exception as e:
|
|
|
|
except Exception as e:
|
|
|
|
await interaction.response.send_message(f"There was an error: {e}", ephemeral=True, delete_after=15)
|
|
|
|
await interaction.response.send_message(
|
|
|
|
|
|
|
|
f"There was an error: {e}", ephemeral=True, delete_after=15
|
|
|
|
|
|
|
|
)
|
|
|
|
return
|
|
|
|
return
|
|
|
|