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)
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)
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']
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']
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')
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))
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')