Exemplo n.º 1
0
 def register_user(self):
     self.send('/start')
     last_message = self.server.webapp.bot.api.messages[-1]
     print(last_message)
     url = json.loads(last_message['reply_markup'])['inline_keyboard'][0][0]['url']
     params = {
         'key': 'secret',
         'oauth_verifier': 'secret',
     }
     make_request(url, 'GET', params)
Exemplo n.º 2
0
 def register_user(self):
     self.send('/start')
     last_message = self.server.webapp.bot.api.messages[-1]
     print(last_message)
     url = json.loads(
         last_message['reply_markup'])['inline_keyboard'][0][0]['url']
     params = {
         'key': 'secret',
         'oauth_verifier': 'secret',
     }
     make_request(url, 'GET', params)
Exemplo n.º 3
0
 def __request(self, api_method, **kwargs):
     url = '{base_url}bot{token}/{api_method}'.format(
         base_url=self.api_url,
         token=self.token,
         api_method=api_method
     )
     request_params = {}
     for k, v in kwargs.items():
         if v is None:
             continue
         request_params.update({k: v})
     h = hashlib.md5()
     h.update('{0}_{1}_{2}'.format(time(), url, random.random()).encode())
     request_id = h.hexdigest()
     self.logger.debug('REQUEST {hash} - {method} {url}, params: {params}'.format(
         hash=request_id,
         method='POST',
         url=url,
         params=str(request_params)
     ))
     raw_response = make_request(url, method='POST', params=request_params)
     self.logger.debug('RESPONSE {hash} - {response}'.format(
         hash=request_id,
         response=raw_response
     ))
     response = json.loads(raw_response.decode())
     if not response['ok']:
         raise BotApiError(response['error_code'], response['description'])
     return response['result']
Exemplo n.º 4
0
def handle_audio(bot, telegram_message):
    status_message = bot.api.sendMessage(telegram_message.chat.id,
                                         'Voice accepted')
    max_size = 20 * 1024 * 1024  # telegram restriction. We can't download any file that has size more than 20Mb
    if telegram_message.voice.file_size > max_size:
        raise Exception(
            'File too big. Telegram does not allow to the bot to download files over 20Mb.'
        )
    file_id = telegram_message.voice.file_id
    download_url = bot.api.getFile(file_id)
    data = make_request(download_url)
    short_name = basename(urlparse(download_url).path)
    filename = join(bot.config['tmp_root'],
                    '{0}_{1}'.format(file_id, short_name))
    with open(filename, 'wb') as f:
        f.write(data)
    user = bot.get_user(telegram_message)
    quota = bot.evernote.get_quota_info(user.evernote.access.token)
    if quota['remaining'] < len(data):
        reset_date = quota['reset_date'].strftime('%Y-%m-%d %H:%M:%S')
        raise Exception(
            'Your evernote quota is out ({0} bytes remains till {1})'.format(
                quota['remaining'], reset_date))
    title = telegram_message.caption or telegram_message.text[:20] or 'Voice'
    bot.save_note(user,
                  text=telegram_message.text,
                  title=title,
                  files=({
                      'path': filename,
                      'name': short_name
                  }, ))
    bot.api.editMessageText(telegram_message.chat.id,
                            status_message['message_id'], 'Saved')
 def __request(self, api_method, **kwargs):
     url = '{base_url}bot{token}/{api_method}'.format(base_url=self.api_url,
                                                      token=self.token,
                                                      api_method=api_method)
     request_params = {}
     for k, v in kwargs.items():
         if v is None:
             continue
         request_params.update({k: v})
     h = hashlib.md5()
     h.update('{0}_{1}_{2}'.format(time(), url, random.random()).encode())
     request_id = h.hexdigest()
     self.logger.debug(
         'REQUEST {hash} - {method} {url}, params: {params}'.format(
             hash=request_id,
             method='POST',
             url=url,
             params=str(request_params)))
     raw_response = make_request(url, method='POST', params=request_params)
     self.logger.debug('RESPONSE {hash} - {response}'.format(
         hash=request_id, response=raw_response))
     response = json.loads(raw_response.decode())
     if not response['ok']:
         raise BotApiError(response['error_code'], response['description'])
     return response['result']
