NickITDir
@NickITDir
Начинающий разработчик

Почему не срабатывает кнопка Оплатить?

Пишу телеграмм бота
в нем есть кнопка на клавиатуре Оплата услуг при ее нажатии выходят все счета что надо оплатить
в дальнейшем по нажатию этой кнопки будет возможность оплатить счет, но сейчас хотя бы выдать сообщение и изменить статус в базе данных .
но обработчик почему кнопки оплатить почему то вообще не срабатывает, кто может подсказать в чем ошибка

@bot.message_handler(func=lambda message: message.text == "Оплата услуг")
def handle_utility_payment(message):
    chat_id = message.chat.id
    user = CustomUser.objects.filter(telegram_id=chat_id).first()

    if user:
        utility_receipts = UtilityReceipt.objects.filter(apartment_number=user.apartment_number)

        if utility_receipts.exists():
            for receipt in utility_receipts:
                if receipt.status == 'UNPAID':
                    markup = telebot.types.InlineKeyboardMarkup()
                    pay_button = telebot.types.InlineKeyboardButton("Оплатить", callback_data=f"pay_receipt_{receipt.id}")
                    markup.add(pay_button)
                    bot.send_message(chat_id, f"Услуга: {receipt.service}\nСумма: {receipt.amount}\nДата платежа: {receipt.date}", reply_markup=markup)
        else:
            bot.send_message(chat_id, "У вас нет квитанций на оплату.")
    else:
        bot.send_message(chat_id, "Вы не зарегистрированы. Пожалуйста, введите /start для начала регистрации.")

# Обработчик кнопки "Оплатить"
@bot.callback_query_handler(func=lambda call: call.data.startswith('pay_receipt_'))
def handle_payment_callback(call):
    try:
        receipt_id = call.data.split('_')[-1]
        receipt = UtilityReceipt.objects.filter(id=receipt_id).first()

        if receipt:
            receipt.status = 'PAID'
            receipt.save()
            bot.send_message(call.message.chat.id, "Спасибо! Ваш платеж успешно обработан.")
        else:
            bot.send_message(call.message.chat.id, "Квитанция не найдена.")
    except Exception as e:
        bot.send_message(call.message.chat.id, f"Произошла ошибка при обработке платежа: {e}")
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
NickITDir
@NickITDir Автор вопроса
Начинающий разработчик
Разобрался...
Перенес код обоих обработчиков сразу после создания клавиатуры....
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы