Задать вопрос
@RaymanPy

Не обрабатывается CallbackQuery запрос?

Не обрабатывается CallbackQuery.

handlers.py
@dp.callback_query_handler(Text(startswith="delete_"))
async def delete_vin(query: types.CallbackQuery):
    print("DATA:: " + query.data)
    vin_num = query.data.split('_')[1]

    session = Session()
    vin = session.query(Vin).filter(Vin.vin_number == vin_num).first()

    if vin:
        for i in range(1, 6):
            filename = f"photos/{vin.vin_number}-{i}.jpg"
            if os.path.exists(filename):
                os.remove(filename)

        session.delete(vin)
        session.commit()
    else:
        await query.message.answer(VIN_NOT_FOUND)

    session.close()

    await query.message.edit_text(VIN_DEL_SUCCESS)
    await query.answer()


@dp.callback_query_handler(Text(startswith="block_"))
async def block_user(query: types.CallbackQuery):
    print("DATA::" + query.data)
    vin_num = query.data.split('_')[1]
    session = Session()
    vin = session.query(Vin).filter(Vin.vin_number == vin_num).first()
    if vin:
        user = session.query(User).filter(vin.creator_id == User.tg_id).first()
        if user:
            user.blocked = True
            session.commit()
        else:
            await query.message.answer(USER_NOT_FOUND)
    else:
        await query.message.answer(VIN_NOT_FOUND)

    session.close()
    await query.message.edit_text(USER_DEL_SUCCES)
    await query.answer()


keyboards.py
from aiogram import types


def get_vin_keyboard(vin):
    buttons = [
        types.InlineKeyboardButton(text="Удалить VIN", callback_data="delete_"+vin.vin_number),
        types.InlineKeyboardButton(text="Заблокировать пользователя", callback_data="block_"+vin.vin_number),
    ]
    keyboard = types.InlineKeyboardMarkup(row_width=1)
    keyboard.add(*buttons)
    return keyboard


error:
INFO:aiogram.contrib.middlewares.logging:Process update [ID:896669958]: [success] (in 178 ms)
INFO:aiogram.contrib.middlewares.logging:Received callback query [ID:1829996991623792879] from user [ID:426079377] for message [ID:195] in chat [private:426079377] with data: block_123 originally posted by user [ID:5467227336]
INFO:aiogram.contrib.middlewares.logging:Unhandled callback query [ID:1829996991623792879] from user [ID:426079377] for message [ID:195] in chat [private:426079377] with data: block_123 originally posted by user [ID:5467227336]
INFO:aiogram.contrib.middlewares.logging:Process update [ID:896669959]: [success] (in 1 ms)


если перезапустить бота и снова нажать на старую кнопку, она заработает.
  • Вопрос задан
  • 192 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Mootfrost
C#, C++, JS, Python
Вот так callback_query_handler выглядеть должен:
@dp.callback_query_handler(lambda c: c.data.startswith('delete_'))

Если явно надо:
@dp.callback_query_handler(lambda c: c.data == 'delete_йцукенгшщз')
Ответ написан
@datareset
развиваюсь.
Попробуйте text_contains
Ответ написан
@xKRABx
У меня было нечто схожее.
Может кому поможет мой ответ.
Я настраивал вебхуки и мой бот (aiogram3.20) просто не получал callback_query.
Проблема была в том, как я настроил вебхук, а именно, какие я указал типы данных, которые может отправлять тг:
async def _set_webhook(bot_instance: Bot) -> None:
    """
    Функция для инициализации webhook'а боту.

    :param bot_instance: Текущий бот
    """
    try:
        await bot_instance.set_webhook(
            f'{WEBHOOK_URL}{WEBHOOK_PATH}',
            allowed_updates=["message", "callback_query"] # Очень важно, чтобы тг мог отправлять callback_query
        )
        logging.info(f'Установлен путь для вебхука: {WEBHOOK_URL}{WEBHOOK_PATH}')
    except Exception as e:
        logging.error(f'Произошла ошибка при установке вебхука:\n{e}')


Здесь, параметр allowed_updates, по всей видимости, поддерживал только "message".
Так что от тг не приходило даже HTTP запросов и в консоли было пусто.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы