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}")
  • Вопрос задан
  • 337 просмотров
Решения вопроса 1
NickITDir
@NickITDir Автор вопроса
Начинающий разработчик
Разобрался...
Перенес код обоих обработчиков сразу после создания клавиатуры....
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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