From 6dc9c832274d5defb128c3b1f0259a3abf37c779 Mon Sep 17 00:00:00 2001 From: Brandon Silva Date: Sun, 13 Mar 2022 01:39:48 -0500 Subject: [PATCH] add multiple translations to translate command --- translate/api.py | 51 ++++++++++++++++++---------------- translate/translate.py | 63 +++++++++++++++++++++++++----------------- 2 files changed, 65 insertions(+), 49 deletions(-) diff --git a/translate/api.py b/translate/api.py index 388ba76..e6288ce 100644 --- a/translate/api.py +++ b/translate/api.py @@ -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) diff --git a/translate/translate.py b/translate/translate.py index c9b4719..bf835bb 100644 --- a/translate/translate.py +++ b/translate/translate.py @@ -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: