コード例 #1
0
ファイル: telegram.py プロジェクト: igorB88/pomodoro
    def post(self, request, token):

        try:
            raw = request.body.decode('utf8')
            logging.debug('Telegram raw data %s' % raw)
            update = json.loads(raw)
            if 'message' in update:
                data = message = update['message']
            elif 'callback_query' in update:
                data = update['callback_query']
                message = data['message']
            else:
                logging.error('Can not recognize update {}', update)
                raise TypeError('Not supported')

            current_user = get_telegram_from_seed(message)
            sender = Sender('telegram', current_user.user_id)
            bot = Bot(current_user, sender)
        except (TypeError, ValueError) as e:
            logging.exception("Can not decode message")
            return HttpResponse('Error')

        if token != settings.TELEGRAM_BOT_TOKEN:
            sender = Sender('telegram', current_user.user_id)
            sender.sendMessage('Our bot migrated to @{}'.format(
                settings.TELEGRAM_BOT_NAME),
                               token=token)
            return HttpResponse('ok')

        try:
            flavor = telepot.flavor(data)
            if flavor == 'chat':
                text = message.get('text', '') or message.get(
                    'contact', {}).get('phone_number')
                if not text:
                    return HttpResponse('ok')

                bot.on_chat_message(text)
            elif flavor == 'callback_query':
                msg_id = (data['from']['id'], data['message']['message_id'])
                query_id, from_id, query_data = telepot.glance(
                    data, flavor='callback_query')
                sender.msg_id = msg_id
                sender.query_id = query_id

                data = json.loads(query_data) if query_data else None
                if not data:
                    return HttpResponse('ok')

                bot.on_callback(data)
        except Exception:
            logging.exception('Error on handling bot message')
            try:
                sender.sendMessage('❌❌❌❌❌ Internal error',
                                   reply_markup=bot.get_menu())
            except Exception:
                logging.exception('Error on handling bot message error')

        return HttpResponse('ok')