From b23fa1aa60ef0d2e16d33c064901b44fbbe992de Mon Sep 17 00:00:00 2001
From: Robert <Robert-Altner@t-online.de>
Date: Wed, 8 Jan 2020 17:44:19 +0100
Subject: [PATCH] Improved Translation

---
 api/translation.py      | 28 ++++++++++++++++++++++++----
 cogs/api/translation.py | 14 +++++++++-----
 util/embed.py           | 15 +++++++++++++++
 3 files changed, 48 insertions(+), 9 deletions(-)
 create mode 100644 util/embed.py

diff --git a/api/translation.py b/api/translation.py
index d07c07b..6d73950 100644
--- a/api/translation.py
+++ b/api/translation.py
@@ -15,12 +15,31 @@ def name_to_ISO(name: str) -> str:
     alpha = ""
     for language in langs:
         if language.name.lower() == name.lower():
-            alpha = language.alpha_2
-            break
+            try:
+                alpha = language.alpha_2
+                break
+            except:
+                logging.warning(f"Tried to get alpha2 code of unknown language {language}")
 
     return alpha
 
-def translate(text: str, lang: str) -> str:
+def ISO_to_name(ISO: str) -> str:
+    name = ""
+    for language in langs:
+        try:
+            if language.alpha_2.lower() == ISO.lower():
+                try:
+                    name = language.name
+                    break
+                except:
+                    logging.warning(f"Tried to get name of unknown language code {ISO}")
+        except:
+            # i dont care tbh
+            pass
+
+    return name
+
+def translate(text: str, lang: str) -> (str, str):
     url_encoded_text = urllib.parse.quote(text)
     url = f"https://translate.yandex.net/api/v1.5/tr.json/translate?key={api_key}&text={url_encoded_text}&lang={lang}"
 
@@ -29,4 +48,5 @@ def translate(text: str, lang: str) -> str:
         logging.error(f"Failed to contact Yandex API: {response.status_code}")
         return ""
 
-    return response.json()["text"][0]
\ No newline at end of file
+    print(response.json())
+    return (response.json()["text"][0], response.json()["lang"])
\ No newline at end of file
diff --git a/cogs/api/translation.py b/cogs/api/translation.py
index 0016ef1..0fefec1 100644
--- a/cogs/api/translation.py
+++ b/cogs/api/translation.py
@@ -1,6 +1,6 @@
 import discord
 from discord.ext import commands
-from util import checking
+from util import checking, embed
 from api import translation
 
 class Translation(commands.Cog):
@@ -8,18 +8,22 @@ class Translation(commands.Cog):
     def __init__(self, client: discord.Client):
         self.client = client
 
-    @commands.command(name="translate", description="Translates the given text", usage="translate <ISO CountryCode>", aliases=["tl"])
+    @commands.command(name="translate", description="Translates the given text", usage="translate <Language> <Text>", aliases=["tl"])
     @commands.check(checking.is_author_bot)
     async def translate(self, ctx: commands.Context, language: str, *message: str):
         # Get language code
         code = translation.name_to_ISO(language)
         text = ' '.join(message)
         if code == "":
-            await ctx.send(f"There is no language named {language}.")
+            await ctx.send(embed=embed.make_error_embed(f"There is no language named **{language}**."))
             return
         
-        translated = translation.translate(text, code)
-        await ctx.send(translated)
+        response = translation.translate(text, code)
+        translated = response[0]
+        direction = response[1].split("-")
+        _from = translation.ISO_to_name(direction[0])
+        _to = translation.ISO_to_name(direction[1])
+        await ctx.send(embed=embed.make_embed_field(f"{_from} -> {_to}", None, text, translated))
 
 def setup(client: discord.Client):
     client.add_cog(Translation(client))
\ No newline at end of file
diff --git a/util/embed.py b/util/embed.py
new file mode 100644
index 0000000..a665ae0
--- /dev/null
+++ b/util/embed.py
@@ -0,0 +1,15 @@
+import discord
+from util import config
+
+def make_error_embed(message: str) -> discord.Embed:
+    embed = discord.Embed(title="Error", description=message, colour=int(config.settings["err_color"], 16))
+    return embed
+
+def make_embed(title: str, desc: str) -> discord.Embed:
+    embed = discord.Embed(title=title, description=desc, colour=int(config.settings["color"], 16))
+    return embed
+
+def make_embed_field(title: str, desc: str, field_name: str, field_val: str) -> discord.Embed:
+    embed = discord.Embed(title=title, description=desc, colour=int(config.settings["color"], 16))
+    embed.add_field(name=field_name, value=field_val)
+    return embed
\ No newline at end of file