Как записать текст в список или .txt после нажатия InlineButton

Как сделать, чтобы при нажатии кнопки записать текст из кнопки в .txt или лист и в конце результат отправить в закрытый чат.

@bot.callback_query_handler(func=lambda call: True)
def main_menu(call):
    global mes
    mes = []
    if call.data == 'bento_cake':
        markup = types.InlineKeyboardMarkup(row_width=4)
        banana_button = types.InlineKeyboardButton("Banana", callback_data='banana')
        cherry_button = types.InlineKeyboardButton("Cherry", callback_data='cherry')
        snickers_button = types.InlineKeyboardButton("Snickers", callback_data='snickers')
        strawberries_button = types.InlineKeyboardButton("Strawberries", callback_data='strawberries')
        main_button = types.InlineKeyboardButton("?Main menu", callback_data='menu')
        markup.add(banana_button, cherry_button, snickers_button, strawberries_button, main_button)
        bot.edit_message_text(message_id=call.message.message_id, chat_id=call.from_user.id, text='Taste',
                                    reply_markup=markup)
    elif call.data == 'banana':
        t = 'Benta-Cake'
        mes.append(t)
        k = 'Banana'
        mes.append(k)
        markup = types.InlineKeyboardMarkup(row_width=2)
        yes = types.InlineKeyboardButton("True", callback_data='true')
        no = types.InlineKeyboardButton("No", callback_data='no')
        markup.add(yes, no)
        bot.edit_message_text(message_id=call.message.message_id, chat_id=call.from_user.id, text='Photo?',
                              reply_markup=markup)
    elif call.data == 'true':
        msg=bot.edit_message_text(message_id=call.message.message_id, chat_id=call.from_user.id, text='Please photo')
        bot.register_next_step_handler(msg, photo)


def photo(message):
    try:
        photo1 = max(message.photo, key=lambda x: x.height)
        bot.send_photo(chat_id='MY_CHAT', photo=photo1.file_id)
        bot.send_message(message.chat.id, 'Photo yes')
        #bot.send_message(chat_id='MY_CHAT', mes)
    except TypeError:
        bot.send_message(message.chat.id, 'Photo no')

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

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

Пробуй

@bot.message_handler(commands=['start'])
def start(message: types.Message):
    markup = InlineKeyboardMarkup().add(InlineKeyboardButton("add bento cake", callback_data="bento_cake"))
    bot.send_message(message.chat.id, "push but!", reply_markup=markup)


# делайем колбек хендлера такого вида всегда! Забудь про func=lambda call: True
@bot.callback_query_handler(func=lambda call: call.data == "bento_cake")
def bento_cake_call(call: types.CallbackQuery):
    # более компактный вид маркапа
    markup = InlineKeyboardMarkup(row_width=4).add(
        # я сделал колбек дату такой котороую можно удобно отлавливать по префиксу type_cake
        InlineKeyboardButton("Banana", callback_data='type_cake:Banana'),
        InlineKeyboardButton("Cherry", callback_data='type_cake:Cherry'),
        InlineKeyboardButton("Snickers", callback_data='type_cake:Snickers'),
        InlineKeyboardButton("Strawberries", callback_data='type_cake:Strawberries'),
        InlineKeyboardButton("?Main menu", callback_data='type_cake:menu')
    )
    bot.edit_message_text(message_id=call.message.message_id,
                          chat_id=call.message.chat.id,
                          text='Choose with what',
                          reply_markup=markup)


# ловим только те которые нам нужно
@bot.callback_query_handler(func=lambda call: call.data.startswith("type_cake:"))
def choise_type_cake(call: types.CallbackQuery):
    # получаем нажатую кнопку
    result = call.data.split(":")[1]
    # хз что за меню ты хочешь сделать
    if result == "menu":
        ...
        return

    markup = InlineKeyboardMarkup().add(
        # забрасываем в дату еще и нажатую кнопку на текущем этапе
        InlineKeyboardButton("Yes", callback_data=f'accept_cake:true:{result}'),
        InlineKeyboardButton("No", callback_data=f'accept_cake:no:{result}')
    )
    bot.edit_message_text(message_id=call.message.message_id,
                          chat_id=call.message.chat.id,
                          text='Photo?',
                          reply_markup=markup)


@bot.callback_query_handler(func=lambda call: call.data.startswith("accept_cake:"))
def accept_cake_call(call: types.CallbackQuery):
    data = call.data.split(":")
    if data[1] == "true":
        # если true то требуем фотку
        bot.edit_message_text(message_id=call.message.message_id,
                              chat_id=call.from_user.id,
                              text='Send here photo')
        # а вот сюда 3 аргументом кидаем нажатую кнопку на предыдущем этапе (Banana, Cherry...)
        bot.register_next_step_handler(call.message, take_photo, data[2])
    else:
        # если не тру то просто отправляем текст куда-то там
        bot.send_message(chat_id='...', text=f"{data[2]}")


# делай функцию которая ловит месседж, вторым аргументом имеем data[2]
def take_photo(message: types.Message, type_cake: str):
    if message.photo:
        # если фото получили то отправляем куда-то там, с припиской (Banana, Cherry...)
        bot.send_photo(chat_id='...', photo=message.photo[-1].file_id, caption=f"{type_cake}")
    else:
        # если юзер прислал не фото, заставляем его сделать это снова!
        bot.send_message(message.chat.id, "ONLY PHOTO\nTry again")
        bot.register_next_step_handler(message, take_photo, type_cake)
→ Ссылка