|
|
|
@ -10,15 +10,26 @@ from services.environment_service import EnvService
|
|
|
|
|
ALLOWED_GUILDS = EnvService.get_allowed_guilds()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def build_translation_embed(text, translated_text, translated_language, detected_language, requestor: discord.User):
|
|
|
|
|
def build_translation_embed(
|
|
|
|
|
text,
|
|
|
|
|
translated_text,
|
|
|
|
|
translated_language,
|
|
|
|
|
detected_language,
|
|
|
|
|
requestor: discord.User,
|
|
|
|
|
):
|
|
|
|
|
"""Build an embed for the translation"""
|
|
|
|
|
embed_description = f"**Original Text:** \n\n{text}\n\n **Translated Text:** \n\n{translated_text}"
|
|
|
|
|
embed_description = (
|
|
|
|
|
f"**Original Text:** \n\n{text}\n\n **Translated Text:** \n\n{translated_text}"
|
|
|
|
|
)
|
|
|
|
|
embed = discord.Embed(
|
|
|
|
|
title=f"Translation from {detected_language} to {translated_language}",
|
|
|
|
|
description=embed_description,
|
|
|
|
|
color=0x311432,
|
|
|
|
|
)
|
|
|
|
|
embed.set_footer(text=f"Requested by {requestor.name}#{requestor.discriminator}", icon_url=requestor.avatar.url)
|
|
|
|
|
embed.set_footer(
|
|
|
|
|
text=f"Requested by {requestor.name}#{requestor.discriminator}",
|
|
|
|
|
icon_url=requestor.avatar.url,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
return embed
|
|
|
|
|
|
|
|
|
@ -68,7 +79,10 @@ class TranslationService(discord.Cog, name="TranslationService"):
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
response, detected_language = await self.translation_model.send_translate_request(
|
|
|
|
|
(
|
|
|
|
|
response,
|
|
|
|
|
detected_language,
|
|
|
|
|
) = await self.translation_model.send_translate_request(
|
|
|
|
|
text,
|
|
|
|
|
TranslationModel.get_country_code_from_name(target_language),
|
|
|
|
|
formality,
|
|
|
|
@ -78,25 +92,37 @@ class TranslationService(discord.Cog, name="TranslationService"):
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
await ctx.respond(
|
|
|
|
|
embed=build_translation_embed(text, response, target_language, TranslationModel.get_country_name_from_code(detected_language), ctx.user)
|
|
|
|
|
embed=build_translation_embed(
|
|
|
|
|
text,
|
|
|
|
|
response,
|
|
|
|
|
target_language,
|
|
|
|
|
TranslationModel.get_country_name_from_code(detected_language),
|
|
|
|
|
ctx.user,
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
async def translate_action(self, ctx: discord.ApplicationContext, message):
|
|
|
|
|
await ctx.defer(ephemeral=True)
|
|
|
|
|
# If the message is only an embed and there's no content, don't translate.
|
|
|
|
|
if message.content == "" and len(message.embeds) > 0:
|
|
|
|
|
await ctx.respond("Cannot translate an embed.", ephemeral=True, delete_after=30)
|
|
|
|
|
await ctx.respond(
|
|
|
|
|
"Cannot translate an embed.", ephemeral=True, delete_after=30
|
|
|
|
|
)
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
if len(message.content) > 2000:
|
|
|
|
|
await ctx.respond("Message is too long to translate.", ephemeral=True, delete_after=30)
|
|
|
|
|
await ctx.respond(
|
|
|
|
|
"Message is too long to translate.", ephemeral=True, delete_after=30
|
|
|
|
|
)
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
selection_message = await ctx.respond(
|
|
|
|
|
"Select language", ephemeral=True, delete_after=60
|
|
|
|
|
)
|
|
|
|
|
await selection_message.edit(
|
|
|
|
|
view=TranslateView(self.translation_model, message, selection_message, ctx.user)
|
|
|
|
|
view=TranslateView(
|
|
|
|
|
self.translation_model, message, selection_message, ctx.user
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
async def languages_command(self, ctx):
|
|
|
|
@ -131,7 +157,9 @@ class TranslateView(discord.ui.View):
|
|
|
|
|
self, select, interaction
|
|
|
|
|
): # the function called when the user is done selecting options
|
|
|
|
|
try:
|
|
|
|
|
self.language = TranslationModel.get_country_code_from_name(select.values[0])
|
|
|
|
|
self.language = TranslationModel.get_country_code_from_name(
|
|
|
|
|
select.values[0]
|
|
|
|
|
)
|
|
|
|
|
self.language_long = select.values[0]
|
|
|
|
|
await interaction.response.defer()
|
|
|
|
|
except:
|
|
|
|
@ -173,7 +201,10 @@ class TranslateView(discord.ui.View):
|
|
|
|
|
)
|
|
|
|
|
return
|
|
|
|
|
try:
|
|
|
|
|
response, detected_language = await self.translation_model.send_translate_request(
|
|
|
|
|
(
|
|
|
|
|
response,
|
|
|
|
|
detected_language,
|
|
|
|
|
) = await self.translation_model.send_translate_request(
|
|
|
|
|
self.message.content,
|
|
|
|
|
self.language,
|
|
|
|
|
self.formality,
|
|
|
|
@ -181,7 +212,11 @@ class TranslateView(discord.ui.View):
|
|
|
|
|
await self.message.reply(
|
|
|
|
|
mention_author=False,
|
|
|
|
|
embed=build_translation_embed(
|
|
|
|
|
self.message.content, response, self.language_long, TranslationModel.get_country_name_from_code(detected_language), self.requestor
|
|
|
|
|
self.message.content,
|
|
|
|
|
response,
|
|
|
|
|
self.language_long,
|
|
|
|
|
TranslationModel.get_country_name_from_code(detected_language),
|
|
|
|
|
self.requestor,
|
|
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
await self.selection_message.delete()
|
|
|
|
@ -195,7 +230,9 @@ class TranslateView(discord.ui.View):
|
|
|
|
|
except discord.errors.HTTPException as e:
|
|
|
|
|
if e.code == 50035:
|
|
|
|
|
await interaction.response.send_message(
|
|
|
|
|
"Message was too long to translate.", ephemeral=True, delete_after=15
|
|
|
|
|
"Message was too long to translate.",
|
|
|
|
|
ephemeral=True,
|
|
|
|
|
delete_after=15,
|
|
|
|
|
)
|
|
|
|
|
return
|
|
|
|
|
except Exception as e:
|
|
|
|
|