add multiple translations to translate command

This commit is contained in:
Brandon Silva 2022-03-13 01:39:48 -05:00
parent ef3868d231
commit 6dc9c83227
2 changed files with 65 additions and 49 deletions

View file

@ -36,23 +36,32 @@ class FlagTranslation(Converter):
async def convert(self, ctx: commands.Context, argument: str) -> List[str]:
result = []
if argument in FLAGS:
result = FLAGS[argument]["code"].upper()
else:
for lang in FLAGS:
if FLAGS[lang]["name"].lower() in argument.lower():
result = FLAGS[lang]["code"]
break
if FLAGS[lang]["country"].lower() in argument.lower():
result = FLAGS[lang]["code"]
break
if not FLAGS[lang]["code"]:
continue
if FLAGS[lang]["code"] in argument.lower() and len(argument) == 2:
result = FLAGS[lang]["code"]
break
args = [s.strip() for s in argument.split(",")]
for arg in args:
r = None
if arg in FLAGS:
r = FLAGS[arg]["code"].upper()
else:
for lang in FLAGS:
if FLAGS[lang]["name"].lower() in arg.lower():
r = FLAGS[lang]["code"]
break
if FLAGS[lang]["country"].lower() in arg.lower():
r = FLAGS[lang]["code"]
break
if not FLAGS[lang]["code"]:
continue
if FLAGS[lang]["code"] in arg.lower() and len(arg) == 2:
r = FLAGS[lang]["code"]
break
if r is None:
raise BadArgument('Language "{}" not found'.format(arg))
result.append(r)
# filter out repeated languages
result = list(set(result))
if not result:
raise BadArgument('Language "{}" not found'.format(argument))
raise BadArgument('Language(s) "{}" not found'.format(argument))
return result
@ -140,10 +149,7 @@ class GoogleTranslateAPI:
self.cache["guild_whitelist"][guild.id] = await self.config.guild(guild).whitelist()
async def check_bw_list(
self,
guild: discord.Guild,
channel: discord.TextChannel,
member: Union[discord.Member, discord.User],
self, guild: discord.Guild, channel: discord.TextChannel, member: Union[discord.Member, discord.User],
) -> bool:
can_run = True
if guild.id not in self.cache["guild_blacklist"]:
@ -416,10 +422,7 @@ class GoogleTranslateAPI:
translated_msg = await ch.send(msg, files=files)
async def translate_message(
self,
message: discord.Message,
flag: str,
reacted_user: Optional[discord.Member] = None,
self, message: discord.Message, flag: str, reacted_user: Optional[discord.Member] = None,
) -> None:
guild = cast(discord.Guild, message.guild)
channel = cast(discord.TextChannel, message.channel)

View file

@ -108,11 +108,7 @@ class Translate(GoogleTranslateAPI, commands.Cog):
@commands.command()
async def translate(
self,
ctx: commands.Context,
to_language: FlagTranslation,
*,
message: Union[discord.Message, str],
self, ctx: commands.Context, to_language: FlagTranslation, *, message: Union[discord.Message, str],
) -> None:
"""
Translate messages with Google Translate
@ -139,31 +135,48 @@ class Translate(GoogleTranslateAPI, commands.Cog):
except GoogleTranslateAPIError as e:
await ctx.send(str(e))
return
from_lang = detected_lang[0][0]["language"]
original_lang = detected_lang[0][0]["language"]
if to_language == original_lang:
return await ctx.send(
_("I cannot translate `{from_lang}` to `{to}`").format(from_lang=from_lang, to=to_language)
)
try:
translated_text = await self.translate_text(original_lang, to_language, message)
await self.add_requests(ctx.guild, message)
except GoogleTranslateAPIError as e:
await ctx.send(str(e))
return
if ctx.channel.permissions_for(ctx.me).embed_links:
translation = (translated_text, from_lang, to_language)
em = await self.translation_embed(author, translation, requestor)
if version_info >= VersionInfo.from_str("3.4.6") and msg.channel.id == ctx.channel.id:
await ctx.send(embed=em, reference=msg, mention_author=False)
original_lang = detected_lang[0][0]["language"]
embeds = None
msg_trans = f"**{original_lang}:** {message}\n"
for to_lang in to_language:
if to_lang == original_lang:
if len(to_language) == 1:
return await ctx.send(
_("I cannot translate `{from_lang}` to `{to}`").format(from_lang=original_lang, to=to_lang)
)
else:
continue
try:
translated_text = await self.translate_text(original_lang, to_lang, message)
await self.add_requests(ctx.guild, message)
except GoogleTranslateAPIError as e:
await ctx.send(str(e))
return
if ctx.channel.permissions_for(ctx.me).embed_links:
translation = (translated_text, original_lang, to_lang)
if embeds is None:
embeds = discord.Embed(colour=author.colour, description=f"**FROM:** {original_lang}")
embeds.set_author(name=author.display_name + _(" said:"), icon_url=str(author.avatar_url))
embeds.set_footer(text=f"Requested by {author}")
embeds.add_field(name=original_lang, value=message)
embeds.add_field(name=to_lang, value=translated_text)
else:
embeds.add_field(name=to_lang, value=translated_text)
else:
await ctx.send(embed=em)
msg_trans += f"**{to_lang}**: {translated_text}\n"
if embeds is not None:
if version_info >= VersionInfo.from_str("3.4.6") and msg.channel.id == ctx.channel.id:
await ctx.send(embed=embeds, reference=msg, mention_author=False)
else:
await ctx.send(embed=embeds)
else:
if version_info >= VersionInfo.from_str("3.4.6") and msg.channel.id == ctx.channel.id:
await ctx.send(translated_text, reference=msg, mention_author=False)
await ctx.send(msg_trans, reference=msg, mention_author=False)
else:
await ctx.send(translated_text)
await ctx.send(msg_trans)
@commands.group()
async def translateset(self, ctx: commands.Context) -> None: