Как сделать чтобы при нажатии на кнопку выполнение функции останавливалось?
@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
keyboard = types.InlineKeyboardMarkup()
key_cancel = types.InlineKeyboardButton(text='Отменить', callback_data='cancel')
keyboard.add(key_cancel)
if call.data == "report":
bot.send_message(call.message.chat.id,
'<i>Опишите проблему, Ваше сообщение будет доставлено администрации и принято на рассмотрение!\n</i>',
parse_mode='HTML', reply_markup=keyboard)
if call.data == 'cancel':
bot.send_message(call.message.chat.id,
'<b><i>Отменено!</i></b>',
parse_mode='HTML')
else:
bot.register_next_step_handler(call.message, report_send)
elif call.data == "support":
bot.send_message(call.message.chat.id,
'<i>Опишите Вашу идею, сообщение будет доставлено администрации и принято на рассмотрение!\n</i>',
parse_mode='HTML', reply_markup=keyboard)
if call.data == 'cancel':
bot.send_message(call.message.chat.id,
'<b><i>Отменено!</i></b>',
parse_mode='HTML')
else:
bot.register_next_step_handler(call.message, support_send)
Мне нужно чтоб при нажатии на кнопку cancel выполнение функций (support_send() или report_send()) останавливалось, либо же чтоб оно вообще не начиналось, пока пользователь не напишет сообщение.
Использование асинхронных библиотек возможно, но не желательно.
Ответы (1 шт):
Автор решения: piece0f
→ Ссылка
Я решил это добавлением глобальной переменной callback_cancel, которая изначально равна False.
Обработку нажатия на кнопку Отменить я вынес из if:
elif call.data == 'cancel':
global callback_cancel
callback_cancel = True
bot.send_message(call.message.chat.id,
'<b><i>Отменено!</i></b>',
parse_mode='HTML')
При нажатии на кнопку callback_cancel становится True, и, когда next_step_handler получает сообщение, если callback_cancel == True он придает переменной обратно значение False и прекращает выполнение функции.
def report_send(message):
if callback_cancel:
callback_cancel = False
return