Example #1
0
def test_bind_multiple_service_urls():
    service_urls = [
        'translate.google.com',
        'translate.google.co.kr',
    ]

    translator = Translator(service_urls=service_urls)
    assert translator.service_urls == service_urls

    assert translator.translate('test', dest='ko')
    assert translator.detect('Hello')
class GoogleTranslator(MyTranslator.Translator):

    def __init__(self):
        self.translator = Translator(service_urls=['translate.google.cn'])

    def get_langlist(self):
        return GoogleLangList

    def lang2code(self, lang):
        return GoogleLanguages[lang]

    def translate(self, string, src, dest):
        return self.translator.translate(string, src=self.lang2code(src), dest=self.lang2code(dest)).text

    def detect(self, string):
        return GoogleCodes[self.translator.detect(string).lang.lower()]
Example #3
0
def hello():
    translator = Translator()
    input_src=request.form['inputtext']
    print input_src
    #b=mtranslate.translate(name,"hi","utf8")
    #b=b.encode('utf-8')
    #print b.encode("utf-8")
    
    detected = translator.detect(input_src)

    if detected.lang == "hi":
        input_detected = "Hindi"
        output_detected = "English"
        destination_code = "en"
    if detected.lang == "en":
        input_detected = "English"
        output_detected = "Hindi"
        destination_code = "hi"
     
    output_src = translator.translate(input_src, src=detected.lang, dest=destination_code)    
    print output_src.text
    #connect to the microsoft cloud for searching the various corpora of the english language with their corrosponding hindi corpora.
    #tokens = tokens = nltk.word_tokenize(name)
    #print tokens
    #pos_tagging = nltk.pos_tag(tokens)
    #print pos_tagging
    #client = support_library.MicrosoftTranslatorClient('machinetranslationmanishrana','mjbYdQ3SyROItdT1gJAXUcIxYlBDaEKs3oKZ8XcFq0w=')
    #language = langid.classify(name)
    '''if language[0] == 'en':    
        translated = client.TranslateText(name, 'en', 'hi')
        input_detected = "English"
        output_detected = "Hindi"
        translated = translated.replace('"',"")
        data_set.append((name, translated))
    else:
        translated = client.TranslateText(name, 'hi', 'en')
        input_detected = "Hindi"
        output_detected = "English"
        translated = translated.replace('"',"")
        data_set.append((translated, name))'''
    #output_detected="tst"
    #translated=name
    #input_detected="test"
    return render_template('index.html', name=input_src, translated=output_src.text, input_detected=input_detected,output_detected=output_detected)
Example #4
0
def totranslate(bot: Bot, update: Update):
    msg = update.effective_message
    chat_id = update.effective_chat.id
    """
	lang = str("af,am,ar,az,be,bg,bn,bs,ca,ceb,co,cs,cy,da,de,el,en,eo,es,et,eu,fa,fi,fr,fy,ga,gd,gl,gu,ha,haw,hi,hmn,hr,ht,hu,hy,id,ig,is,it,iw,ja,jw,ka,kk,km,kn,ko,ku,ky,la,lb,lo,lt,lv,mg,mi,mk,ml,mn,mr,ms,mt,my,ne,nl,no,ny,pa,pl,ps,pt,ro,ru,sd,si,sk,sl,sm,sn,so,sq,sr,st,su,sv,sw,ta,te,tg,th,tl,tr,uk,ur,uz,vi,xh,yi,yo,zh,zh_CN,zh_TW,zu".split(","))
	try:
		if msg.reply_to_message and msg.reply_to_message.text:
			args = update.effective_message.text.split(None, 1)
			try:
				target = args[1].split(None, 1)[0]
			except:
				target = args[1]
			try:
				target2 = args[1].split(None, 2)[1]
				if target2 not in lang:
					target2 = None
				else:
					target = args[1].split(None, 2)[0]
					target2 = args[1].split(None, 2)[1]
			except:
				target2 = None
			text = msg.reply_to_message.text
			message = update.effective_message
			trl = Translator()
			if target2 == None:
				detection = trl.detect(text)
				tekstr = trl.translate(text, dest=target)
				if tekstr.pronunciation == None:
					return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(detection.lang, target, tekstr.text), parse_mode=ParseMode.MARKDOWN)
				else:
					return message.reply_text("Translated from `{}` to `{}`:\n*Characters:*\n`{}`\n*Text:*\n`{}`".format(detection.lang, target, tekstr.text, tekstr.pronunciation), parse_mode=ParseMode.MARKDOWN)
			else:
				tekstr = trl.translate(text, dest=target2, src=target)
				if tekstr.pronunciation == None:
					return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(target, target2, tekstr.text), parse_mode=ParseMode.MARKDOWN)
				else:
					return message.reply_text("Translated from `{}` to `{}`:\n*Characters:*\n`{}`\n*Text:*\n`{}`".format(target, target2, tekstr.text, tekstr.pronunciation), parse_mode=ParseMode.MARKDOWN)
			
		else:
			args = update.effective_message.text.split(None, 2)
			target = args[1]
			try:
				target2 = args[2].split(None, 1)[0]
				if target2 not in lang:
					target2 = None
					text = args[2]
				else:
					target2 = args[2].split(None, 1)[0]
					text = args[2].split(None, 1)[1]
			except:
				target2 = None
				text = args[2]
			message = update.effective_message
			trl = Translator()
			if target2 == None:
				detection = trl.detect(text)
				tekstr = trl.translate(text, dest=target)
				if tekstr.pronunciation == None:
					return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(detection.lang, target, tekstr.text), parse_mode=ParseMode.MARKDOWN)
				else:
					return message.reply_text("Translated from `{}` to `{}`:\n*Characters:*\n`{}`\n*Text:*\n`{}`".format(detection.lang, target, tekstr.text, tekstr.pronunciation), parse_mode=ParseMode.MARKDOWN)
			else:
				tekstr = trl.translate(text, dest=target2, src=target)
				if tekstr.pronunciation == None:
					return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(target, target2, tekstr.text), parse_mode=ParseMode.MARKDOWN)
				else:
					return message.reply_text("Translated from `{}` to `{}`:\n*Characters:*\n`{}`\n*Text:*\n`{}`".format(target, target2, tekstr.text, tekstr.pronunciation), parse_mode=ParseMode.MARKDOWN)
	"""
    try:
        if msg.reply_to_message and msg.reply_to_message.text:
            args = update.effective_message.text.split(None, 1)
            target2 = None
            try:
                target = args[1].split(None, 1)[0]
            except:
                target = args[1]
            if "-" in target:
                target2 = target.split("-")[1]
                target = target.split("-")[0]
            text = msg.reply_to_message.text
            #text = deEmojify(text)
            exclude_list = UNICODE_EMOJI.keys()
            for emoji in exclude_list:
                if emoji in text:
                    text = text.replace(emoji, '')
            message = update.effective_message
            trl = Translator()
            if target2 == None:
                detection = trl.detect(text)
                tekstr = trl.translate(text, dest=target)
                if tekstr.pronunciation == None:
                    return message.reply_text(
                        "Translated from `{}` to `{}`:\n`{}`".format(
                            detection.lang, target, tekstr.text),
                        parse_mode=ParseMode.MARKDOWN)
                else:
                    return message.reply_text(
                        "Translated from `{}` to `{}`:\n`{}`".format(
                            detection.lang, target, tekstr.pronunciation),
                        parse_mode=ParseMode.MARKDOWN)
            else:
                tekstr = trl.translate(text, dest=target2, src=target)
                if tekstr.pronunciation == None:
                    return message.reply_text(
                        "Translated from `{}` to `{}`:\n`{}`".format(
                            target, target2, tekstr.text),
                        parse_mode=ParseMode.MARKDOWN)
                else:
                    return message.reply_text(
                        "Translated from `{}` to `{}`:\n`{}`".format(
                            target, target2, tekstr.pronunciation),
                        parse_mode=ParseMode.MARKDOWN)

        else:
            args = update.effective_message.text.split(None, 2)
            target = args[1]
            text = args[2]
            #text = deEmojify(text)
            exclude_list = UNICODE_EMOJI.keys()
            for emoji in exclude_list:
                if emoji in text:
                    text = text.replace(emoji, '')
            target2 = None
            if "-" in target:
                target2 = target.split("-")[1]
                target = target.split("-")[0]
            message = update.effective_message
            trl = Translator()
            if target2 == None:
                detection = trl.detect(text)
                tekstr = trl.translate(text, dest=target)
                return message.reply_text(
                    "Translated from `{}` to `{}`:\n`{}`".format(
                        detection.lang, target, tekstr.text),
                    parse_mode=ParseMode.MARKDOWN)
                #if tekstr.pronunciation == None:
                #	return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(detection.lang, target, tekstr.text), parse_mode=ParseMode.MARKDOWN)
                #else:
                #	return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(detection.lang, target, tekstr.pronunciation), parse_mode=ParseMode.MARKDOWN)
            else:
                tekstr = trl.translate(text, dest=target2, src=target)
                message.reply_text(
                    "Translated from `{}` to `{}`:\n`{}`".format(
                        target, target2, tekstr.text),
                    parse_mode=ParseMode.MARKDOWN)
                #if tekstr.pronunciation == None:
                #	return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(target, target2, tekstr.text), parse_mode=ParseMode.MARKDOWN)
                #else:
                #	return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(target, target2, tekstr.pronunciation), parse_mode=ParseMode.MARKDOWN)

    except IndexError:
        update.effective_message.reply_text(
            "Reply to messages or write messages from other languages ​​for translating into the intended language\n\nExample: `/tr en-ml` to translate from English to Malayalam\nOr use: `/tr ml` for automatic detection and translating it into Malayalam",
            parse_mode="markdown")
    except ValueError:
        update.effective_message.reply_text(
            "The intended language is not found!")
    else:
        return
