@XoXoJIBot

Почему при использовании webhook и установки threaded=False, возникаю проблемы с работой register_next_step_handler?

Всем доброго времени суток.

Пишу простенького бота который при старте выводит несколько кнопок с названием хлеба.
После нажатия кнопки бот спрашивает количество, после получения ответа, благодарит и показывает главное меню.

Когда делал бота на локальной машине, без вебхука, ни каких проблем не было.

После того как залил бота хостинг начались проблемы. (используется pyTelegramBotAPI==2.3.1)

1. Во первых бот ни как не хотел реагировать на любые команды, вылечилось установкой threaded = False
bot = telebot.TeleBot(API_TOKEN, threaded=False)

2. Проблемы с переходом в обработчик указанный в register_next_step_handler
Иногда попадает в обработчик сразу после ответа пользователя, а иногда только на 2-ой и более ответ (иногда не попадает вообще, приходиться начинать все заново с команды /start)

Сталкивался кто либо с такой проблемой?

# -*- coding: utf-8 -*- 
import telebot
import logging
import flask

MENU_TEXT = u'Выберите хлеб.'

bot = telebot.TeleBot(API_TOKEN, threaded=False)
logger = telebot.logger
telebot.logger.setLevel(logging.INFO)

def webhook():
    if flask.request.headers.get('content-type') == 'application/json':
        logger.info(u'Попали в вебхук')
        json_string = flask.request.get_data().decode('utf-8')
        update = telebot.types.Update.de_json(json_string)
        bot.process_new_updates([update])
        return ''
    else:
        flask.abort(403)


def main_menu(message, text):
    logger.info(u'Попали в главное меню')
    markup = telebot.types.ReplyKeyboardMarkup()
    markup.row(u'Батон Московский')

    bot.send_message(message.chat.id, text, reply_markup=markup)


# Handle '/start' '/help'
@bot.message_handler(commands=['start', 'help'])
def get_main_menu(message):
    main_menu(message, MENU_TEXT)


@bot.message_handler(regexp=u'^Батон Московский$')
def long_loaf_moscow(message):
    logger.info(u'Попали в батон')
    markup = telebot.types.ReplyKeyboardRemove()
    msg = bot.send_message(message.chat.id, u'Введите кол-во', reply_markup=markup)
    bot.register_next_step_handler(msg, check_quantity)


def check_quantity(message):
    logger.info(u'Попали в обработчик кнопки')
    logger.info(message.text)
    if message.text != '\start' and message.text != '\help':
        try:
            if int(message.text) > 0:
                main_menu(message, u'Информация принята')
            else:
                msg = bot.send_message(message.chat.id, u'Ввeдите кол-во больше 0')
                bot.register_next_step_handler(msg, check_quantity)
        except ValueError:
            msg = bot.send_message(message.chat.id, u'Ввeдите кол-во числом')
            bot.register_next_step_handler(msg, check_quantity)

if __name__ == "__main__":
    bot.polling(none_stop=True, timeout=360)
  • Вопрос задан
  • 1187 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы