Как после нажатия кнопки остановить цикл и сменить сообщение

Есть бот который после нажатия кнопки выводит текст и файл .pdf после этого запускаеться бесконечный цикл который каждые 15 минут отсылает сообщение. Как сделать что б после нажатия любой кнопки или ввода команды /start цикл останавливался. И еще одна проблема, после нажатия кнопки 'main_menu' файл .pdf не пропадает и выдает ошибку there is no text in the message to edit. Как сделать что б файл пропал и появились другие кнопки?

@bot.callback_query_handler(func=lambda call: call.data == 'cake')
def cake(call: types.CallbackQuery):
    markup = types.InlineKeyboardMarkup(row_width=1).add(types.InlineKeyboardButton('Order', callback_data='order'),
                                                         types.InlineKeyboardButton('Main menu', callback_data='main_back'))
#Когда нажимаю main_back это сообщение остается и выводит ошибку
    bot.edit_message_text(message_id=call.message.message_id, chat_id=call.message.chat.id, text='Choose a cake from the catalogChoose a cake from the catalog')
    bot.send_document(call.message.chat.id, open(r'1.pdf', 'rb'), reply_markup=markup)
    while True:
        sleep(15 * 60)
        bot.send_message(call.message.chat.id, 'You already chosen which cake you want to order?', reply_markup=markup)


@bot.callback_query_handler(func=lambda call: call.data == 'main_back')
def main_back(call: types.CallbackQuery):
    global information
    global photo
    global candy
    photo = False
    candy = False
    information.clear()
# Удаляет только документ с кнопками
    bot.delete_message(message_id=call.message.message_id, chat_id=call.message.chat.id)
    bot.clear_step_handler_by_chat_id(chat_id=call.message.chat.id)
    markup = types.InlineKeyboardMarkup(row_width=3).add(
        types.InlineKeyboardButton('Cake', callback_data='cake'),
        types.InlineKeyboardButton('Bento-Cake', callback_data='bento_cake'),
        types.InlineKeyboardButton('Candy', callback_data='candy'),
    )
    bot.edit_message_text(message_id=call.message.message_id,
                          chat_id=call.message.chat.id,
                          text='Choose what you want to order',
                          reply_markup=markup)

Ответы (1 шт):

Автор решения: oleksandrigo

А если так?

bot.delete_message(message_id=call.message.message_id, chat_id=call.message.chat.id)
bot.clear_step_handler_by_chat_id(chat_id=call.message.chat.id)
markup = types.InlineKeyboardMarkup(row_width=3).add(
    types.InlineKeyboardButton('Cake', callback_data='cake'),
    types.InlineKeyboardButton('Bento-Cake', callback_data='bento_cake'),
    types.InlineKeyboardButton('Candy', callback_data='candy'))
bot.send_message(chat_id=call.message.chat.id,
                 text='Choose what you want to order',
                 reply_markup=markup)
→ Ссылка