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

Почему не работает inline-кнопка?

Код клавиатуры:
def chek_kb(isUrl=True, url="", bill=""):
    payMenu = InlineKeyboardMarkup(row_width=2)
    if isUrl:
        btnUrlQiwi = InlineKeyboardButton("Оплатить", url = url)
        payMenu.add(btnUrlQiwi)
    chek_pay = InlineKeyboardButton("Проверить оплату", callback_data="chek_"+bill)
    quit = InlineKeyboardButton("Выйти", callback_data="quit")
    payMenu.insert(chek_pay).add(quit)
    return payMenu

Код вызова клавиатуры и хэндлеры к ней:
await bot.send_message(callback.from_user.id, f"Ваша ссылка на оплату:\n{chek.pay_url}\
        \nСрок действия ссылки: <b>30 минут.</b>", reply_markup=chek_kb(url=chek.pay_url, bill=chek.bill_id))

# Выход и отмена оплаты
@dp.callback_query_handler(text="quit")
async def quit(callback: types.CallbackQuery, state: FSMContext):
    await bot.delete_message(callback.from_user.id, callback.message.message_id)
    # async with state.proxy() as data:
    #     videos = data["videos"]
    # for video in videos:
    #     path = f'{os.path.dirname(os.path.abspath(__name__))}/app_video/{video}'.replace("\\", "/")
    #     os.remove(path)
    # await state.finish()

# Проверка статуса платежа
@dp.callback_query_handler(text_contains="chek_", state=[BillStorage, VideoStorage])
async def chek_pay(callback: types.CallbackQuery, state: FSMContext):
    async with state.proxy() as data:
        bill = data["bill"]
    chek = chek_bill(bill.bill_id)
    if chek == "PAID":
        async with state.proxy() as data:
            videos = data["videos"]
        await bot.delete_message(callback.from_user.id, callback.message.message_id)
        await bot.send_message(callback.from_user.id, "Видео оплачено!\nНачинаю обработку...\nКак будет готово, я пришлю видео ответным сообщением")
        name = randint(1, 5000)
        path = f'{os.path.dirname(os.path.abspath(__name__))}/app_video/{name}.mp4'.replace("\\", "/")
        await sql_add_video(name, path, callback.from_user.id)
        await state.finish()
        await get_read_video(videos, name)
        await main()
    else:
        await bot.delete_message(callback.from_user.id, callback.message.message_id)
        await bot.send_message(callback.from_user.id, f"Видео не оплачено!\nВаша ссылка на оплату:\n{bill.pay_url}", reply_markup=chek_kb(False, bill=bill.bill_id))

Проверка статуса платежа отрабатывает корректно url тоже, не отрабатывает только кнопка quit и я не могу понять почему, ошибок никаких не приходит, просто часики появляются, а потом пропадают, проверка статуса платежа отрабатывает корректно даже после нажатия на кнопку "Выйти", то есть она вообще не ломает бота, он ее как-будто просто не видит
  • Вопрос задан
  • 60 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@kkid404 Автор вопроса
Проблема была в стэйтах, заменил значений на *
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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