Обработка сгенерированной CallbackData в aiogram
Имеется справочный телеграм бот. При нажатии кнопки "°/•Сложить скидки" он получает данные из БД и на их основе формирует инлайн клавиатуру, присваивая каждой кнопке название и CallbackData. Проблема в том что бот никак не реагирует на нажатия этой созданной клавиатуры. Код создания клавиатуры:
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from aiogram.utils.callback_data import CallbackData
from misc.db_comands import get_all_stocks
stocks_cd = CallbackData("show_stocks", "stocks_id")
def make_callback_data(stocks_id: int = 0):
return stocks_cd.new(stocks_id=stocks_id)
async def choosing_promotion_keyboards():
menu = InlineKeyboardMarkup()
stocks = await get_all_stocks()
for stock in stocks:
button_text = f"{stock.name_stock}"
callback_data = make_callback_data(stock.id)
menu.row(
InlineKeyboardButton(text=button_text, callback_data=callback_data)
)
return menu
Код обработчика:
from aiogram import types, Dispatcher
from aiogram.dispatcher.filters import CommandStart, Text
from keyboards.inline import choosing_promotion_keyboards, stocks_cd
from keyboards.reply import reply_markup
from misc.db_comands import get_stock
async def get_start(message: types.Message) -> None:
await message.answer(f"Привет {message.from_user.first_name}!",
reply_markup=reply_markup)
async def change_stocks(message: types.Message) -> None:
menu = await choosing_promotion_keyboards()
await message.answer("Выбери нужную акцию⬇️", reply_markup=menu)
async def show_promotion(callback: types.CallbackQuery, callback_data: dict) -> None:
stock_id = int(callback_data.get("stocks_id"))
stock = await get_stock(stock_id)
text = F"Вы выбрали {stock.name_stock}"
await callback.message.edit_text(text)
def register_hendlers(dp: Dispatcher):
dp.register_message_handler(get_start, CommandStart())
dp.register_message_handler(change_stocks, Text(equals="°/•Сложить скидки"))
dp.register_callback_query_handler(show_promotion, stocks_cd.filter())
Совершенно не понимаю где я делаю ошибку. Прошу помощи в этом вопросе.
Ответы (1 шт):
Автор решения: Павел Репин
→ Ссылка
Нашел решение. В функции запуска бота вместо
try:
await dp.start_polling(bot)
finally:
await bot.close()
поставил
try:
await dp.start_polling(bot)
finally:
await bot.session.close()