示例#1
0
    def mention(self, telegramBot, update):
        message = update.message.text
        words = re.compile('\s+', re.UNICODE).split(message)
        words = filter(lambda word: word.strip() and not self.mentionMatcher.match(word), words)
        words = map(lambda word: word.lower(), words)
        aliases = dict(self.bot.config.items('friendly-aliases')) if self.bot.config.has_section('friendly-aliases') else self.bot.config.has_section('friendly-aliases')
        if aliases and len(words) >= 1 and words[0] in aliases.keys():
            command = aliases[words[0]]
            params = words[1:]
            self.logDebug(u'Friendly mention (chat_id: %s, command: %s, params: %s)' % (update.message.chat_id, command, (' ').join(params or ['None'])))
            updateMock = DynObject()
            updateMock.message = DynObject()
            if (hasattr(update.message, 'user')):
                updateMock.message.user = update.message.user
            updateMock.message.chat_id = update.message.chat_id
            updateMock.message.text = '/%s %s' % (command, ' '.join(params))
            self.bot.dispatchCommand(updateMock, command)
        elif len(words) == 1:
            self.bot.sendMessage(chat_id=update.message.chat_id, text=random.choice(self._defaultAnswers).decode('utf-8'))
        elif len(words) > 1:
            sentence = ' '.join(words)
            bc = self.behaviourControl
            results = []
            sentenceEnglish = ExternalAPI.translate(sentence, fromLanguage=self.language) or ''
            target = lambda behaviour, sentence: bc.getStatus(behaviour) == 'loaded' and results.append({'source': behaviour, 'answer': bc.get(behaviour).query(sentence)})
            t1 = Thread(target=target, args=('evi', sentenceEnglish))
            t2 = Thread(target=target, args=('wolfram', sentenceEnglish))
            map(lambda t: t.start(), [t1, t2])
            map(lambda t: t.join(), [t1, t2])
            results = filter(lambda result: result['answer'] and result['answer'].strip(), results)
            results = sorted(results, lambda x, y: len(x['answer']) - len(y['answer']))
            if results:
                result = results[0]
                self.logDebug(u'Friendly answer (chat_id: %s, sentence: %s, sentenceEnglish: %s, answers: %s, choosen: %s)' % (update.message.chat_id, sentence, sentenceEnglish, results, result['source']))
                answerEnglish = result['answer']

                creator = self.bot.config.get('main', 'creator') if self.bot.config.has_option('main', 'creator') else 'somebody smart'

                answerEnglish = re.sub('My creators are the company Evi \(formerly known as True Knowledge\), a semantic technology company based in Cambridge, UK', creator, answerEnglish)
                answerEnglish = re.sub('Evi \(formerly known as True Knowledge\)', creator, answerEnglish)
                answerEnglish = re.sub('Stephen Wolfram', creator, answerEnglish)
                answerEnglish = re.sub('William Tunstall-Pedoe, founder of Evi Technologies.', creator, answerEnglish)
                answerEnglish = re.sub('(Wolfram\|Alpha|Evi)', self.bot.getInfo().username, answerEnglish)

                answerNative = ExternalAPI.translate(answerEnglish, fromLanguage='en', toLanguage=self.language)
                self.bot.sendMessage(chat_id=update.message.chat_id, text=(answerNative or answerEnglish))
            else:
                self.logDebug(u'Friendly answer (chat_id: %s, sentence: %s, sentenceEnglish: %s, answers: None)' % (update.message.chat_id, sentence, sentenceEnglish))
                self.bot.sendMessage(chat_id=update.message.chat_id, text=random.choice(self._defaultAnswers).decode('utf-8'))
示例#2
0
 def testTranslateComplex(self):
     sentence = 'The fox jumps. But who the hell is the fox ? I don\'t know'
     result = ExternalAPI.translate(sentence)
     self.assertEqual(result, u'A raposa salta. Mas quem \xe9 a raposa? Eu n\xe3o sei')
示例#3
0
 def testTranslateSimpleSentence(self):
     sentence = u'O que é carro ?'
     result = ExternalAPI.translate(sentence, fromLanguage='pt')
     self.assertEqual(result, 'What is a car?')
示例#4
0
 def testTranslateShortInvalidWord(self):
     sentence = 'pi'
     result = ExternalAPI.translate(sentence)
     self.assertEqual(result, 'PI')