BrinkerVII

Auto translating discord bot

Dec 12th, 2018
356
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.83 KB | None | 0 0
  1. import re
  2. import signal
  3. from json import JSONDecodeError
  4.  
  5. import discord
  6. import langdetect
  7. from googletrans import Translator
  8. from langdetect.lang_detect_exception import LangDetectException
  9.  
  10. translator = Translator()
  11.  
  12. client = discord.Client()
  13.  
  14. emoji_pattern = re.compile("["
  15.                            u"\U0001F600-\U0001F64F"  # emoticons
  16.                            u"\U0001F300-\U0001F5FF"  # symbols & pictographs
  17.                            u"\U0001F680-\U0001F6FF"  # transport & map symbols
  18.                            u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
  19.                            u"\U00002702-\U000027B0"
  20.                            u"\U000024C2-\U0001F251"
  21.                            "]+", flags=re.UNICODE)
  22.  
  23.  
  24. def delete_emoji(s):
  25.     return emoji_pattern.sub(r'', s)
  26.  
  27.  
  28. exited = False
  29.  
  30.  
  31. def on_sigkill(signum, frame):
  32.     exited = True
  33.     client.logout()
  34.  
  35.  
  36. @client.event
  37. async def on_ready():
  38.     print('Logged in as')
  39.     print(client.user.name)
  40.     print(client.user.id)
  41.     print('------')
  42.  
  43.  
  44. class LDO:
  45.     def __init__(self, msg):
  46.         self.lang = langdetect.detect(msg)
  47.         self.confidence = .9
  48.  
  49.  
  50. def detect_lang(msg):
  51.     try:
  52.         d = translator.detect(msg)
  53.     except JSONDecodeError:
  54.         try:
  55.             msg = delete_emoji(msg)
  56.             if not msg:
  57.                 return None, None
  58.  
  59.             d = translator.detect(msg)
  60.         except JSONDecodeError:
  61.             try:
  62.                 msg = delete_emoji(msg)
  63.                 if not msg:
  64.                     return None, None
  65.  
  66.                 d = LDO(msg)
  67.             except LangDetectException:
  68.                 return None, None
  69.  
  70.     return d, msg
  71.  
  72.  
  73. @client.event
  74. async def on_message(message):
  75.     if (exited):
  76.         return
  77.  
  78.     if (message.author == client.user):
  79.         return
  80.  
  81.     msg = message.clean_content
  82.  
  83.     if not msg:
  84.         return
  85.  
  86.     d, msg = detect_lang(msg)
  87.     if d is None or msg is None:
  88.         return
  89.  
  90.     print(d)
  91.     if d.lang != "en" and d.confidence > .8:
  92.         try:
  93.             translation = translator.translate(msg, dest="en")
  94.         except JSONDecodeError:
  95.             await client.send_message(message.channel, "I did an oopsie :frowning:")
  96.             return
  97.  
  98.         trans_text = translation.text
  99.         if trans_text.lower() != msg.lower():
  100.             new_message = "Translated from " + d.lang + ":\n" + trans_text
  101.             await client.send_message(message.channel, new_message)
  102.  
  103.  
  104. signal.signal(signal.SIGINT, on_sigkill)
  105. signal.signal(signal.SIGTERM, on_sigkill)
  106. client.run('YOUR_DISCORD_TOKEN')
  107.  
  108. # Dependencies:
  109. # python3 -m pip install -U https://github.com/Rapptz/discord.py/archive/master.zip#egg=discord.py[voice]
  110. # python3 -m pip install -U https://github.com/ssut/py-googletrans/archive/master.zip#egg=googletrans
  111. # pip install langdetect
Advertisement
Add Comment
Please, Sign In to add comment