def totranslate(bot: Bot, update: Update):

    msg = update.effective_message
    problem_lang_code = []
    for key in LANGUAGES:
        if "-" in key:
            problem_lang_code.append(key)
    try:
        if msg.reply_to_message and msg.reply_to_message.text:

            args = update.effective_message.text.split(None, 1)
            text = msg.reply_to_message.text
            message = update.effective_message
            dest_lang = None

            try:
                source_lang = args[1].split(None, 1)[0]
            except:
                source_lang = "en"

            if source_lang.count('-') == 2:
                for lang in problem_lang_code:
                    if lang in source_lang:
                        if source_lang.startswith(lang):
                            dest_lang = source_lang.rsplit("-", 1)[1]
                            source_lang = source_lang.rsplit("-", 1)[0]
                        else:
                            dest_lang = source_lang.split("-", 1)[1]
                            source_lang = source_lang.split("-", 1)[0]
            elif source_lang.count('-') == 1:
                for lang in problem_lang_code:
                    if lang in source_lang:
                        dest_lang = source_lang
                        source_lang = None
                        break
                if dest_lang == None:
                    dest_lang = source_lang.split("-")[1]
                    source_lang = source_lang.split("-")[0]
            else:
                dest_lang = source_lang
                source_lang = None

            exclude_list = UNICODE_EMOJI.keys()
            for emoji in exclude_list:
                if emoji in text:
                    text = text.replace(emoji, '')

            trl = Translator()
            if source_lang == None:
                detection = trl.detect(text)
                tekstr = trl.translate(text, dest=dest_lang)
                return message.reply_text(
                    "Translated from `{}` to `{}`:\n`{}`".format(
                        detection.lang, dest_lang, tekstr.text),
                    parse_mode=ParseMode.MARKDOWN)
            else:
                tekstr = trl.translate(text, dest=dest_lang, src=source_lang)
                message.reply_text(
                    "Translated from `{}` to `{}`:\n`{}`".format(
                        source_lang, dest_lang, tekstr.text),
                    parse_mode=ParseMode.MARKDOWN)
        else:
            args = update.effective_message.text.split(None, 2)
            message = update.effective_message
            source_lang = args[1]
            text = args[2]
            exclude_list = UNICODE_EMOJI.keys()
            for emoji in exclude_list:
                if emoji in text:
                    text = text.replace(emoji, '')
            dest_lang = None
            temp_source_lang = source_lang
            if temp_source_lang.count('-') == 2:
                for lang in problem_lang_code:
                    if lang in temp_source_lang:
                        if temp_source_lang.startswith(lang):
                            dest_lang = temp_source_lang.rsplit("-", 1)[1]
                            source_lang = temp_source_lang.rsplit("-", 1)[0]
                        else:
                            dest_lang = temp_source_lang.split("-", 1)[1]
                            source_lang = temp_source_lang.split("-", 1)[0]
            elif temp_source_lang.count('-') == 1:
                for lang in problem_lang_code:
                    if lang in temp_source_lang:
                        dest_lang = None
                        break
                    else:
                        dest_lang = temp_source_lang.split("-")[1]
                        source_lang = temp_source_lang.split("-")[0]
            trl = Translator()
            if dest_lang == None:
                detection = trl.detect(text)
                tekstr = trl.translate(text, dest=source_lang)
                return message.reply_text(
                    "Translated from `{}` to `{}`:\n`{}`".format(
                        detection.lang, source_lang, tekstr.text),
                    parse_mode=ParseMode.MARKDOWN)
            else:
                tekstr = trl.translate(text, dest=dest_lang, src=source_lang)
                message.reply_text(
                    "Translated from `{}` to `{}`:\n`{}`".format(
                        source_lang, dest_lang, tekstr.text),
                    parse_mode=ParseMode.MARKDOWN)

    except IndexError:
        update.effective_message.reply_text(
            "Reply to messages or write messages from other languages ​​for translating into the intended language\n\nExample: `/tr en ml` to translate from English to Malayalam\nOr use: `/tr ml` for automatic detection and translating it into Malayalam.\nSee [List of Language Codes](t.me/OnePunchSupport/12823) for a list of language codes.",
            parse_mode="markdown",
            disable_web_page_preview=True)
    except ValueError:
        update.effective_message.reply_text(
            "The intended language is not found!")
    else:
        return
