@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())的执行停止,或者在用户写消息之前它根本不启动。使用异步库是可能的,但不可取。
我通过添加一个
callback_cancel最初为 False 的全局变量来解决这个问题。我从以下位置取出按钮点击处理:
Отменитьif单击按钮
callback_cancel时,它变为 True,当next_step_handler收到消息时,callback_cancel == True它将变量设置回 False 并停止执行函数。