Почему может не работать inline button telegram?
Пишу бота для telegram. Решил в качестве кнопок использовать inline. Callback написал, но кнопка почему то все еще не работает, что может быть не так в коде. БОТ ПИШЕТСЯ ИСКЛЮЧИТЕЛЬНО В УЧЕБНЫХ ЦЕЛЯХ.
class OrderTshirt(StatesGroup):
waiting_for_tshirt_name = State()
waiting_for_tshirt_size = State()
async def tshirt_start(message: types.Message):
# keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
keyboard = types.InlineKeyboardMarkup()
for name in available_tshirt_names:
keyboard.add(types.InlineKeyboardButton(text=name, callback_data=name))
await message.answer("Выберите футболку:", reply_markup=keyboard)
await OrderTshirt.waiting_for_tshirt_name.set()
async def tshirt_chosen(message: types.Message, state: FSMContext):
if message.text.lower() not in available_tshirt_names:
await message.answer("Пожалуйста, выберите футболку, используя клавиатуру ниже.")
return
await state.update_data(chosen_tshirt=message.text.lower())
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
for tshirt in available_tshirt_sizes:
keyboard.add(tshirt)
await OrderTshirt.next()
await message.answer("Теперь выберите размер:", reply_markup=keyboard)
async def tshirt_size_chosen(message: types.Message, state: FSMContext):
if message.text not in available_tshirt_sizes:
await message.answer("Пожалуйста, выберите размер, используя клавиатуру ниже.")
return
user_data = await state.get_data()
await message.answer(f"Вы заказали {message.text.lower()} футболку {user_data['chosen_tshirt']}.\n"
f"Попробуйте теперь заказать напитки: /drinks", reply_markup=types.ReplyKeyboardRemove())
await state.finish()
def register_handlers_tshirt(dp: Dispatcher):
dp.register_message_handler(tshirt_start, commands="tshirt", state="*")
dp.register_message_handler(tshirt_chosen, state=OrderTshirt.waiting_for_tshirt_name)
dp.register_message_handler(tshirt_size_chosen, state=OrderTshirt.waiting_for_tshirt_size)
def register_callback_tshirt(dp: Dispatcher):
for i in available_tshirt_names:
dp.callback_query_handler(text=i)
for i in available_tshirt_sizes:
dp.callback_query_handler(text=i)
Ответы (1 шт):
Автор решения: oleksandrigo
→ Ссылка
Потому что как минимум не callback_query_handler, а register_callback_query_handler. И более того вы даже название функции которая обрабатывает этот колбек не вписали.
Хотя честно говоря способ вы выбрали конечно тот ещё. Ведь можно и проще сделать.
# функция обработчик кнопки
@dp.callback_query_handler(text_startswith="names_tshirt:")
async def tshirt_call(call: types.CallbackQuery):
name_tshirt = call.data.split(":")[1]
...
async def tshirt_start(message: types.Message):
# keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
keyboard = types.InlineKeyboardMarkup()
for name in available_tshirt_names:
keyboard.add(types.InlineKeyboardButton(
text=name,
callback_data=f"names_tshirt:{name}"))
await message.answer("Выберите футболку:", reply_markup=keyboard)
await OrderTshirt.waiting_for_tshirt_name.set()