Exemplo n.º 6
0
def handle_photo(bot, telegram_message):
    status_message = bot.api.sendMessage(telegram_message.chat.id, 'Photo accepted')
    max_size = 20 * 1024 * 1024 # telegram restriction. We can't download any file that has size more than 20Mb
    file_id = None
    for photo in sorted(telegram_message.photo, key=lambda x: x.file_size, reverse=True):
        if photo.file_size > max_size:
            continue
        file_id = photo.file_id
        break  # NOTE: File with the biggest size found
    if not file_id:
        raise Exception('File too big. Telegram does not allow to the bot to download files over 20Mb.')
    download_url = bot.api.getFile(file_id)
    data = make_request(download_url)
    short_name = basename(urlparse(download_url).path)
    filename = join(bot.config['tmp_root'], '{0}_{1}'.format(file_id, short_name))
    with open(filename, 'wb') as f:
        f.write(data)
    user = bot.get_user(telegram_message)
    quota = bot.evernote.get_quota_info(user.evernote.access.token)
    if quota['remaining'] < len(data):
        reset_date = quota['reset_date'].strftime('%Y-%m-%d %H:%M:%S')
        raise Exception('Your evernote quota is out ({0} bytes remains till {1})'.format(quota['remaining'], reset_date))
    title = telegram_message.caption or telegram_message.text[:20] or 'Photo'
    bot.save_note(user, text=telegram_message.text, title=title, files=({'path': filename, 'name': short_name},))
    bot.api.editMessageText(telegram_message.chat.id, status_message['message_id'], 'Saved')
Exemplo n.º 7
0
 def send(self, text):
     webhook_url = urlparse(self.config['webhook_url'])
     url = 'http://{host}:{port}{path}'.format(host=self.host, port=self.port, path=webhook_url.path)
     telegram_update_data = self.make_telegram_update(text)
     data = json.dumps(telegram_update_data)
     response_data = make_request(url, 'POST', None, data)
     if response_data != b'':
         print('[invalid bot response] > {}'.format(response_data))
Exemplo n.º 8
0
 def send(self, text):
     webhook_url = urlparse(self.config['webhook_url'])
     url = 'http://{host}:{port}{path}'.format(host=self.host,
                                               port=self.port,
                                               path=webhook_url.path)
     telegram_update_data = self.make_telegram_update(text)
     data = json.dumps(telegram_update_data)
     response_data = make_request(url, 'POST', None, data)
     if response_data != b'':
         print('[invalid bot response] > {}'.format(response_data))
Exemplo n.º 9
0
def handle_document(bot, telegram_message):
    status_message = bot.api.sendMessage(telegram_message.chat.id, 'Document accepted')
    max_size = 20 * 1024 * 1024 # telegram restriction. We can't download any file that has size more than 20Mb
    if telegram_message.document.file_size > max_size:
        raise Exception('File too big. Telegram does not allow to the bot to download files over 20Mb.')
    file_id = telegram_message.document.file_id
    download_url = bot.api.getFile(file_id)
    data = make_request(download_url)
    short_name = telegram_message.document.file_name
    filename = join(bot.config['tmp_root'], '{0}_{1}'.format(file_id, short_name))
    with open(filename, 'wb') as f:
        f.write(data)
    user = bot.get_user(telegram_message)
    quota = bot.evernote.get_quota_info(user.evernote.access.token)
    if quota['remaining'] < len(data):
        reset_date = quota['reset_date'].strftime('%Y-%m-%d %H:%M:%S')
        raise Exception('Your evernote quota is out ({0} bytes remains till {1})'.format(quota['remaining'], reset_date))
    title = telegram_message.caption or telegram_message.text[:20] or 'Document'
    bot.save_note(user, text=telegram_message.text, title=title, files=({'path': filename, 'name': short_name},))
    bot.api.editMessageText(telegram_message.chat.id, status_message['message_id'], 'Saved')