Как записать текст в список или .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)