BrinkerVII icon

Auto translating discord bot

BrinkerVII | PRO | 12/13/18 12:41:27 AM UTC | 0 ⭐ | 497 👁️ | Never ⏰ | []
Python |

2.83 KB

|

None

|

0 👍

/

0 👎

import re
import signal
from json import JSONDecodeError
 
import discord
import langdetect
from googletrans import Translator
from langdetect.lang_detect_exception import LangDetectException
 
translator = Translator()
 
client = discord.Client()
 
emoji_pattern = re.compile("["
                           u"\U0001F600-\U0001F64F"  # emoticons
                           u"\U0001F300-\U0001F5FF"  # symbols & pictographs
                           u"\U0001F680-\U0001F6FF"  # transport & map symbols
                           u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                           u"\U00002702-\U000027B0"
                           u"\U000024C2-\U0001F251"
                           "]+", flags=re.UNICODE)
 
 
def delete_emoji(s):
    return emoji_pattern.sub(r'', s)
 
 
exited = False
 
 
def on_sigkill(signum, frame):
    exited = True
    client.logout()
 
 
@client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')
 
 
class LDO:
    def __init__(self, msg):
        self.lang = langdetect.detect(msg)
        self.confidence = .9
 
 
def detect_lang(msg):
    try:
        d = translator.detect(msg)
    except JSONDecodeError:
        try:
            msg = delete_emoji(msg)
            if not msg:
                return None, None
 
            d = translator.detect(msg)
        except JSONDecodeError:
            try:
                msg = delete_emoji(msg)
                if not msg:
                    return None, None
 
                d = LDO(msg)
            except LangDetectException:
                return None, None
 
    return d, msg
 
 
@client.event
async def on_message(message):
    if (exited):
        return
 
    if (message.author == client.user):
        return
 
    msg = message.clean_content
 
    if not msg:
        return
 
    d, msg = detect_lang(msg)
    if d is None or msg is None:
        return
 
    print(d)
    if d.lang != "en" and d.confidence > .8:
        try:
            translation = translator.translate(msg, dest="en")
        except JSONDecodeError:
            await client.send_message(message.channel, "I did an oopsie :frowning:")
            return
 
        trans_text = translation.text
        if trans_text.lower() != msg.lower():
            new_message = "Translated from " + d.lang + ":\n" + trans_text
            await client.send_message(message.channel, new_message)
 
 
signal.signal(signal.SIGINT, on_sigkill)
signal.signal(signal.SIGTERM, on_sigkill)
client.run('YOUR_DISCORD_TOKEN')
 
# Dependencies:
# python3 -m pip install -U https://github.com/Rapptz/discord.py/archive/master.zip#egg=discord.py[voice]
# python3 -m pip install -U https://github.com/ssut/py-googletrans/archive/master.zip#egg=googletrans
# pip install langdetect

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