Записывается другой message.text в telebot
Я пытаюсь дать пользователю выбрать, сколько штук товара, он хочет сохранить в корзину, я это делаю с помощью message.text, но записывается другой message.text
@bot.callback_query_handler(func=lambda call: call.data=='101' or call.data=='102' or call.data=='103' or call.data=='104' or call.data=='105' or call.data=='106' or call.data=='107' or call.data=='108' or call.data=='109' or call.data=='110' or call.data=='111' or call.data=='112' or call.data=='113' or call.data=='114' or call.data=='115')
def code_101(call: types.CallbackQuery):
users[call.message.chat.id]['interested']=call.data
codes_markup = types.InlineKeyboardMarkup(row_width=2)
codes_markup.add(types.InlineKeyboardButton('Добавить в корзину 1 шт.', callback_data='add_to_basket'),
types.InlineKeyboardButton('Добавить другое кол-во шт.', callback_data='add_to_basket_more'),
types.InlineKeyboardButton('Назад', callback_data='back_to_hotspot'),
)
bot.send_message(call.message.chat.id, text=f'Вкус:*{items[call.data][1]}*\n Цена:*{items[call.data][0]}*',
reply_markup=codes_markup, parse_mode="Markdown") #ЗАПИСЫВАЕТ ЗДЕСЬ ТЕКСТ, КОТОРЫЙ ОТПРАВЛЯЕТ БОТ.
@bot.callback_query_handler(func=lambda call: call.data =='add_to_basket_more')
def add_to_basket_more_handler(call: types.CallbackQuery):
bot.send_message(call.message.chat.id, text='*Напишите число единиц, которое требуется:*', parse_mode="Markdown")
things_int=call.message.text #ДОЛЖНО ЗАПИСЫВАТЬ ЗДЕСЬ КОЛ-ВО ШТУК
print(users)
try:
abc = users[call.message.chat.id]['basket']
if users[call.message.chat.id]['interested'] in abc:
abc[users[call.message.chat.id]['interested']]+= things_int
else:
abc[users[call.message.chat.id]['interested']] = things_int
except:
bot.send_message(call.message.chat.id, text='Похоже, вы ввели неверное число, попробуйте еще раз!',
parse_mode="Markdown")
add_to_basket_more_handler(call)
print(users)
Ответы (1 шт):
Автор решения: oleksandrigo
→ Ссылка
Вот так.
@bot.callback_query_handler(func=lambda call: call.data == 'add_to_basket_more')
def add_to_basket_more_handler(call: types.CallbackQuery):
bot.send_message(call.message.chat.id, text='*Напишите число единиц, которое требуется:*', parse_mode="Markdown")
bot.register_next_step_handler(call.message, input_value)
def input_value(message: types.Message):
if message.text.isdigit():
bot.send_message(message.chat.id, text=f'Вы ввели {message.text}')
else:
bot.send_message(message.chat.id, text=f'Вы ввели не число')
bot.register_next_step_handler(message, input_value)
PS.
И не делайте так.
@bot.callback_query_handler(func=lambda call: call.data=='101' or call.data=='102' or call.data=='103' or call.data=='104' or call.data=='105' or call.data=='106' or call.data=='107' or call.data=='108' or call.data=='109' or call.data=='110' or call.data=='111' or call.data=='112' or call.data=='113' or call.data=='114' or call.data=='115')
Лучше так.
@bot.callback_query_handler(func=lambda call: call.data in map(str, range(101, 115+1))