Всем доброго времени суток.
Пишу простенького бота который при старте выводит несколько кнопок с названием хлеба.
После нажатия кнопки бот спрашивает количество, после получения ответа, благодарит и показывает главное меню.
Когда делал бота на локальной машине, без вебхука, ни каких проблем не было.
После того как залил бота хостинг начались проблемы. (используется 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)