mirror of
https://github.com/brandons209/Red-bot-Cogs.git
synced 2024-06-28 11:00:23 +12:00
add multiple translations to translate command
This commit is contained in:
parent
ef3868d231
commit
6dc9c83227
|
@ -36,23 +36,32 @@ class FlagTranslation(Converter):
|
||||||
|
|
||||||
async def convert(self, ctx: commands.Context, argument: str) -> List[str]:
|
async def convert(self, ctx: commands.Context, argument: str) -> List[str]:
|
||||||
result = []
|
result = []
|
||||||
if argument in FLAGS:
|
args = [s.strip() for s in argument.split(",")]
|
||||||
result = FLAGS[argument]["code"].upper()
|
for arg in args:
|
||||||
else:
|
r = None
|
||||||
for lang in FLAGS:
|
if arg in FLAGS:
|
||||||
if FLAGS[lang]["name"].lower() in argument.lower():
|
r = FLAGS[arg]["code"].upper()
|
||||||
result = FLAGS[lang]["code"]
|
else:
|
||||||
break
|
for lang in FLAGS:
|
||||||
if FLAGS[lang]["country"].lower() in argument.lower():
|
if FLAGS[lang]["name"].lower() in arg.lower():
|
||||||
result = FLAGS[lang]["code"]
|
r = FLAGS[lang]["code"]
|
||||||
break
|
break
|
||||||
if not FLAGS[lang]["code"]:
|
if FLAGS[lang]["country"].lower() in arg.lower():
|
||||||
continue
|
r = FLAGS[lang]["code"]
|
||||||
if FLAGS[lang]["code"] in argument.lower() and len(argument) == 2:
|
break
|
||||||
result = FLAGS[lang]["code"]
|
if not FLAGS[lang]["code"]:
|
||||||
break
|
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:
|
if not result:
|
||||||
raise BadArgument('Language "{}" not found'.format(argument))
|
raise BadArgument('Language(s) "{}" not found'.format(argument))
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@ -140,10 +149,7 @@ class GoogleTranslateAPI:
|
||||||
self.cache["guild_whitelist"][guild.id] = await self.config.guild(guild).whitelist()
|
self.cache["guild_whitelist"][guild.id] = await self.config.guild(guild).whitelist()
|
||||||
|
|
||||||
async def check_bw_list(
|
async def check_bw_list(
|
||||||
self,
|
self, guild: discord.Guild, channel: discord.TextChannel, member: Union[discord.Member, discord.User],
|
||||||
guild: discord.Guild,
|
|
||||||
channel: discord.TextChannel,
|
|
||||||
member: Union[discord.Member, discord.User],
|
|
||||||
) -> bool:
|
) -> bool:
|
||||||
can_run = True
|
can_run = True
|
||||||
if guild.id not in self.cache["guild_blacklist"]:
|
if guild.id not in self.cache["guild_blacklist"]:
|
||||||
|
@ -416,10 +422,7 @@ class GoogleTranslateAPI:
|
||||||
translated_msg = await ch.send(msg, files=files)
|
translated_msg = await ch.send(msg, files=files)
|
||||||
|
|
||||||
async def translate_message(
|
async def translate_message(
|
||||||
self,
|
self, message: discord.Message, flag: str, reacted_user: Optional[discord.Member] = None,
|
||||||
message: discord.Message,
|
|
||||||
flag: str,
|
|
||||||
reacted_user: Optional[discord.Member] = None,
|
|
||||||
) -> None:
|
) -> None:
|
||||||
guild = cast(discord.Guild, message.guild)
|
guild = cast(discord.Guild, message.guild)
|
||||||
channel = cast(discord.TextChannel, message.channel)
|
channel = cast(discord.TextChannel, message.channel)
|
||||||
|
|
|
@ -108,11 +108,7 @@ class Translate(GoogleTranslateAPI, commands.Cog):
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
async def translate(
|
async def translate(
|
||||||
self,
|
self, ctx: commands.Context, to_language: FlagTranslation, *, message: Union[discord.Message, str],
|
||||||
ctx: commands.Context,
|
|
||||||
to_language: FlagTranslation,
|
|
||||||
*,
|
|
||||||
message: Union[discord.Message, str],
|
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Translate messages with Google Translate
|
Translate messages with Google Translate
|
||||||
|
@ -139,31 +135,48 @@ class Translate(GoogleTranslateAPI, commands.Cog):
|
||||||
except GoogleTranslateAPIError as e:
|
except GoogleTranslateAPIError as e:
|
||||||
await ctx.send(str(e))
|
await ctx.send(str(e))
|
||||||
return
|
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:
|
original_lang = detected_lang[0][0]["language"]
|
||||||
translation = (translated_text, from_lang, to_language)
|
embeds = None
|
||||||
em = await self.translation_embed(author, translation, requestor)
|
msg_trans = f"**{original_lang}:** {message}\n"
|
||||||
if version_info >= VersionInfo.from_str("3.4.6") and msg.channel.id == ctx.channel.id:
|
for to_lang in to_language:
|
||||||
await ctx.send(embed=em, reference=msg, mention_author=False)
|
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:
|
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:
|
else:
|
||||||
if version_info >= VersionInfo.from_str("3.4.6") and msg.channel.id == ctx.channel.id:
|
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:
|
else:
|
||||||
await ctx.send(translated_text)
|
await ctx.send(msg_trans)
|
||||||
|
|
||||||
@commands.group()
|
@commands.group()
|
||||||
async def translateset(self, ctx: commands.Context) -> None:
|
async def translateset(self, ctx: commands.Context) -> None:
|
||||||
|
|
Loading…
Reference in a new issue