diff --git a/.env.example b/.env.example index b9e422c..7223406 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,6 @@ # API Keys DISCORD_BOT_TOKEN = - +DEEPL_API_KEY = # File Paths LOG_FILE_PATH = diff --git a/bot/constants.py b/bot/constants.py index 18f2dda..99d4f86 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -117,6 +117,7 @@ # API Keys DISCORD_BOT_TOKEN = os.getenv("DISCORD_BOT_TOKEN") or "Undefined" +DEEPL_API_KEY = os.getenv("DEEPL_API_KEY") or "Undefined" # File Paths LOG_FILE_PATH = os.getenv("LOG_FILE_PATH") or '/logfile.log' diff --git a/bot/utility/utility.py b/bot/utility/utility.py index 97fd241..50ee605 100644 --- a/bot/utility/utility.py +++ b/bot/utility/utility.py @@ -4,10 +4,13 @@ from typing import List, Optional import discord +from deepl import DeepLException from discord.ext import commands from bot import constants +from bot.__main__ import intents from bot.logger import command_log, log +import deepl class UtilityCog(commands.Cog): @@ -212,6 +215,30 @@ async def welcome_message(self, user: discord.Member): "__gemeinsam__ schaffen wir das!** :muscle:") await user.send(content=content, embed=embed) + @commands.command(name='translate') + @command_log + async def translate_message(self, ctx: commands.Context, message: discord.Message): + """Command Handler for the `translate` command. + + Translates the message with the provided id to english and sends the translation as a dm to the user + + Args: + ctx (discord.ext.commands.Context): The context in which the command was called. + msg_id (int): The id of the message that should be translated + + """ + message = await ctx.fetch_message(msg_id) + if constants.DEEPL_API_KEY == "Undefined": + await message.author.send("**Error:** No API Key has been specified for using the translation service. Please contact the moderators of the server.") + return + translator = deepl.Translator(constants.DEEPL_API_KEY) + try: + translated_text = translator.translate_text(message.content, target_lang="EN-US").text + except DeepLException: + await message.author.send("**Error:** The translation service is currently unavailable. If this problem persists, please contact the moderators of the server.") + return + await message.author.send("Original:\n{}\n\nTranslated:\n{}".format(message.content, translated_text)) + def build_serverinfo_strings(guild: discord.Guild) -> List[str]: """Function for building the strings needed for the serverinfo Embed. diff --git a/requirements.txt b/requirements.txt index d8ad24f..d01255e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -43,3 +43,4 @@ websockets==9.1 wrapt==1.12.1 yarl==1.6.3 youtube-dl==2021.5.16 +deepl==1.3.1 \ No newline at end of file