Как сделать так, что бы call.data менялась после каждой новой inline-клавиатуры
помогите сделать так, чтобы call.data принимала новое значение при каждом вызове inline-клавиатуры:
import telebot
from keyboa import keyboa_maker
bot = telebot.TeleBot('токен')
answers1 = ['Домашнюю']
answers2 = ['Алгебра', 'Геометрия']
answers3 = ['На завтра', 'На после завтра']
answers4 = ['1', '2']
kb_1 = keyboa_maker(items=answers1, copy_text_to_callback=True)
kb_2 = keyboa_maker(items=answers2, copy_text_to_callback=True)
kb_3 = keyboa_maker(items=answers3, copy_text_to_callback=True)
kb_4 = keyboa_maker(items=answers4, copy_text_to_callback=True)
@bot.message_handler(commands=['start'])
def start_message(message):
bot.send_message(message.chat.id,
'Привет, это Бот-песочница Глеба, можешь по пользоваться, скоро будем тут тестировать технологии')
bot.send_message(
chat_id=message.chat.id, reply_markup=kb_1,
text="Что хотим узнать???")
@bot.callback_query_handler(func=lambda call: True)
def send_text(call):
if call.data == 'Домашнюю':
bot.send_message(chat_id=call.message.chat.id, reply_markup=kb_4, text="Какая подгруппа?")
if call.data == '1':
bot.send_message(chat_id=call.message.chat.id, reply_markup=kb_2, text="По какому предмету?")
if call.data == 'Алгебра':
bot.send_message(chat_id=call.message.chat.id, reply_markup=kb_3, text="На какой день?")
if call.data == 'Геометрия':
bot.send_message(chat_id=call.message.chat.id, reply_markup=kb_3, text="На какой день?")
if call.data == 'На завтра':
bot.send_message(chat_id=call.message.chat.id, text="Первая подгруппа дз по геометрии на завтра")
elif call.data == 'На после завтра':
bot.send_message(chat_id=call.message.chat.id, text="Первая подгруппа дз по геометрии на после завтра")
if call.data == 'На завтра':
bot.send_message(chat_id=call.message.chat.id, text="Первая подгруппа дз по алгебре на завтра")
elif call.data == 'На после завтра':
bot.send_message(chat_id=call.message.chat.id, text="Первая подгруппа дз по алгебре на после завтра")
if call.data == '2':
bot.send_message(chat_id=call.message.chat.id, reply_markup=kb_2, text="По какому предмету?")
Ответы (1 шт):
Автор решения: Іван Шнір
→ Ссылка
Первое замечание, нельзя так делать:
@bot.callback_query_handler(func=lambda call: True)
def send_text(call):
if call.data == 'Домашнюю':
print(call.data) # PRINT ПОКАЗЫВАЕТ, ЧТО В CALL.DATA ЛЕЖИТ
bot.send_message(chat_id=call.message.chat.id, reply_markup=kb_4, text="Какая подгруппа?")
print(call.data) # И ПОСЛЕ ВЫЗОВА ВТОРОЙ КЛАВИАТУРЫ PRINT ПОКАЗЫВАЕТ, ЧТО В CALL.DATA ЛЕЖИТ 'Домашнюю'
if call.data == '1':
.
.
.
Лучше замените на это:
@bot.callback_query_handler(func=lambda call: True)
def send_text(call):
if call.data == 'Домашнюю':
print(call.data) # PRINT ПОКАЗЫВАЕТ, ЧТО В CALL.DATA ЛЕЖИТ
bot.send_message(chat_id=call.message.chat.id, reply_markup=kb_4, text="Какая подгруппа?")
print(call.data) # И ПОСЛЕ ВЫЗОВА ВТОРОЙ КЛАВИАТУРЫ PRINT ПОКАЗЫВАЕТ, ЧТО В CALL.DATA ЛЕЖИТ 'Домашнюю'
if call.data == '1':
.
.
.
(Если не заметили, то говорю что if в другой if нельзя засовывать, если логично подумать то второй if никогда не сработает)
Вот сам исправлений код:
#coding: cp1251
import telebot
from keyboa import keyboa_maker
bot = telebot.TeleBot('1575682797:AAHU1D3mn8iDd8z1JC_3dTa1SVcwMo-lwkc')
answers1 = ['Домашнюю']
answers2 = ['Алгебра', 'Геометрия']
answers3 = ['На завтра', 'На после завтра']
answers4 = ['1', '2']
kb_1 = keyboa_maker(items=answers1, copy_text_to_callback=True)
kb_2 = keyboa_maker(items=answers2, copy_text_to_callback=True)
kb_3 = keyboa_maker(items=answers3, copy_text_to_callback=True)
kb_4 = keyboa_maker(items=answers4, copy_text_to_callback=True)
@bot.message_handler(commands=['start'])
def start_message(message):
bot.send_message(message.chat.id,
'Привет, это Бот-песочница Глеба, можешь по пользоваться, скоро будем тут тестировать технологии')
bot.send_message(
chat_id=message.chat.id, reply_markup=kb_1,
text="Что хотим узнать???")
@bot.callback_query_handler(func=lambda call: True)
def send_text(call):
if call.data == 'Домашнюю':
print(call.data) # PRINT ПОКАЗЫВАЕТ, ЧТО В CALL.DATA ЛЕЖИТ
bot.send_message(chat_id=call.message.chat.id, reply_markup=kb_4, text="Какая подгруппа?")
print(call.data) # И ПОСЛЕ ВЫЗОВА ВТОРОЙ КЛАВИАТУРЫ PRINT ПОКАЗЫВАЕТ, ЧТО В CALL.DATA ЛЕЖИТ 'Домашнюю'
if call.data == '1':
bot.send_message(chat_id=call.message.chat.id, reply_markup=kb_2, text="По какому предмету?")
if call.data == 'Алгебра':
bot.send_message(chat_id=call.message.chat.id, reply_markup=kb_3, text="На какой день?")
if call.data == 'На завтра':
print("Первая подгруппа дз по алгебре на завтра")
if call.data == 'На после завтра':
print("Первая подгруппа дз по алгебре на после завтра")
if call.data == 'Геометрия':
bot.send_message(chat_id=call.message.chat.id, reply_markup=kb_3, text="На какой день?")
if call.data == '2':
bot.send_message(chat_id=call.message.chat.id, reply_markup=kb_2, text="По какому предмету?")
bot.polling(none_stop=True, interval=0)