Пишу телеграмм бота
в нем есть кнопка на клавиатуре Оплата услуг при ее нажатии выходят все счета что надо оплатить
в дальнейшем по нажатию этой кнопки будет возможность оплатить счет, но сейчас хотя бы выдать сообщение и изменить статус в базе данных .
но обработчик почему кнопки оплатить почему то вообще не срабатывает, кто может подсказать в чем ошибка
@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}")