Example #6
0
        Extracting abstract 
        """
        divs = art.findAll('div', class_= 'conteudo')
        for div in divs:
            pars = div.findAll('p')
            i = 1
            for par in pars:
                if i == 5:
                    abst = str(par)
                    abst = abst.replace('<p>','')
                    abst = abst.replace('</p>','')
                    abst = abst.rstrip('\r\n')
                    abst = abst.lstrip('\r\n')
                    abstractlist.append(abst)
#                    print(abst+'\n')
                    langtit = translator.detect(titulo).lang
                    if abst != "":
                        lang = translator.detect(abst).lang
                    else:
                        lang = langtit
                    if lang != langtit:
                        lang = langtit
                    langlist.append(lang)
                    """ 
                    Translating title and abstract 
                    """
                    if lang != 'en':
                        print("Translating paper "+str(k)+" title and abstract...")
                        abstrans = translator.translate(abst)
                        absen = abstrans.text
                        tittrans = translator.translate(titulo, src='pt', dest='en')
class Setting():
    def __init__(self):

        # Collect events until released
        self.mouseListener = mouse.Listener(on_click=self.onLongClick)
        self.keyboard = Controller()

        self._default_value = {
            'author': 'Elliott Zheng',
            'version': version,
            'is_listen': False,
            'is_copy': False,
            'is_dete': False,
            'stay_top': True,
            'continus': False,
            'is_main': True,
            'pixel_size': 15,
            'source': 'english',
            'target': 'chinese (simplified)'
        }
        self.value = self._default_value
        self.filepath = os.path.expanduser('~/copytranslator.json')
        self.load()

        self.taskbar = TaskBarIcon(self)
        self.mainFrame = MainFrame(self)
        self.subFrame = SubFrame(self)

        self.mainFrame.Centre()
        # self.mainFrame.Show()

        self.valid = False
        self.translator = Translator(service_urls=['translate.google.cn'])
        self.src = ''
        self.last_append = ''
        self.result = ''
        self.patterns = [
            re.compile(r'([?!.])[ ]?\n'),
            re.compile(r'([?!。])[ \n]')
        ]  # 前面一个处理英语语系的,后面一个可以处理汉语系。
        self.pattern2 = re.compile(r'\$([??!!.。])\$')

        self.initialize()

    def initialize(self):
        self.continus = self.continus
        self.stay_top = self.stay_top
        self.is_listen = self.is_listen
        self.is_dete = self.is_dete
        self.is_copy = self.is_copy
        self.is_main = self.is_main

    @property
    def source(self):
        return self.value['source']

    @property
    def target(self):
        return self.value['target']

    def save_config(self):
        self.value['source'] = self.mainFrame.tochoice.GetString(
            self.mainFrame.fromchoice.GetSelection())
        self.value['target'] = self.mainFrame.tochoice.GetString(
            self.mainFrame.tochoice.GetSelection())
        self.save_to(self.filepath)

    def get_normalized_append(self, src):
        src = src.replace('\r\n', '\n')
        src = src.replace('-\n', '')
        for pattern in self.patterns:
            src = pattern.sub(r'$\1$', src)
        src = src.replace('\n', ' ')
        src = self.pattern2.sub(r'\1\n', src)
        return src

    def get_normalized_src(self, append):
        if self.continus and self.src != '':
            return self.src + ' ' + append
        else:
            return append

    def paste(self, event):
        self.setSrc(self.last_append)

    def setSrc(self, append):
        self.src = self.get_normalized_src(append)
        self.mainFrame.srcText.SetValue(self.src)

    def setResult(self, string):
        self.result = "" + string.replace('\n', '\r\n') + '\r\n'
        self.mainFrame.destText.SetValue(self.result)
        self.subFrame.destText.SetValue(self.result)

    def getTgtLang(self):
        return LANGCODES[self.mainFrame.tochoice.GetString(
            self.mainFrame.tochoice.GetSelection())]

    def getSrcLang(self):
        return LANGCODES[self.mainFrame.fromchoice.GetString(
            self.mainFrame.fromchoice.GetSelection())]

    def getExpSrc(self):
        return self.mainFrame.srcText.GetValue()

    def getResult(self):
        return self.result

    def translate(self, event):
        src = self.translator.detect(self.src).lang
        if self.is_dete:
            self.mainFrame.fromchoice.SetSelection(
                self.mainFrame.fromchoice.FindString(LANGUAGES[src.lower()]))
        else:
            src = self.getSrcLang()

        dest = self.getTgtLang()

        if self.result != self.src:
            self.setResult(
                self.translator.translate(self.src, src=src, dest=dest).text)
            self.valid = True
        else:
            self.valid = False

    def translateCtrl(self, event):
        self.setSrc(self.getExpSrc())
        self.translate(event)

    def check_valid(self):
        if self.result == pyperclip.paste():
            return False
        append = self.get_normalized_append(pyperclip.paste())
        if self.last_append != append:
            return True
        return False

    def translateCopy(self, event):
        if self.check_valid():
            self.last_append = self.get_normalized_append(pyperclip.paste())
            self.paste(event)
            self.translate(event)
        else:
            self.valid = False

    def Copy(self, event):
        pyperclip.copy(self.result)

    def OnTimer(self, event):
        self.translateCopy(event)
        if self.valid and self.is_copy:
            self.Copy(event)

    def ChangeMode(self, event):
        if event.Id == self.taskbar.ID_Main:
            self.is_main = True
        elif event.Id == self.taskbar.ID_Focus:
            self.is_main = False
        else:
            self.is_main = not self.is_main

        self.subFrame.Show(not self.is_main)
        self.mainFrame.Show(self.is_main)

    def SwitchMode(self, event):
        self.is_main = not self.is_main

    def OnTaskBarLeftDClick(self, event):
        if self.is_main:
            frame = self.mainFrame
        else:
            frame = self.subFrame

        if frame.IsIconized():
            frame.Iconize(False)
        if not frame.IsShown():
            frame.Show(True)
        frame.Raise()

    def BossKey(self, evt):
        if self.is_main:
            frame = self.mainFrame
        else:
            frame = self.subFrame

        frame.Iconize(not frame.IsIconized())

        if not frame.IsIconized():
            frame.Show(True)
            frame.Raise()

    def simulateCopy(self):
        with self.keyboard.pressed(Key.ctrl):
            self.keyboard.press('c')
            self.keyboard.release('c')

    def onLongClick(self, x, y, button, pressed):
        global t1, ori_x, ori_y
        if pressed:
            t1 = time.time()
            ori_x = x
            ori_y = y
        else:
            if time.time() - t1 > 0.3 and abs(ori_y - y) < 3 and abs(ori_x -
                                                                     x) < 3:
                self.simulateCopy()

    def load(self):
        if not os.path.exists(self.filepath):
            self.save_to(self.filepath)
            return self
        myfile = open(self.filepath, 'r')
        value = json.load(myfile)
        myfile.close()
        if value['version'] < self['version']:
            os.remove(self.filepath)
            self.save_to(self.filepath)
            return self
        self.value = value

        return self

    def save_to(self, filepath):
        myfile = open(filepath, 'w')
        json.dump(self.value, myfile, indent=4)
        myfile.close()

    def __getitem__(self, item):
        return self.value[item]

    def __setitem__(self, key, value):
        self.value[key] = value
        self.save_to(self.filepath)

    @property
    def is_listen(self):
        return self['is_listen']

    @is_listen.setter
    def is_listen(self, value):
        self['is_listen'] = value
        self.mainFrame.listenCheck.SetValue(value)
        if value:
            self.mainFrame.timer.Start(3000)  # 设定时间间隔为1000毫秒,并启动定时器
            self.mouseListener.start()
        else:
            self.mainFrame.timer.Stop()

    def ReverseListen(self, event):
        self.is_listen = not self.is_listen

    @property
    def is_copy(self):
        return self['is_copy']

    @is_copy.setter
    def is_copy(self, value):
        self['is_copy'] = value
        self.mainFrame.copyCheck.SetValue(self.is_copy)

    def ReverseCopy(self, event):
        self.is_copy = not self.is_copy

    @property
    def is_dete(self):
        return self['is_dete']

    @is_dete.setter
    def is_dete(self, value):
        self['is_dete'] = value
        self.mainFrame.detectCheck.SetValue(value)
        if value:
            self.mainFrame.fromchoice.Disable()
            self.mainFrame.fromlabel.SetLabel("Detected language")
        else:
            self.mainFrame.fromchoice.Enable()
            self.mainFrame.fromlabel.SetLabel("Source language")

    def ReverseDete(self, event):
        self.is_dete = not self.is_dete

    @property
    def stay_top(self):
        return self['stay_top']

    @stay_top.setter
    def stay_top(self, value):
        self['stay_top'] = value
        self.mainFrame.topCheck.SetValue(value)
        if value:
            self.subFrame.SetWindowStyle(wx.STAY_ON_TOP | SubFrame.subStyle)
            self.mainFrame.SetWindowStyle(wx.STAY_ON_TOP | MainFrame.mainStyle)
        else:
            self.subFrame.SetWindowStyle(SubFrame.subStyle)
            self.mainFrame.SetWindowStyle(MainFrame.mainStyle)

    def ReverseStayTop(self, event):
        self.stay_top = not self.stay_top

    @property
    def continus(self):
        return self['continus']

    @continus.setter
    def continus(self, value):
        self['continus'] = value
        self.mainFrame.continusCheck.SetValue(value)

    def ReverseContinus(self, event):
        self.setSrc('')
        self.setResult('')
        self.last_append = ''
        self.continus = not self.continus

    @property
    def is_main(self):
        return self['is_main']

    @is_main.setter
    def is_main(self, value):
        self['is_main'] = value
        self.subFrame.Show(not value)
        self.mainFrame.Show(value)

    @property
    def pixel_size(self):
        return self['pixel_size']

    @pixel_size.setter
    def pixel_size(self, value):
        self['pixel_size'] = value
Example #8
0
    async def on_message(message):

        ####봇 dm 테스트코드
        if message.content.startswith('whoami'):
            user_id = message.author.id
            user_name = message.author.name
            txt = '{} {}'.format(user_id, user_name)
            await app.send_message(message.channel, txt)

        if message.content.startswith('!제어'):
            user_id = message.author.id
            sentence = message.content.split(' ')
            word = ''.join(sentence[1:])

            if user_id == '123456789':
                # bot_developer_id
                if word == 'pwd':
                    n_dir = os.getcwd()
                    await app.send_message(message.channel, n_dir)
                elif word == 'll':
                    f = open('output.txt', 'w')
                    output = subprocess.check_output(['ls -alh'],
                                                     shell=True,
                                                     encoding='utf-8')

                    f.write(output)
                    f.close()
                    embed = discord.Embed(title='ls -alh',
                                          color=discord.Color.red())
                    with open('output.txt') as t:
                        for i in t:
                            embed.add_field(name='결과', value='{}\n'.format(i))
                    await app.send_message(message.channel, embed=embed)
            else:
                await app.send_message(message.channel, 'permission denied')

        if message.content.startswith('!기억'):
            m_sentence = message.content.split(' ')
            memories = ' '.join(m_sentence[1:])
            u_id = message.author.id
            m_file = open('memory.txt', 'a', encoding='utf8')
            lines = u_id + ': ' + memories + '\n'
            m_file.write(lines)
            m_file.close()
            await app.send_message(message.channel, 'ㅇㅋ')

        if message.content.startswith('!망각'):
            u_id = message.author.id
            f = open('memory.txt', 'r')
            lines = f.readlines()
            f.close()
            f = open('memory.txt', 'w')
            for i in lines:
                if u_id not in i:
                    f.write(i)
            f.close()
            await app.send_message(message.channel, '기억 삭제')

        if message.content.startswith('!회상'):
            u_id = message.author.id
            embed = discord.Embed(title='기억 목록', color=discord.Color.red())
            count = 1
            with open('memory.txt') as f:
                for i in f:
                    stat = i.split(': ')
                    s_ui = ''.join(stat[0])
                    s_tx = ' '.join(stat[1:])
                    if s_ui == u_id:
                        embed.add_field(name=str(count) + '.',
                                        value='{}'.format(s_tx))
                        count += 1
            await app.send_message(message.author, embed=embed)

        if message.content.startswith('!') and message.content.endswith('연차'):
            try:
                playgames = message.content[1:-2]
                if int(playgames) >= 1001:
                    await app.send_message(message.channel,
                                           '도박문제 전화상담 서비스(국번 없이 ☎1336)')
                else:
                    g_point = 0
                    player_name = message.author.name
                    gotcha = np.random.choice(3,
                                              int(playgames),
                                              p=[0.01, 0.2, 0.79])
                    embed = discord.Embed(title='{}의 {}연차'.format(
                        player_name, playgames),
                                          color=discord.Color.dark_blue())
                    for i in gotcha:
                        if i == 1:
                            g_point += 2
                        elif i == 2:
                            g_point += 1
                        else:
                            g_point += 3
                    embed.add_field(
                        name='결과',
                        value='1성:{}, 2성:{}, 3성:{}\n가챠포인트:{}'.format(
                            Counter(gotcha)[2],
                            Counter(gotcha)[1],
                            Counter(gotcha)[0], g_point))
                    gotcha_per = int(Counter(gotcha)[0]) / int(playgames) * 100
                    if gotcha_per >= 2.0:
                        await app.send_message(message.channel, embed=embed)
                        await app.send_file(message.channel,
                                            fp='img_con/icon_96.png')
                    else:
                        await app.send_message(message.channel, embed=embed)
                        gotcha_ran = [
                            'img_con/icon_55.png', 'img_con/icon_22.png',
                            'img_con/icon_58.png'
                        ]
                        await app.send_file(message.channel,
                                            fp=random.choice(gotcha_ran))
            except:
                await app.send_message(message.channel, 'command not found')

        if message.content.startswith('!이마트'):
            sentence = message.content.split(' ')
            mart = ' '.join(sentence[1:])
            f = open('emart.txt', 'r')
            line = f.read().splitlines()
            for i in line:
                stat = i.split(' ')
                if mart in stat and len(stat) == 2:
                    await app.send_message(
                        message.channel,
                        '점포명:{} 영업여부:{}'.format(stat[0], stat[-1]))
                elif mart in stat and len(stat) == 3:
                    await app.send_message(
                        message.channel,
                        '점포명:{} 영업여부:{}'.format(stat[0] + stat[1], stat[-1]))

        # 네이버 뉴스 사회면 출력
        if message.content.startswith('!사회'):
            embed = discord.Embed(title='사회면 뉴스 순위', color=discord.Color.red())
            html = urllib.request.urlopen(
                'https://news.naver.com/main/main.nhn?mode=LSD&mid=shm&sid1=102'
            )
            news_url = 'https://news.naver.com'
            soup = BeautifulSoup(html, 'lxml')
            news1 = soup.find('div', {'id': 'ranking_102'})
            news2 = news1.find('ul', 'section_list_ranking')
            news3 = news2.find_all('a', "nclicks(rig.ranksoc)")
            count = 1
            for i in news3:
                re_title = i.text
                news_href = i.get('href')
                embed.add_field(name=str(count) + '위: ',
                                value='[%s](<%s>)' %
                                (re_title, news_url + news_href))
                count += 1
            await app.send_message(message.channel, embed=embed)

        if message.content.startswith('!요약'):
            sentence = message.content.split(' ')
            txt_url = ''.join(sentence[1])

            news = Article(txt_url, language='ko')
            news.download()
            news.parse()
            embed = discord.Embed(title='url의 텍스트를 요약',
                                  color=discord.Color.dark_purple())
            text_summ = summarize(news.text, word_count=50)
            embed.add_field(name='요약',
                            value='[%s](<%s>)' % (text_summ, txt_url))
            await app.send_message(message.channel, embed=embed)

        if message.content.startswith('!주사위'):
            number = message.content.split(' ')
            dice_num = int(number[1])
            dice = []
            for i in range(1, dice_num + 1):
                dice.append(random.randint(1, 6))

            await app.send_message(message.channel, dice)

        if message.content.startswith('!다나와'):
            options = webdriver.ChromeOptions()
            options.add_argument('--headless')
            options.add_argument('--disable--gpu')
            options.add_argument('–no-sandbox')
            chromedriver_dir = r'chromedriver_ver/linux/chromedriver'
            driver = webdriver.Chrome(chromedriver_dir, chrome_options=options)

            sentence = message.content.split(' ')
            word = ' '.join(sentence[1:])
            s_word = urllib.parse.quote(word)
            driver.get('http://search.danawa.com/dsearch.php?k1=' + s_word +
                       '&module=goods&act=dispMain')
            time.sleep(3)
            source = driver.page_source
            soup = bs4.BeautifulSoup(source, 'lxml')

            stat = soup.find_all('p', 'prod_name')
            price_stat = soup.find_all('p', 'price_sect')
            driver.quit()
            embed = discord.Embed(title='다나와 ' + word + ' 검색결과',
                                  color=discord.Color.dark_purple())

            count = 1
            for i, k in zip(stat, price_stat):
                title = i.text.strip()
                price = k.find('a').text.strip()
                embed.add_field(name=str(count) + '.',
                                value='{}\n{}'.format(title, price))
                count += 1
                if count == 7:
                    break
            await app.send_message(message.channel, embed=embed)

        if message.content.startswith('!유튭'):

            sentence = message.content.split(' ')
            word = ' '.join(sentence[1:])
            search_word = urllib.parse.quote(word)
            html = urllib.request.urlopen(
                'https://www.youtube.com/results?search_query=' + search_word)
            soup = BeautifulSoup(html, 'lxml')
            tt = soup.find('ol', 'item-section')
            stat = tt.find_all('h3', 'yt-lockup-title')

            embed = discord.Embed(title='유튜브 검색결과', color=discord.Color.blue())
            count = 1
            for i in stat:
                url = 'https://www.youtube.com'
                tx = i.text
                tx = tx.split(' ')[:-3]
                ti = ' '.join(tx)
                link = i.find('a').get('href')
                embed.add_field(name=str(count) + '.',
                                value='[%s](<%s>)' % (ti, url + link))
                count += 1
                if count == 6:
                    break
            await app.send_message(message.channel, embed=embed)

        if message.content.startswith('!파파고'):
            sentence = message.content.split(' ')
            trans_text = ''.join(sentence[1:])
            request_url = "https://openapi.naver.com/v1/papago/n2mt"
            headers = {
                "X-Naver-Client-Id": "123456789",
                "X-Naver-Client-Secret": "12345678"
            }  # personal_token
            params = {"source": "ko", "target": "en", "text": trans_text}
            response = requests.post(request_url, headers=headers, data=params)
            result = response.json()
            await app.send_message(
                message.channel, result['message']['result']['translatedText'])

        if message.content.startswith('!번역'):
            sentence = message.content.split(' ')
            convert_sentence = ' '.join(sentence[1:])
            translator = Translator()
            if translator.detect(convert_sentence).lang != 'ko':
                result = translator.translate(convert_sentence, dest='ko').text
                await app.send_message(message.channel, result)
            if translator.detect(convert_sentence).lang == 'ko':
                result = translator.translate(convert_sentence, dest='en').text
                await app.send_message(message.channel, result)

        if message.content.startswith('!날씨'):
            try:
                sentence = message.content.split(' ')
                area = ' '.join(sentence[1:])
                location = urllib.parse.quote(area + '+날씨')
                html = urllib.request.urlopen(
                    'https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query='
                    + location)
                soup = BeautifulSoup(html, 'lxml')
                area_loca = soup.find('div', 'select_box').find('em').text
                embed = discord.Embed(title=area_loca + '의 날씨정보',
                                      color=discord.Color.blue())

                # ------오늘 날씨 정보------------
                today_weather = soup.select(
                    '#main_pack > div.sc.cs_weather._weather > div:nth-child(2) > div.weather_box > div.weather_area._mainArea > div.today_area._mainTabContent > div.main_info'
                )[0]
                today_dust_stat = soup.select(
                    '#main_pack > div.sc.cs_weather._weather > div:nth-child(2) > div.weather_box > div.weather_area._mainArea > div.today_area._mainTabContent > div.sub_info > div > dl'
                )[0]

                today_temp = today_weather.find('span', 'todaytemp').text
                today_stat = today_weather.find('p', 'cast_txt').text
                skin_temp = today_weather.find('span',
                                               'sensible').find('span',
                                                                'num').text

                # ------내일 날씨 정보------------
                tomm_weather = soup.select(
                    '#main_pack > div.sc.cs_weather._weather > div:nth-child(2) > div.weather_box > div.weather_area._mainArea > div:nth-child(4)'
                )[0]

                temp_am, temp_pm = tomm_weather.find_all('span', 'todaytemp')
                air_am, air_pm = tomm_weather.find_all('p', 'cast_txt')

                # ------언패킹 오류 발생 위치-----
                try:
                    t_dust = today_dust_stat.find_all('dd')
                    mise, c_mise, o_z = t_dust
                    mise_am, mise_pm = tomm_weather.find_all(
                        'div', 'detail_box')
                except ValueError:
                    embed.add_field(name='오늘',
                                    value='현재온도 : {}도, 체감온도 : {}도\n{}'.format(
                                        today_temp, skin_temp, today_stat))
                    embed.add_field(
                        name='내일',
                        value='오전온도 : {}도, {}\n오후온도 : {}도, {}'.format(
                            temp_am.text, air_am.text, temp_pm.text.strip(),
                            air_pm.text))
                else:
                    embed.add_field(
                        name='오늘',
                        value='현재온도 : {}도, 체감온도 : {}도\n{}\n미세먼지 : {}\n초미세먼지 : {}'
                        .format(today_temp, skin_temp, today_stat, mise.text,
                                c_mise.text))
                    embed.add_field(
                        name='내일',
                        value='오전온도 : {}도, {}\n{}\n오후온도 : {}도, {}\n{}'.format(
                            temp_am.text, air_am.text, mise_am.text.strip(),
                            temp_pm.text.strip(), air_pm.text,
                            mise_pm.text.strip()))

                await app.send_message(message.channel, embed=embed)
                if float(skin_temp) >= 30.0 and float(skin_temp) < 35.0:
                    await app.send_file(message.channel,
                                        fp='img_con/icon_49.png')
                elif float(skin_temp) >= 35.0:
                    await app.send_file(message.channel,
                                        fp='img_con/icon_38.gif')
            except:
                await app.send_message(message.channel, 'command not found')

        if message.content.startswith("!주간날씨"):
            try:
                sentence = message.content.split(' ')
                area = sentence[1]
                location = urllib.parse.quote(area + '+날씨')
                html = urllib.request.urlopen(
                    'https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query='
                    + location)
                soup = BeautifulSoup(html, 'lxml')
                title = soup.find('div', 'select_box').find('em')
                week = soup.find_all('li', 'date_info')
                embed = discord.Embed(title=title.text + '의 주간 날씨 정보',
                                      color=discord.Color.blue())
                for i in week:
                    day = i.find('span', 'day_info').text
                    am = i.find('span', 'point_time morning').text.strip()
                    pm = i.find('span', 'point_time afternoon').text.strip()
                    temp = i.find('dd').text
                    embed.add_field(name=day,
                                    value='오전:{}\n오후:{}\n{}'.format(
                                        am, pm, temp))
                await app.send_message(message.author, embed=embed)
            except:
                await app.send_message(message.channel, 'command not found')

        if message.content.startswith('!세계날씨'):
            try:
                sentence = message.content.split(' ')
                out_area = ''.join(sentence[1:])

                headers = {
                    'User-Agent':
                    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
                }

                base_url = 'https://www.google.com/search?ei=2FIQXbn7OIuU8wXRtonYCA&q=' + out_area + '+날씨'
                html = requests.get(base_url, headers=headers).text
                soup = BeautifulSoup(html, 'lxml')
                stat = soup.find_all('div', 'vk_c card-section')

                for i in stat:
                    location = i.find('div', 'vk_gy vk_h').text.strip()
                    loca_time = i.find('div', 'vk_gy vk_sh').text.strip()
                    air = i.find('span', {'id': 'wob_dc'}).text.strip()
                    temp = i.find('span', {'id': 'wob_ttm'}).text.strip()
                    air_s = i.find_all('div', 'vk_gy vk_sh wob-dtl')
                    for k in air_s:
                        rain = k.find('span', {'id': 'wob_pp'}).text.strip()
                        wet = k.find('span', {'id': 'wob_hm'}).text.strip()
                        wind = k.find('span', 'wob_t').text.strip()
                embed = discord.Embed(title=location + '의 날씨정보',
                                      color=discord.Color.blue())
                embed.add_field(
                    name=loca_time,
                    value='현재온도: {}도 , {}\n강수확률: {}\n습도: {} 풍속: {}'.format(
                        temp, air, rain, wet, wind))
                await app.send_message(message.channel, embed=embed)
                if int(temp) >= 30 and int(temp) <= 34:
                    await app.send_file(message.channel,
                                        fp='img_con/icon_49.png')
                elif int(temp) >= 35:
                    await app.send_file(message.channel,
                                        fp='img_con/icon_38.gif')
            except:
                await app.send_message(message.channel, 'command not found')

        if message.content.startswith('!영화'):
            sentence = message.content.split(' ')
            word = sentence[1]
            if word == '예정':
                embed = discord.Embed(title='영화개봉예정',
                                      color=discord.Color.dark_orange())
                html = urllib.request.urlopen(
                    'https://movie.naver.com/movie/running/premovie.nhn')
                soup = BeautifulSoup(html, 'lxml')
                name = soup.find_all('dl', 'lst_dsc')
                for i in name:
                    c_name = i.find('a').text
                    c_kind = i.find('span', 'link_txt').text
                    c_kind = ''.join(c_kind.split())
                    embed.add_field(name='{}'.format(c_name),
                                    value='{}'.format(c_kind))
                await app.send_message(message.channel, embed=embed)

            if word == '상영중':
                embed = discord.Embed(title='상영중인 영화',
                                      color=discord.Color.dark_orange())
                html = urllib.request.urlopen(
                    'https://movie.naver.com/movie/running/current.nhn')
                soup = BeautifulSoup(html, 'lxml')

                pre_order = soup.find_all('div', 'star_t1 b_star')
                title = soup.find_all('dt', 'tit')

                count = 1
                for i, k in zip(title, pre_order):
                    order_per = k.text.strip()
                    order_title = i.find('a').text
                    embed.add_field(name=str(count) + '번쨰',
                                    value='{}\n예매율: {}'.format(
                                        order_title, order_per))
                    count += 1
                    if count == 6:
                        break
                await app.send_message(message.channel, embed=embed)

        if message.content.startswith('!예매'):
            try:
                # str = '!예매 청주 목록'
                dt = datetime.datetime.now()
                today_time = dt.strftime('%Y%m%d')
                sentence = message.content.split(' ')
                user_loca = ''.join(sentence[1])
                user_word = ''.join(sentence[2:])
                data = {'title': [], 'link': []}
                df = pd.DataFrame(data)
                f = open('cgv_code.txt', 'r')

                embed = discord.Embed(title=user_loca,
                                      color=discord.Color.blue())

                while True:
                    line = f.readline()
                    if not line:
                        break
                    re_line = line.split('//')
                    data['title'].append(re_line[0][3:])
                    data['link'].append(re_line[1][8:] + today_time)
                    df = pd.DataFrame(data)

                base_url = 'http://www.cgv.co.kr/common/showtimes/iframeTheater.aspx'
                cgv_url = 'http://www.cgv.co.kr'

                for q, w in zip(df['title'], df['link']):
                    if user_loca == q:
                        base_url = base_url + w

                headers = {
                    'User-Agent':
                    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
                }

                html = requests.get(base_url, headers=headers).text
                soup = BeautifulSoup(html, 'lxml')
                stat = soup.find_all('div', 'col-times')

                cgv_data = {'movie': [], 'time': [], 'link': []}
                cgv_df = pd.DataFrame(cgv_data)

                for i in stat:
                    title = i.find('div').find('a').text.strip()
                    time_table = i.find_all('div', 'type-hall')
                    for k in time_table:
                        t_d = k.find('div', 'info-timetable').text.strip()
                        try:
                            link = k.find(
                                'div', 'info-timetable').find('a').get('href')
                        except AttributeError:
                            continue
                        cgv_data['movie'].append(title)
                        cgv_data['time'].append(t_d)
                        cgv_data['link'].append(link)
                        cgv_df = pd.DataFrame(cgv_data)

                if user_word == '목록':
                    count = 1
                    re_df = cgv_df.drop_duplicates(['movie'], keep='first')
                    for re_title, re_link in zip(re_df['movie'],
                                                 re_df['link']):
                        d_link = '[%s](<%s>)' % (re_title, cgv_url + re_link)
                        embed.add_field(name=str(count) + '.',
                                        value='{}'.format(d_link))
                        count += 1
                    await app.send_message(message.channel, embed=embed)
                else:
                    await app.send_message(message.channel,
                                           'command not found')
            except:
                await app.send_message(message.channel, 'command not found')

        if message.content.startswith('!환전'):
            try:
                sentence = message.content.split(' ')
                word = ''.join(sentence[1:])
                headers = {
                    'User-Agent':
                    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
                }
                # h_word = urllib.parse.quote(word)
                url = 'https://www.google.co.kr/search?biw=531&bih=592&ei=YTQHXd7ZOJHm8wXhqrWQCA&q=' + word
                html = requests.get(url, headers=headers).text
                soup = BeautifulSoup(html, 'lxml')
                h_result = soup.find('div', 'dDoNo vk_bk gsrt')
                result = h_result.text.split(' ')
                await app.send_message(message.channel,
                                       result[0][:-3] + sentence[2])
            except:
                await app.send_message(message.channel, 'command not found')

        if message.content.startswith('!계산'):
            sentence = message.content.split(' ')
            word = ''.join(sentence[1:])
            n_word = urllib.parse.quote(word)
            headers = {
                'User-Agent':
                'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
            }
            url = 'https://www.google.com/search?q=' + n_word
            html = requests.get(url, headers=headers).text
            soup = BeautifulSoup(html, 'lxml')
            n_result = soup.find('span', 'cwcot gsrt').text.strip()
            await app.send_message(message.channel, n_result)

        if message.content.startswith('!환율'):
            try:
                sentence = message.content.split(' ')
                user_input = sentence[1]
                p_word = urllib.parse.quote(user_input)
                embed = discord.Embed(title='실시간 환율',
                                      color=discord.Color.blue())
                headers = {
                    'User-Agent':
                    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
                }
                url = 'https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=' + p_word + '+환율'
                html = requests.get(url, headers=headers).text
                soup = BeautifulSoup(html, 'lxml')
                stat = soup.find_all('div', 'rate_tlt')
                for i in stat:
                    price = i.find('span', 'spt_con').text.strip().split(' ')
                    embed.add_field(name=user_input + '의 환율 정보',
                                    value='{}\n{} {}'.format(
                                        price[0][2:], price[2], price[3]))
                await app.send_message(message.channel, embed=embed)
            except:
                await app.send_message(message.channel, 'command not found')

        if message.content.startswith('!증시'):
            sentence = message.content.split(' ')
            n_word = ''.join(sentence[1:])

            h_url = 'https://www.wpws.kr/hangang/'
            headers = {
                'User-Agent':
                'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
            }
            h_html = requests.get(h_url, headers=headers).text
            h_soup = BeautifulSoup(h_html, 'lxml')
            w_stat = h_soup.find('p', {'id': 'temp'}).text

            url = 'https://finance.naver.com/sise/'
            base_url = 'https://finance.naver.com'
            context = ssl._create_unverified_context()
            html = urlopen(url, context=context)
            soup = BeautifulSoup(html.read(), 'lxml')

            if n_word == '해외':
                embed = discord.Embed(title='주요 해외 증시',
                                      color=discord.Color.dark_orange())
                url = 'http://finance-service.daum.net/global/index.daum'
                headers = {
                    'User-Agent':
                    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
                }
                html = requests.get(url, headers=headers).text
                soup = BeautifulSoup(html, 'lxml')
                stat = soup.select('#worldInfo')[0]
                i_title = stat.find_all('li')
                for i in i_title:
                    aa = re.sub('<.+?>', ' ', str(i)).strip().split('  ')
                    embed.add_field(name=aa[0],
                                    value='{}  {}  {}'.format(
                                        aa[1], aa[2], aa[3]))
                await app.send_message(message.channel, embed=embed)

            if n_word == '주요':
                embed = discord.Embed(title='{}\n{}: {}'.format(
                    '주요 국내 증시', '현재 한강 수온', w_stat),
                                      color=discord.Color.dark_orange())

                k_stat = soup.find('div', 'lft')
                kos_price = k_stat.find_all('span', 'num')
                kos_stat = k_stat.find_all('span', 'num_s')
                kos = ['코스피', '코스닥', '코스피200']
                for a, b, c, in zip(kos_price, kos_stat, kos):
                    n_p = a.text
                    n_s = b.text
                    n_n = c
                    embed.add_field(name=n_n, value='{}\n{}'.format(n_p, n_s))
                await app.send_message(message.channel, embed=embed)

            if n_word == '유가':
                embed = discord.Embed(title='국내외 유가',
                                      color=discord.Color.dark_orange())
                url = 'https://finance.naver.com/marketindex/?tabSel=gold#tab_section'
                context = ssl._create_unverified_context()
                html = urlopen(url, context=context)
                soup = BeautifulSoup(html.read(), 'lxml')
                stat = soup.find('table', 'tbl_exchange').find_all('tr')

                for i in stat:
                    try:
                        oil_name = i.find('a').text
                        price = i.find_all('td', 'num')
                        n, y, p = price
                        unit = i.find('td', 'unit').text
                        y_stat = i.find('img').get('alt')

                    except AttributeError:
                        continue
                    embed.add_field(
                        name=oil_name,
                        value='현재가: {}{}\n전일비: {} 등락율: {}\n{}'.format(
                            n.text, unit, y.text, p.text, y_stat))
                await app.send_message(message.channel, embed=embed)

            if n_word == '인기':
                embed = discord.Embed(title='인기 검색 종목',
                                      color=discord.Color.dark_orange())
                stat = soup.find('ul', 'lst_pop').find_all('li')
                count = 1
                for i in stat:
                    n_title = i.find('a').text
                    n_href = i.find('a').get('href')
                    price = i.find('span').text
                    link = base_url + n_href
                    title = '[%s](<%s>)' % (n_title, link)
                    embed.add_field(name=str(count) + '위',
                                    value='{}\n{}원'.format(title, price))
                    count += 1

                await app.send_message(message.channel, embed=embed)

        if message.content.startswith('!해축'):
            embed = discord.Embed(title='해축 정보',
                                  color=discord.Color.dark_orange())
            sentence = message.content.split(' ')
            word = ''.join(sentence[1:])
            html = urllib.request.urlopen(
                'https://sports.news.naver.com/wfootball/index.nhn')
            soup = BeautifulSoup(html, 'lxml')
            base_url = 'https://sports.news.naver.com'

            if word == '주요':
                s_count = 1
                stat = soup.find('div', 'home_news').find_all('li')
                for i in stat:
                    title = i.find('a').text.strip()
                    link = i.find('a').get('href')
                    i_s_n = '[%s](<%s>)' % (title, base_url + link)
                    embed.add_field(name=str(s_count) + '.',
                                    value='{}'.format(i_s_n))
                    s_count += 1
                await app.send_message(message.channel, embed=embed)
            else:
                await app.send_message(message.channel, 'command not found')

        if message.content.startswith('!남대문'):
            embed = discord.Embed(title='위스키 판매 목록', color=discord.Color.red())
            sentence = message.content.split(' ')
            w_name = ''.join(sentence[1:])
            df = pd.read_csv('new_namdeon_list.csv')
            for a, b, c, d, e, k, q in zip(df['title'], df['price'],
                                           df['year'], df['cask'],
                                           df['seller'], df['date'], df['ml']):
                try:
                    if w_name in a:
                        embed.add_field(name='{} {}({})\n{}원'.format(
                            a, c, d, int(float(b))),
                                        value='{} {} {}'.format(e, q, k))
                except:
                    continue
            await app.send_message(message.channel, embed=embed)

            # w_dict= {}
            # for i in sheet1.iter_rows(min_row=3):
            #     title = i[1].value
            #     price = i[4].value
            #     w_dict[title]=price

        if message.content.startswith('!스팀'):
            embed = discord.Embed(title='스팀 특별할인 목록',
                                  color=discord.Color.green())
            headers = {
                'User-Agent':
                'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
            }
            url = 'https://store.steampowered.com/search/?specials=1&os=win'
            html = requests.get(url, headers=headers).text
            soup = BeautifulSoup(html, 'lxml')
            stat = soup.find_all('div', 'responsive_search_name_combined')
            game_page = soup.find('div', {'id': 'search_results'})
            game_stat = game_page.find('div',
                                       {'id': 'search_result_container'})
            link = game_stat.find_all('a')
            count = 1
            for i, k in zip(stat, link):
                try:
                    title = i.find('div',
                                   'col search_name ellipsis').text.strip()
                    price = i.find(
                        'div',
                        'col search_price discounted responsive_secondrow'
                    ).text.strip().split('$')
                    per = i.find('div',
                                 'col search_discount responsive_secondrow'
                                 ).text.strip()
                    g_link = k.get('href')
                    url = '[%s](<%s>)' % (title, g_link)
                except AttributeError:
                    continue
                embed.add_field(
                    name=str(count) + '.',
                    value=url + '\n'
                    '정가:{} , 할인가:{}\n할인률:{}'.format(
                        '~~' + '$' + price[1] + '~~', '$' + price[2], per))
                count += 1
            await app.send_message(message.channel, embed=embed)
Example #9
0
from googletrans import Translator
text = input('Enter your text:- ')

# Creating an instance of Translator to use
# Google Translate ajax API
translator = Translator()

# detect- auto detects language of the input text
dt = translator.detect(text)
print(dt)

# translate()-translates the text from source language to destination language
# translate(self, text, dest='en', src='auto', **kwargs)
# if we don't specify the dest(destination language) then
# it translates to english
translated = translator.translate(text)

print(translated.text)
Example #10
0
def translate(update, context):
    msg = update.effective_message
    getlang = langsql.get_lang(update.effective_message.from_user.id)
    try:
        if msg.reply_to_message and msg.reply_to_message.text:
            args = update.effective_message.text.split()
            if len(args) >= 2:
                target = args[1]
                if "-" in target:
                    target2 = target.split("-")[1]
                    target = target.split("-")[0]
                else:
                    target2 = None
            else:
                if getlang:
                    target = getlang
                    target2 = None
                else:
                    raise IndexError
            teks = msg.reply_to_message.text
            exclude_list = UNICODE_EMOJI.keys()
            for emoji in exclude_list:
                if emoji in teks:
                    teks = teks.replace(emoji, '')
            trl = Translator()
            if target2 is None:
                deteksibahasa = trl.detect(teks)
                tekstr = trl.translate(teks, dest=target)
                send_message(update.effective_message,
                             tl(update.effective_message, "Diterjemahkan dari `{}` ke `{}`:\n`{}`").format(
                                 deteksibahasa.lang, target, tekstr.text), parse_mode=ParseMode.MARKDOWN)
            else:
                tekstr = trl.translate(teks, dest=target2, src=target)
                send_message(update.effective_message,
                             tl(update.effective_message, "Diterjemahkan dari `{}` ke `{}`:\n`{}`").format(target,
                                                                                                           target2,
                                                                                                           tekstr.text),
                             parse_mode=ParseMode.MARKDOWN)

        else:
            args = update.effective_message.text.split(None, 2)
            if len(args) != 1:
                target = args[1]
                teks = args[2]
                target2 = None
                if "-" in target:
                    target2 = target.split("-")[1]
                    target = target.split("-")[0]
            else:
                target = getlang
                teks = args[1]
            exclude_list = UNICODE_EMOJI.keys()
            for emoji in exclude_list:
                if emoji in teks:
                    teks = teks.replace(emoji, '')
            trl = Translator()
            if target2 is None:
                deteksibahasa = trl.detect(teks)
                tekstr = trl.translate(teks, dest=target)
                return send_message(update.effective_message,
                                    tl(update.effective_message, "Diterjemahkan dari `{}` ke `{}`:\n`{}`").format(
                                        deteksibahasa.lang, target, tekstr.text), parse_mode=ParseMode.MARKDOWN)
            else:
                tekstr = trl.translate(teks, dest=target2, src=target)
                send_message(update.effective_message,
                             tl(update.effective_message, "Diterjemahkan dari `{}` ke `{}`:\n`{}`").format(target,
                                                                                                           target2,
                                                                                                           tekstr.text),
                             parse_mode=ParseMode.MARKDOWN)
    except IndexError:
        send_message(update.effective_message,
                     tl(update.effective_message, "Balas pesan atau tulis pesan dari bahasa lain untuk "
                                                  "diterjemahkan kedalam bahasa yang di dituju\n\n"
                                                  "Contoh: `/tr en-id` untuk menerjemahkan dari Bahasa inggris ke Bahasa Indonesia\n"
                                                  "Atau gunakan: `/tr id` untuk deteksi otomatis dan menerjemahkannya kedalam bahasa indonesia"),
                     parse_mode="markdown")
    except ValueError:
        send_message(update.effective_message, tl(update.effective_message, "Bahasa yang di tuju tidak ditemukan!"))
    else:
        return
Example #11
0
if(filang == ''):
    filang = 'en'
surl = input("Please input server url [default=translate.google.com]:")
if(surl == ''):
    surl = 'translate.google.com'
trans = Translator(service_urls=[surl])
infile = input("Please input input file [default=input.txt]:")
if(infile == ''):
    infile = 'input.txt'
fin = open(infile, 'r')
outfile = input("Please input output file [default=output.txt]:")
if(outfile == ''):
    outfile = 'output.txt'
fout = open(outfile, 'w')
intext = fin.read()
pdl = trans.detect(intext).lang


for i in range(1, n):
    dl = lang[random.randint(0, len(lang)-1)]
    while (dl == pdl):
        dl = lang[random.randint(0, len(lang)-1)]
    intext = trans.translate(intext, src=pdl, dest=dl).text
    eprint(i, 'from', pdl, 'to', dl)
    pdl = dl

intext = trans.translate(intext, src=pdl, dest=filang).text
eprint(n, 'from', pdl, 'to', filang)


fout.write(intext)
Example #12
0
 print("_" * 40)
 print("Bi-gram")
 biData = biChat(zin[1])
 if biData[0] == zin[0]:
     totalBi += biData[1]
 else:
     failBi += 1
 print("\nTri-gram")
 triData = triChat(zin[1])
 if triData[0] == zin[0]:
     totalTri += triData[1]
 else:
     failTri += 1
 print("\nGoogle Translate")
 print(zin[1])
 info = translator.detect(zin[1])
 print("Taal: %s" % info.lang)
 print("Zekerheid: %s" % info.confidence)
 if zin[0] == "Nederlands":
     langCode = "nl"
 elif zin[0] == "Duits":
     langCode = "de"
 elif zin[0] == "Engels":
     langCode = "en"
 elif zin[0] == "Frans":
     langCode = "fr"
 elif zin[0] == "Zweeds":
     langCode = "sv"
 elif zin[0] == "Italiaans":
     langCode = "it"
 if info.lang == langCode:
Example #13
0
)

# specify source language
translation = translator.translate("Wie gehts ?", src="de")
print(
    f"{translation.origin} ({translation.src}) --> {translation.text} ({translation.dest})"
)
# print all translations and other data
pprint(translation.extra_data)

# translate more than a phrase
sentences = [
    "Hello everyone", "How are you ?", "Do you speak english ?", "Good bye!"
]
translations = translator.translate(sentences, dest="tr")
for translation in translations:
    print(
        f"{translation.origin} ({translation.src}) --> {translation.text} ({translation.dest})"
    )

# detect a language
detection = translator.detect("नमस्ते दुनिया")
print("Language code:", detection.lang)
print("Confidence:", detection.confidence)
# print the detected language
print("Language:", constants.LANGUAGES[detection.lang])

# print all available languages
print("Total supported languages:", len(constants.LANGUAGES))
print("Languages:")
pprint(constants.LANGUAGES)
Example #14
0
class DialectWindow(Handy.ApplicationWindow):
    __gtype_name__ = 'DialectWindow'

    # Get widgets
    main_stack = Gtk.Template.Child()
    translator_box = Gtk.Template.Child()

    title_stack = Gtk.Template.Child()
    langs_button_box = Gtk.Template.Child()
    switch_btn = Gtk.Template.Child()
    src_lang_btn = Gtk.Template.Child()
    src_lang_label = Gtk.Template.Child()
    dest_lang_btn = Gtk.Template.Child()
    dest_lang_label = Gtk.Template.Child()

    return_btn = Gtk.Template.Child()
    forward_btn = Gtk.Template.Child()

    menu_btn = Gtk.Template.Child()

    char_counter = Gtk.Template.Child()
    src_text = Gtk.Template.Child()
    clear_btn = Gtk.Template.Child()
    paste_btn = Gtk.Template.Child()
    translate_btn = Gtk.Template.Child()

    dest_box = Gtk.Template.Child()
    dest_text = Gtk.Template.Child()
    trans_spinner = Gtk.Template.Child()
    trans_warning = Gtk.Template.Child()
    copy_btn = Gtk.Template.Child()
    voice_btn = Gtk.Template.Child()

    actionbar = Gtk.Template.Child()
    src_lang_btn2 = Gtk.Template.Child()
    switch_btn2 = Gtk.Template.Child()
    dest_lang_btn2 = Gtk.Template.Child()

    notification_revealer = Gtk.Template.Child()
    notification_label = Gtk.Template.Child()

    # Language values
    lang_codes = list(LANGUAGES.keys())
    lang_names = list(LANGUAGES.values())
    lang_speech = None
    # Current input Text
    current_input_text = ''
    current_history = 0
    history = []
    type_time = 0
    trans_queue = []
    active_thread = None
    # These are for being able to go backspace
    first_key = 0
    second_key = 0
    mobile_mode = False
    # Connectivity issues monitoring
    trans_failed = False
    voice_loading = False

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        # GSettings object
        self.settings = Gio.Settings.new(APP_ID)
        # Get saved languages
        self.src_langs = list(self.settings.get_value('src-langs'))
        self.dest_langs = list(self.settings.get_value('dest-langs'))

        # Google Translate object
        self.translator = Translator()

        # GStreamer playbin object and related setup
        self.player = Gst.ElementFactory.make('playbin', 'player')
        bus = self.player.get_bus()
        bus.add_signal_watch()
        bus.connect('message', self.on_gst_message)
        self.player_event = threading.Event(
        )  # An event for letting us know when Gst is done playing

        # Clipboard
        self.clipboard = Gtk.Clipboard.get(
            Gdk.SELECTION_CLIPBOARD)  # This is only for the Clipboard button

        # Setup window
        self.setup()

    def setup(self):
        self.set_default_icon_name(APP_ID)

        # Load saved dark mode
        gtk_settings = Gtk.Settings.get_default()
        dark_mode = self.settings.get_boolean('dark-mode')
        gtk_settings.set_property('gtk-application-prefer-dark-theme',
                                  dark_mode)

        # Connect responsive design function
        self.connect('check-resize', self.responsive_listener)
        self.connect('destroy', self.on_destroy)

        self.setup_headerbar()
        self.setup_actionbar()
        self.setup_translation()
        self.toggle_mobile_mode()

        # Get languages available for speech
        threading.Thread(target=self.load_lang_speech, daemon=True).start()

        # Load saved src lang
        self.src_lang_selector.set_property('selected', 'auto')
        # Load saved dest lang
        self.dest_lang_selector.set_property('selected', self.dest_langs[0])

    def on_listen_failed(self):
        self.voice_btn.set_image(self.voice_warning)
        self.voice_spinner.stop()
        self.voice_btn.set_tooltip_text(
            _('A network issue has occured. Retry?'))
        self.send_notification(
            _('A network issue has occured.\nPlease try again.'))
        dest_text = self.dest_buffer.get_text(
            self.dest_buffer.get_start_iter(), self.dest_buffer.get_end_iter(),
            True)
        if self.lang_speech:
            self.voice_btn.set_sensitive(
                self.dest_lang_selector.get_property('selected')
                in self.lang_speech and dest_text != '')
        else:
            self.voice_btn.set_sensitive(dest_text != '')

    def load_lang_speech(self, listen=False, text=None, language=None):
        """
        Load the language list for gTTS.

        text and language parameters are only needed with listen parameter.
        """
        try:
            self.voice_loading = True
            self.lang_speech = list(lang.tts_langs(tld='com').keys())
            if not listen:
                GLib.idle_add(self.toggle_voice_spinner, False)
            elif language in self.lang_speech and text != '':
                self.voice_download(text, language)

        except RuntimeError as exc:
            GLib.idle_add(self.on_listen_failed)
            print('Error: ' + str(exc))
        finally:
            if not listen:
                self.voice_loading = False

    def setup_headerbar(self):
        # Connect history buttons
        self.return_btn.connect('clicked', self.ui_return)
        self.forward_btn.connect('clicked', self.ui_forward)

        # Left lang selector
        self.src_lang_selector = DialectLangSelector()
        self.src_lang_selector.connect('notify::selected',
                                       self.on_src_lang_changed)
        # Set popover selector to button
        self.src_lang_btn.set_popover(self.src_lang_selector)
        self.src_lang_selector.set_relative_to(self.src_lang_btn)

        # Right lang selector
        self.dest_lang_selector = DialectLangSelector()
        self.dest_lang_selector.connect('notify::selected',
                                        self.on_dest_lang_changed)
        # Set popover selector to button
        self.dest_lang_btn.set_popover(self.dest_lang_selector)
        self.dest_lang_selector.set_relative_to(self.dest_lang_btn)

        # Add languages to both list
        for code, name in LANGUAGES.items():
            self.src_lang_selector.insert(code, name.capitalize())
            self.dest_lang_selector.insert(code, name.capitalize())

        self.langs_button_box.set_homogeneous(False)

        # Switch button
        self.switch_btn.connect('clicked', self.ui_switch)

        # Add menu to menu button
        builder = Gtk.Builder.new_from_resource(f'{RES_PATH}/menu.ui')
        menu = builder.get_object('app-menu')
        menu_popover = Gtk.Popover.new_from_model(self.menu_btn, menu)
        self.menu_btn.set_popover(menu_popover)

    def setup_actionbar(self):
        # Set popovers to lang buttons
        self.src_lang_btn2.set_popover(self.src_lang_selector)
        self.dest_lang_btn2.set_popover(self.dest_lang_selector)

        # Switch button
        self.switch_btn2.connect('clicked', self.ui_switch)

    def setup_translation(self):
        # Left buffer
        self.src_buffer = self.src_text.get_buffer()
        self.src_buffer.set_text('')
        self.src_buffer.connect('changed', self.on_src_text_changed)
        self.src_buffer.connect('end-user-action', self.user_action_ended)
        self.connect('key-press-event', self.update_trans_button)
        # Clear button
        self.clear_btn.connect('clicked', self.ui_clear)
        # Paste button
        self.paste_btn.connect('clicked', self.ui_paste)
        # Translate button
        self.translate_btn.connect('clicked', self.translation)

        # Right buffer
        self.dest_buffer = self.dest_text.get_buffer()
        self.dest_buffer.set_text('')
        self.dest_buffer.connect('changed', self.on_dest_text_changed)
        # Clipboard button
        self.copy_btn.connect('clicked', self.ui_copy)
        # Translation progress spinner
        self.trans_spinner.hide()
        self.trans_warning.hide()
        # Voice button prep-work
        self.voice_warning = Gtk.Image.new_from_icon_name(
            'dialog-warning-symbolic', Gtk.IconSize.BUTTON)
        self.voice_btn.connect('clicked', self.ui_voice)
        self.voice_image = Gtk.Image.new_from_icon_name(
            'audio-speakers-symbolic', Gtk.IconSize.BUTTON)
        self.voice_spinner = Gtk.Spinner(
        )  # For use while audio is running or still loading.
        self.toggle_voice_spinner(True)

    def responsive_listener(self, _window):
        size = self.get_size()

        if size.width < 600:
            if self.mobile_mode is False:
                self.mobile_mode = True
                self.toggle_mobile_mode()
        else:
            if self.mobile_mode is True:
                self.mobile_mode = False
                self.toggle_mobile_mode()

    def toggle_mobile_mode(self):
        if self.mobile_mode:
            # Show actionbar
            self.actionbar.set_reveal_child(True)
            # Change headerbar title
            self.title_stack.set_visible_child_name('label')
            # Change translation box orientation
            self.translator_box.set_orientation(Gtk.Orientation.VERTICAL)
            # Change lang selectors position
            self.src_lang_selector.set_relative_to(self.src_lang_btn2)
            self.dest_lang_selector.set_relative_to(self.dest_lang_btn2)
        else:
            # Hide actionbar
            self.actionbar.set_reveal_child(False)
            # Reset headerbar title
            self.title_stack.set_visible_child_name('selector')
            # Reset translation box orientation
            self.translator_box.set_orientation(Gtk.Orientation.HORIZONTAL)
            # Reset lang selectors position
            self.src_lang_selector.set_relative_to(self.src_lang_btn)
            self.dest_lang_selector.set_relative_to(self.dest_lang_btn)

    def on_destroy(self, _window):
        self.settings.set_value('src-langs',
                                GLib.Variant('as', self.src_langs))
        self.settings.set_value('dest-langs',
                                GLib.Variant('as', self.dest_langs))

    def send_notification(self, text, timeout=5):
        """
        Display an in-app notification.

        Args:
            text (str): The text or message of the notification.
            timeout (int, optional): The time before the notification disappears. Defaults to 5.
        """
        self.notification_label.set_text(text)
        self.notification_revealer.set_reveal_child(True)

        timer = threading.Timer(
            timeout,
            GLib.idle_add,
            args=[self.notification_revealer.set_reveal_child, False])
        timer.start()

    def toggle_voice_spinner(self, active=True):
        if active:
            self.voice_btn.set_sensitive(False)
            self.voice_btn.set_image(self.voice_spinner)
            self.voice_spinner.start()
        else:
            dest_text = self.dest_buffer.get_text(
                self.dest_buffer.get_start_iter(),
                self.dest_buffer.get_end_iter(), True)
            self.voice_btn.set_sensitive(
                self.dest_lang_selector.get_property('selected')
                in self.lang_speech and dest_text != '')
            self.voice_btn.set_image(self.voice_image)
            self.voice_spinner.stop()

    def on_src_lang_changed(self, _obj, _param):
        code = self.src_lang_selector.get_property('selected')
        dest_code = self.dest_lang_selector.get_property('selected')

        if code == dest_code:
            code = self.dest_langs[1] if code == self.src_langs[
                0] else dest_code
            self.dest_lang_selector.set_property('selected', self.src_langs[0])

        if code in LANGUAGES:
            self.src_lang_label.set_label(LANGUAGES[code].capitalize())
            # Updated saved left langs list
            if code in self.src_langs:
                # Bring lang to the top
                index = self.src_langs.index(code)
                self.src_langs.insert(0, self.src_langs.pop(index))
            else:
                self.src_langs.pop()
                self.src_langs.insert(0, code)
        else:
            self.src_lang_label.set_label(_('Auto'))

        # Rewrite recent langs
        self.src_lang_selector.clear_recent()
        self.src_lang_selector.insert_recent('auto', _('Auto'))
        for code in self.src_langs:
            name = LANGUAGES[code].capitalize()
            self.src_lang_selector.insert_recent(code, name)

        # Refresh list
        self.src_lang_selector.refresh_selected()

        # Translate again
        self.translation(None)

    def on_dest_lang_changed(self, _obj, _param):
        code = self.dest_lang_selector.get_property('selected')
        src_code = self.src_lang_selector.get_property('selected')
        dest_text = self.dest_buffer.get_text(
            self.dest_buffer.get_start_iter(), self.dest_buffer.get_end_iter(),
            True)

        if code == src_code:
            code = src_code
            self.src_lang_selector.set_property('selected', self.dest_langs[0])

        # Disable or enable listen function.
        if self.lang_speech:
            self.voice_btn.set_sensitive(code in self.lang_speech
                                         and dest_text != '')

        name = LANGUAGES[code].capitalize()
        self.dest_lang_label.set_label(name)
        # Updated saved right langs list
        if code in self.dest_langs:
            # Bring lang to the top
            index = self.dest_langs.index(code)
            self.dest_langs.insert(0, self.dest_langs.pop(index))
        else:
            self.dest_langs.pop()
            self.dest_langs.insert(0, code)

        # Rewrite recent langs
        self.dest_lang_selector.clear_recent()
        for code in self.dest_langs:
            name = LANGUAGES[code].capitalize()
            self.dest_lang_selector.insert_recent(code, name)

        # Refresh list
        self.dest_lang_selector.refresh_selected()

        # Translate again
        self.translation(None)

    """
    User interface functions
    """

    def ui_return(self, _button):
        """Go back one step in history."""
        if self.current_history != TRANS_NUMBER:
            self.current_history += 1
            self.history_update()

    def ui_forward(self, _button):
        """Go forward one step in history."""
        if self.current_history != 0:
            self.current_history -= 1
            self.history_update()

    def add_history_entry(self, src_language, dest_language, src_text,
                          dest_text):
        """Add a history entry to the history list."""
        new_history_trans = {
            'Languages': [src_language, dest_language],
            'Text': [src_text, dest_text]
        }
        if self.current_history > 0:
            del self.history[:self.current_history]
            self.current_history = 0
        if len(self.history) > 0:
            self.return_btn.set_sensitive(True)
        if len(self.history) == TRANS_NUMBER:
            self.history.pop()
        self.history.insert(0, new_history_trans)
        GLib.idle_add(self.reset_return_forward_btns)

    def switch_all(self, src_language, dest_language, src_text, dest_text):
        self.src_lang_selector.set_property('selected', dest_language)
        self.dest_lang_selector.set_property('selected', src_language)
        self.src_buffer.set_text(dest_text)
        self.dest_buffer.set_text(src_text)
        self.add_history_entry(src_language, dest_language, src_text,
                               dest_text)

        # Re-enable widgets
        self.langs_button_box.set_sensitive(True)
        self.translate_btn.set_sensitive(self.src_buffer.get_char_count() != 0)

    def switch_auto_lang(self, dest_language, src_text, dest_text):
        src_language = str(self.translator.detect(src_text).lang)

        # Switch all
        GLib.idle_add(self.switch_all, src_language, dest_language, src_text,
                      dest_text)

    def ui_switch(self, _button):
        # Get variables
        self.langs_button_box.set_sensitive(False)
        self.translate_btn.set_sensitive(False)
        src_language = self.src_lang_selector.get_property('selected')
        dest_language = self.dest_lang_selector.get_property('selected')
        src_text = self.src_buffer.get_text(self.src_buffer.get_start_iter(),
                                            self.src_buffer.get_end_iter(),
                                            True)
        dest_text = self.dest_buffer.get_text(
            self.dest_buffer.get_start_iter(), self.dest_buffer.get_end_iter(),
            True)
        if src_language == 'auto':
            if src_text == '':
                src_language = self.src_langs[0]
            else:
                threading.Thread(target=self.switch_auto_lang,
                                 args=(dest_language, src_text, dest_text),
                                 daemon=True).start()
                return

        # Switch all
        self.switch_all(src_language, dest_language, src_text, dest_text)

    def ui_clear(self, _button):
        self.src_buffer.set_text('')
        self.src_buffer.emit('end-user-action')

    def ui_copy(self, _button):
        dest_text = self.dest_buffer.get_text(
            self.dest_buffer.get_start_iter(), self.dest_buffer.get_end_iter(),
            True)
        self.clipboard.set_text(dest_text, -1)
        self.clipboard.store()

    def ui_paste(self, _button):
        text = self.clipboard.wait_for_text()
        if text is not None:
            end_iter = self.src_buffer.get_end_iter()
            self.src_buffer.insert(end_iter, text)

    def ui_voice(self, _button):
        dest_text = self.dest_buffer.get_text(
            self.dest_buffer.get_start_iter(), self.dest_buffer.get_end_iter(),
            True)
        dest_language = self.dest_lang_selector.get_property('selected')
        # Add here code that changes voice button behavior
        if dest_text != '':
            self.toggle_voice_spinner(True)
            if self.lang_speech:
                threading.Thread(target=self.voice_download,
                                 args=(dest_text, dest_language),
                                 daemon=True).start()
            else:
                threading.Thread(target=self.load_lang_speech,
                                 args=(True, dest_text, dest_language),
                                 daemon=True).start()

    def on_gst_message(self, _bus, message):
        if message.type == Gst.MessageType.EOS:
            self.player.set_state(Gst.State.NULL)
            self.player_event.set()
        elif message.type == Gst.MessageType.ERROR:
            self.player.set_state(Gst.State.NULL)
            self.player_event.set()
            print('Some error occured while trying to play.')

    def voice_download(self, text, language):
        try:
            self.voice_loading = True
            tts = gTTS(text, lang=language, lang_check=False)
            with NamedTemporaryFile() as file_to_play:
                tts.write_to_fp(file_to_play)
                file_to_play.seek(0)
                self.player.set_property('uri', 'file://' + file_to_play.name)
                self.player.set_state(Gst.State.PLAYING)
                self.player_event.wait()
        except Exception as exc:
            print(exc)
            print('Audio download failed.')
            GLib.idle_add(self.on_listen_failed)
        else:
            GLib.idle_add(self.toggle_voice_spinner, False)
        finally:
            self.voice_loading = False

    # This starts the translation if Ctrl+Enter button is pressed
    def update_trans_button(self, button, keyboard):
        modifiers = keyboard.get_state(
        ) & Gtk.accelerator_get_default_mod_mask()

        control_mask = Gdk.ModifierType.CONTROL_MASK
        shift_mask = Gdk.ModifierType.SHIFT_MASK
        unicode_key_val = Gdk.keyval_to_unicode(keyboard.keyval)
        if (GLib.unichar_isgraph(chr(unicode_key_val))
                and modifiers in (shift_mask, 0)
                and not self.src_text.is_focus()):
            self.src_text.grab_focus()

        if not self.settings.get_boolean('live-translation'):
            if control_mask == modifiers:
                if keyboard.keyval == Gdk.KEY_Return:
                    if not self.settings.get_value('translate-accel'):
                        self.translation(button)
                        return Gdk.EVENT_STOP
                    return Gdk.EVENT_PROPAGATE
            elif keyboard.keyval == Gdk.KEY_Return:
                if self.settings.get_value('translate-accel'):
                    self.translation(button)
                    return Gdk.EVENT_STOP
                return Gdk.EVENT_PROPAGATE

        return Gdk.EVENT_PROPAGATE

    def on_src_text_changed(self, buffer):
        sensitive = buffer.get_char_count() != 0
        self.translate_btn.set_sensitive(sensitive)
        self.clear_btn.set_sensitive(sensitive)

    def on_dest_text_changed(self, buffer):
        sensitive = buffer.get_char_count() != 0
        self.copy_btn.set_sensitive(sensitive)
        if not self.voice_loading and self.lang_speech:
            self.voice_btn.set_sensitive(
                self.dest_lang_selector.get_property('selected')
                in self.lang_speech and sensitive)
        elif not self.voice_loading and not self.lang_speech:
            self.voice_btn.set_sensitive(sensitive)

    def user_action_ended(self, buffer):
        # If the text is over the highest number of characters allowed, it is truncated.
        # This is done for avoiding exceeding the limit imposed by Google.
        if buffer.get_char_count() >= MAX_LENGTH:
            self.send_notification(_('5000 characters limit reached!'))
            src_text = buffer.get_text(buffer.get_start_iter(),
                                       buffer.get_end_iter(), True)
            self.src_buffer.set_text(src_text[:MAX_LENGTH])
        self.char_counter.set_text(
            f'{str(buffer.get_char_count())}/{MAX_LENGTH}')
        if self.settings.get_boolean('live-translation'):
            self.translation(None)

    # The history part
    def reset_return_forward_btns(self):
        self.return_btn.set_sensitive(
            self.current_history < len(self.history) - 1)
        self.forward_btn.set_sensitive(self.current_history > 0)

    # Retrieve translation history
    def history_update(self):
        self.reset_return_forward_btns()
        lang_hist = self.history[self.current_history]
        self.src_lang_selector.set_property('selected',
                                            lang_hist['Languages'][0])
        self.dest_lang_selector.set_property('selected',
                                             lang_hist['Languages'][1])
        self.src_buffer.set_text(lang_hist['Text'][0])
        self.dest_buffer.set_text(lang_hist['Text'][1])

    # THE TRANSLATION AND SAVING TO HISTORY PART
    def appeared_before(self):
        src_language = self.src_lang_selector.get_property('selected')
        dest_language = self.dest_lang_selector.get_property('selected')
        src_text = self.src_buffer.get_text(self.src_buffer.get_start_iter(),
                                            self.src_buffer.get_end_iter(),
                                            True)
        if (self.history[self.current_history]['Languages'][0] == src_language
                and self.history[self.current_history]['Languages'][1]
                == dest_language
                and self.history[self.current_history]['Text'][0] == src_text
                and not self.trans_failed):
            return True
        return False

    def translation(self, _button):
        # If it's like the last translation then it's useless to continue
        if len(self.history) == 0 or not self.appeared_before():
            src_text = self.src_buffer.get_text(
                self.src_buffer.get_start_iter(),
                self.src_buffer.get_end_iter(), True)
            src_language = self.src_lang_selector.get_property('selected')
            dest_language = self.dest_lang_selector.get_property('selected')

            if self.trans_queue:
                self.trans_queue.pop(0)
            self.trans_queue.append({
                'src_text': src_text,
                'src_language': src_language,
                'dest_language': dest_language
            })

            # Check if there are any active threads.
            if self.active_thread is None:
                # Show feedback for start of translation.
                self.trans_spinner.show()
                self.trans_spinner.start()
                self.dest_box.set_sensitive(False)
                self.langs_button_box.set_sensitive(False)
                # If there is no active thread, create one and start it.
                self.active_thread = threading.Thread(
                    target=self.run_translation, daemon=True)
                self.active_thread.start()

    def run_translation(self):
        def on_trans_failed():
            self.trans_warning.show()
            self.send_notification(
                _('Translation failed.\nPlease check for network issues.'))
            self.copy_btn.set_sensitive(False)
            self.voice_btn.set_sensitive(False)

        def on_trans_success():
            self.trans_warning.hide()

        def on_trans_done():
            self.trans_spinner.stop()
            self.trans_spinner.hide()
            self.dest_box.set_sensitive(True)
            self.langs_button_box.set_sensitive(True)

        while self.trans_queue:
            # If the first language is revealed automatically, let's set it
            trans_dict = self.trans_queue.pop(0)
            src_text = trans_dict['src_text']
            src_language = trans_dict['src_language']
            dest_language = trans_dict['dest_language']
            if src_language == 'auto' and src_text != '':
                try:
                    src_language = str(self.translator.detect(src_text).lang)
                    GLib.idle_add(self.src_lang_selector.set_property,
                                  'selected', src_language)
                    if not src_language in src_langs:
                        self.src_langs[0] = src_language
                except Exception:
                    self.trans_failed = True
            # If the two languages are the same, nothing is done
            if src_language != dest_language:
                dest_text = ''
                # THIS IS WHERE THE TRANSLATION HAPPENS. The try is necessary to circumvent a bug of the used API
                if src_text != '':
                    try:
                        dest_text = self.translator.translate(
                            src_text, src=src_language,
                            dest=dest_language).text
                        self.trans_failed = False
                    except Exception:
                        self.trans_failed = True

                    # Finally, everything is saved in history
                    self.add_history_entry(src_language, dest_language,
                                           src_text, dest_text)
                else:
                    self.trans_failed = False
                GLib.idle_add(self.dest_buffer.set_text, dest_text)

        if self.trans_failed:
            GLib.idle_add(on_trans_failed)
        else:
            GLib.idle_add(on_trans_success)
        GLib.idle_add(on_trans_done)
        self.active_thread = None
    nn = 'l\'' + name
    nc = name + ','
    n.append(nn)
    n.append(nc)
teacher_names = teacher_names + n
#teacher_names

for elem in db.enquestes_professors.find({}, no_cursor_timeout=True):
    pdf_id = elem['pdf_id']
    q1_answers = elem['q1_answers']
    for comment in q1_answers:
        dict = {}
        dict["form_type"] = "enquestes_professors"
        dict["pdf_id"] = pdf_id
        dict["question_nr"] = 1
        language = translator.detect(str(comment).replace('\0', '')).lang
        if comment == 'Cap.' or comment == 'Cap' or comment == 'cap' or comment == 'CAP':
            language = 'ca'
        if language == "haw" or language == "ptca":
            break
        if language == 'espt' or language == 'esca' or language == "gl":
            language = 'es'
        if language == 'nl' or language == 'fr':
            language = 'ca'
        dict["language"] = language

        ### REPLACE PROFESSOR NAMES WITH "PROFESSOR_NAME"
        c = comment.split()
        c_lower = [x.lower() for x in c]
        for name in teacher_names:
            if name in c_lower:
Example #16
0
def detectlang(text):
    translator = Translator()
    detector = translator.detect(text)
    return detector.lang
def detect(input_text):
    translator = Translator()
    return translator.detect(input_text)