Телеграм бот проскакивает @bot.message_handler
пишу бота с конечными автоматами, при возврате в главное меню по инлайн кнопке должен создаваться новый объект и хандлеры начинаться с начала, но он возвращает меня на тот шаг где я вышел в меню код
class WayBill:
def __init__(self):
"""При инициализации новой заявки очищаем все поля"""
self.numberwb = ""
self.datewb = ""
self.sumwb = ""
self.objectwb = ""
self.primwb = ""
def send(self, telegram_id):
"""Отправляем данные в Гугл таблицу"""
cursor.execute("SELECT username FROM staff WHERE position = 'Прораб' and telegram_id=?", (telegram_id,))
foreman = cursor.fetchall()[0][0]
sheet = gsheets.gsAuth(workbookID=config.workbookID, sheetName='Накладные')
paydate = str(datetime.now().strftime("%d.%m.%Y"))
try:
appendToSheets(activesheet=sheet, paydate=paydate, waybill=self.numberwb, note=self.primwb,
waybilldate=self.datewb, amount=self.sumwb, target=self.objectwb, author=foreman)
return 'Операция занесена'
except Exception:
return 'Ошибка занесения'
keyboard_to_main_menu = types.InlineKeyboardMarkup()
Cancel_to_list_choice = types.InlineKeyboardButton(text="В Главное меню", callback_data="to_list_choice")
@bot.callback_query_handler(func=lambda call: call.data == 'waybill')
def inline_waybill(call):
global NoteWB
NoteWB = WayBill()
try:
bot.delete_message(call.message.chat.id, call.message.message_id)
except:
print('Не удалось удалить сообщение')
bot.send_message(call.message.chat.id,
"Введите номер накладной:", reply_markup=keyboard_to_main_menu)
bot.register_next_step_handler(call.message, set_number)
@bot.message_handler(content_types=["text"], func=lambda message: message.chat.id in whitelist)
def set_number(message):
numberwb = message.text
print(numberwb)
NoteWB.numberwb = numberwb
bot.delete_message(message.chat.id, message.message_id)
bot.delete_message(message.chat.id, message.message_id - 1)
bot.send_message(message.chat.id, f"Накладная №{NoteWB.numberwb}...\nВведите дату накладной:",
reply_markup=keyboard_to_main_menu)
bot.register_next_step_handler(message, set_date)
@bot.message_handler(content_types=["text"], func=lambda message: message.chat.id in whitelist)
def set_date(message):
global NoteWB
datewb = message.text
print(datewb)
NoteWB.datewb = datewb
bot.delete_message(message.chat.id, message.message_id)
bot.delete_message(message.chat.id, message.message_id - 1)
bot.send_message(message.chat.id, f"Накладная №{NoteWB.numberwb} от {NoteWB.datewb}...\nВведите cумму накладной:",
reply_markup=keyboard_to_main_menu)
bot.register_next_step_handler(message, set_sum)
@bot.message_handler(content_types=["text"], func=lambda message: message.chat.id in whitelist)
def set_sum(message):
global NoteWB
sumwb = message.text
sumwb = str(sumwb).replace(',', '.')
print(sumwb)
NoteWB.sumwb = sumwb
bot.delete_message(message.chat.id, message.message_id)
bot.delete_message(message.chat.id, message.message_id - 1)
bot.send_message(message.chat.id,
f"Накладная №{NoteWB.numberwb} от {NoteWB.datewb} на сумму {NoteWB.sumwb}р...\nВведите название объекта",
reply_markup=keyboard_to_main_menu)
bot.register_next_step_handler(message, set_object)
@bot.message_handler(content_types=["text"], func=lambda message: message.chat.id in whitelist)
def set_object(message):
global NoteWB
objectwb = message.text
print(objectwb)
NoteWB.objectwb = objectwb
bot.delete_message(message.chat.id, message.message_id)
bot.delete_message(message.chat.id, message.message_id - 1)
bot.send_message(message.chat.id,
f"Накладная №{NoteWB.numberwb} от {NoteWB.datewb} на сумму {NoteWB.sumwb}р. объект: {NoteWB.objectwb}\nВведите примечание или нажмите кнопку 'Добавить без примечания'",
reply_markup=keyboard_send)
bot.register_next_step_handler(message, set_prim)
@bot.message_handler(content_types=["text"], func=lambda message: message.chat.id in whitelist)
def set_prim(message):
global NoteWB
primwb = message.text
print(primwb)
NoteWB.primwb = primwb
bot.delete_message(message.chat.id, message.message_id)
bot.delete_message(message.chat.id, message.message_id - 1)
bot.send_message(message.chat.id,
f"Накладная №{NoteWB.numberwb} от {NoteWB.datewb} на сумму {NoteWB.sumwb}р. объект: {NoteWB.objectwb}, Примечание: {NoteWB.primwb}\nЗапись добавлена")
NoteWB.send(message.chat.id)
bot.send_message(message.chat.id,
"Что сделать?",
reply_markup=keyboard_Choice)
Ответы (1 шт):
Автор решения: Riangry
→ Ссылка
Проблема оказалась в библиотеке. Pytelegrambotapi имеет проблему с register_next_step_handler и строить на нем конечные автоматы не очень удобно перешел на aiogram у которой этой проблемы нет из за сущности состояние