mirror of
https://github.com/neoarz/Syntrel.git
synced 2025-12-25 11:40:12 +01:00
fix(translate): fix embedding of translate command and remove TranslateView
The translate command now accepts text from replied messages if no text is provided, improving usability. The TranslateView and related UI logic have been removed, simplifying the translation output to a single embed message. Error handling and embed formatting have also been updated for consistency.
This commit is contained in:
@@ -136,15 +136,15 @@ class Translate(commands.Cog, name="translate"):
|
|||||||
"lv": "Latvian",
|
"lv": "Latvian",
|
||||||
}
|
}
|
||||||
|
|
||||||
async def send_embed(self, context: Context, embed: discord.Embed, *, ephemeral: bool = False, view: discord.ui.View = None) -> None:
|
async def send_embed(self, context: Context, embed: discord.Embed, *, ephemeral: bool = False) -> None:
|
||||||
interaction = getattr(context, "interaction", None)
|
interaction = getattr(context, "interaction", None)
|
||||||
if interaction is not None:
|
if interaction is not None:
|
||||||
if interaction.response.is_done():
|
if interaction.response.is_done():
|
||||||
await interaction.followup.send(embed=embed, ephemeral=ephemeral, view=view)
|
await interaction.followup.send(embed=embed, ephemeral=ephemeral)
|
||||||
else:
|
else:
|
||||||
await interaction.response.send_message(embed=embed, ephemeral=ephemeral, view=view)
|
await interaction.response.send_message(embed=embed, ephemeral=ephemeral)
|
||||||
else:
|
else:
|
||||||
await context.send(embed=embed, view=view)
|
await context.send(embed=embed)
|
||||||
|
|
||||||
async def _translate_with_google_web(self, text: str, from_lang: str = "auto", to_lang: str = "en") -> dict:
|
async def _translate_with_google_web(self, text: str, from_lang: str = "auto", to_lang: str = "en") -> dict:
|
||||||
try:
|
try:
|
||||||
@@ -229,24 +229,35 @@ class Translate(commands.Cog, name="translate"):
|
|||||||
)
|
)
|
||||||
@app_commands.autocomplete(to_lang=language_autocomplete)
|
@app_commands.autocomplete(to_lang=language_autocomplete)
|
||||||
@app_commands.autocomplete(from_lang=language_autocomplete)
|
@app_commands.autocomplete(from_lang=language_autocomplete)
|
||||||
async def translate(self, context: Context, text: str, to_lang: str = "en", from_lang: str = None):
|
async def translate(self, context: Context, text: str = None, to_lang: str = "en", from_lang: str = None):
|
||||||
if not text.strip():
|
if not text or not text.strip():
|
||||||
embed = discord.Embed(
|
if context.message and context.message.reference and context.message.reference.resolved:
|
||||||
title="Error",
|
replied_message = context.message.reference.resolved
|
||||||
description="Please provide text to translate.",
|
if hasattr(replied_message, 'content') and replied_message.content:
|
||||||
color=0xE02B2B,
|
text = replied_message.content
|
||||||
)
|
else:
|
||||||
embed.set_author(name="Translate", icon_url="https://yes.nighty.works/raw/8VLDcg.webp")
|
embed = discord.Embed(
|
||||||
await self.send_embed(context, embed, ephemeral=True)
|
title="Error",
|
||||||
return
|
description="The replied message has no text content to translate.",
|
||||||
|
color=0xE02B2B,
|
||||||
|
).set_author(name="Utility", icon_url="https://yes.nighty.works/raw/8VLDcg.webp")
|
||||||
|
await self.send_embed(context, embed, ephemeral=True)
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
embed = discord.Embed(
|
||||||
|
title="Error",
|
||||||
|
description="Please provide text to translate or reply to a message with text.",
|
||||||
|
color=0xE02B2B,
|
||||||
|
).set_author(name="Utility", icon_url="https://yes.nighty.works/raw/8VLDcg.webp")
|
||||||
|
await self.send_embed(context, embed, ephemeral=True)
|
||||||
|
return
|
||||||
|
|
||||||
if to_lang not in self.languages:
|
if to_lang not in self.languages:
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="Error",
|
title="Error",
|
||||||
description=f"Invalid target language code: `{to_lang}`. Use the autocomplete feature to see available languages.",
|
description=f"Invalid target language code: `{to_lang}`. Use the autocomplete feature to see available languages.",
|
||||||
color=0xE02B2B,
|
color=0xE02B2B,
|
||||||
)
|
).set_author(name="Utility", icon_url="https://yes.nighty.works/raw/8VLDcg.webp")
|
||||||
embed.set_author(name="Translate", icon_url="https://yes.nighty.works/raw/8VLDcg.webp")
|
|
||||||
await self.send_embed(context, embed, ephemeral=True)
|
await self.send_embed(context, embed, ephemeral=True)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -255,8 +266,7 @@ class Translate(commands.Cog, name="translate"):
|
|||||||
title="Error",
|
title="Error",
|
||||||
description=f"Invalid source language code: `{from_lang}`. Use the autocomplete feature to see available languages.",
|
description=f"Invalid source language code: `{from_lang}`. Use the autocomplete feature to see available languages.",
|
||||||
color=0xE02B2B,
|
color=0xE02B2B,
|
||||||
)
|
).set_author(name="Utility", icon_url="https://yes.nighty.works/raw/8VLDcg.webp")
|
||||||
embed.set_author(name="Translate", icon_url="https://yes.nighty.works/raw/8VLDcg.webp")
|
|
||||||
await self.send_embed(context, embed, ephemeral=True)
|
await self.send_embed(context, embed, ephemeral=True)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -270,87 +280,23 @@ class Translate(commands.Cog, name="translate"):
|
|||||||
|
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="Translation",
|
title="Translation",
|
||||||
|
description=f"**Original:** {text}\n**Translated:** {result['translatedText']}",
|
||||||
color=0x7289DA,
|
color=0x7289DA,
|
||||||
)
|
)
|
||||||
embed.set_author(name="Translate", icon_url="https://yes.nighty.works/raw/8VLDcg.webp")
|
embed.set_author(name="Utility", icon_url="https://yes.nighty.works/raw/8VLDcg.webp")
|
||||||
embed.add_field(name="Original", value=text, inline=False)
|
embed.set_footer(text=f"{from_lang_name} » {to_lang_name}")
|
||||||
embed.add_field(name="Translated", value=result["translatedText"], inline=False)
|
|
||||||
embed.add_field(name="From", value=f"{detected_lang} ({from_lang_name})", inline=True)
|
|
||||||
embed.add_field(name="To", value=f"{to_lang} ({to_lang_name})", inline=True)
|
|
||||||
|
|
||||||
view = TranslateView(text, result["translatedText"], detected_lang, to_lang, self)
|
await self.send_embed(context, embed)
|
||||||
await self.send_embed(context, embed, view=view)
|
|
||||||
else:
|
else:
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="Error",
|
title="Error",
|
||||||
description="Translation failed. Please try again later.",
|
description="Translation failed. Please try again later.",
|
||||||
color=0xE02B2B,
|
color=0xE02B2B,
|
||||||
)
|
).set_author(name="Utility", icon_url="https://yes.nighty.works/raw/8VLDcg.webp")
|
||||||
embed.set_author(name="Translate", icon_url="https://yes.nighty.works/raw/8VLDcg.webp")
|
|
||||||
await self.send_embed(context, embed, ephemeral=True)
|
await self.send_embed(context, embed, ephemeral=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class TranslateView(discord.ui.View):
|
|
||||||
def __init__(self, original_text: str, translated_text: str, from_lang: str, to_lang: str, translate_cog):
|
|
||||||
super().__init__(timeout=300)
|
|
||||||
self.original_text = original_text
|
|
||||||
self.translated_text = translated_text
|
|
||||||
self.from_lang = from_lang
|
|
||||||
self.to_lang = to_lang
|
|
||||||
self.translate_cog = translate_cog
|
|
||||||
|
|
||||||
@discord.ui.button(label="Swap Languages", style=discord.ButtonStyle.secondary)
|
|
||||||
async def swap_languages(self, interaction: discord.Interaction, button: discord.ui.Button):
|
|
||||||
if self.from_lang == "auto":
|
|
||||||
embed = discord.Embed(
|
|
||||||
title="Cannot Swap",
|
|
||||||
description="Cannot swap when source language is auto-detected. Please specify a source language first.",
|
|
||||||
color=0xE02B2B,
|
|
||||||
)
|
|
||||||
embed.set_author(name="Translate", icon_url="https://yes.nighty.works/raw/8VLDcg.webp")
|
|
||||||
await interaction.response.send_message(embed=embed, ephemeral=True)
|
|
||||||
return
|
|
||||||
|
|
||||||
result = await self.translate_cog._translate_with_google_web(
|
|
||||||
self.translated_text, self.from_lang, "en"
|
|
||||||
)
|
|
||||||
|
|
||||||
if result and result.get("translatedText"):
|
|
||||||
from_lang_name = self.translate_cog.languages.get(self.from_lang, self.from_lang)
|
|
||||||
to_lang_name = self.translate_cog.languages.get("en", "English")
|
|
||||||
|
|
||||||
embed = discord.Embed(
|
|
||||||
title="Translation (Swapped)",
|
|
||||||
color=0x7289DA,
|
|
||||||
)
|
|
||||||
embed.set_author(name="Translate", icon_url="https://yes.nighty.works/raw/8VLDcg.webp")
|
|
||||||
embed.add_field(name="Original", value=self.translated_text, inline=False)
|
|
||||||
embed.add_field(name="Translated", value=result["translatedText"], inline=False)
|
|
||||||
embed.add_field(name="From", value=f"{self.from_lang} ({from_lang_name})", inline=True)
|
|
||||||
embed.add_field(name="To", value=f"en ({to_lang_name})", inline=True)
|
|
||||||
|
|
||||||
new_view = TranslateView(
|
|
||||||
self.translated_text,
|
|
||||||
result["translatedText"],
|
|
||||||
self.from_lang,
|
|
||||||
"en",
|
|
||||||
self.translate_cog
|
|
||||||
)
|
|
||||||
|
|
||||||
await interaction.response.edit_message(embed=embed, view=new_view)
|
|
||||||
else:
|
|
||||||
embed = discord.Embed(
|
|
||||||
title="Error",
|
|
||||||
description="Failed to swap translation. Please try again later.",
|
|
||||||
color=0xE02B2B,
|
|
||||||
)
|
|
||||||
embed.set_author(name="Translate", icon_url="https://yes.nighty.works/raw/8VLDcg.webp")
|
|
||||||
await interaction.response.send_message(embed=embed, ephemeral=True)
|
|
||||||
|
|
||||||
async def on_timeout(self):
|
|
||||||
for item in self.children:
|
|
||||||
item.disabled = True
|
|
||||||
|
|
||||||
|
|
||||||
async def setup(bot):
|
async def setup(bot):
|
||||||
|
|||||||
Reference in New Issue
Block a user