From b32a7ac20b9c9775d21eebdf7a3460815cb2af1d Mon Sep 17 00:00:00 2001 From: Boris Kovalskii <36034823+JustYay@users.noreply.github.com> Date: Thu, 24 Jul 2025 13:22:45 +1000 Subject: [PATCH] Delete message about payment from Kassa AI Delete message about payment from Kassa AI after success payment, if the message is available --- handlers/payments/kassai.py | 22 +++++++++++++++++----- handlers/payments/wata.py | 4 ++-- web/kassai_payment.py | 25 +++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 7 deletions(-) diff --git a/handlers/payments/kassai.py b/handlers/payments/kassai.py index d54641da..4ddbca81 100644 --- a/handlers/payments/kassai.py +++ b/handlers/payments/kassai.py @@ -204,21 +204,27 @@ async def handle_custom_amount_input(message: types.Message, state: FSMContext): return await state.update_data(amount=amount) - payment_url = await generate_kassai_payment_link(amount, message.chat.id, method) + payment_url = await generate_kassai_payment_link(amount, callback_query.message.chat.id, method) confirm_keyboard = InlineKeyboardMarkup( inline_keyboard=[ [InlineKeyboardButton(text=PAY_2, url=payment_url)], - [InlineKeyboardButton(text=BACK, callback_data="pay_kassai")], + [InlineKeyboardButton(text=BACK, callback_data="balance")], ] ) - await edit_or_send_message( + payment_message = await edit_or_send_message( target_message=message, text=KASSAI_PAYMENT_MESSAGE.format(amount=amount), reply_markup=confirm_keyboard, force_text=True, ) + + # Сохраняем message_id для последующего удаления + await state.update_data( + payment_message_id=payment_message.message_id if hasattr(payment_message, 'message_id') else message.message_id, + payment_chat_id=message.chat.id + ) await state.set_state(ReplenishBalanceKassaiState.waiting_for_payment_confirmation) @@ -258,16 +264,22 @@ async def process_amount_selection(callback_query: types.CallbackQuery, state: F confirm_keyboard = InlineKeyboardMarkup( inline_keyboard=[ [InlineKeyboardButton(text=PAY_2, url=payment_url)], - [InlineKeyboardButton(text=BACK, callback_data="pay_kassai")], + [InlineKeyboardButton(text=BACK, callback_data="balance")], ] ) - await edit_or_send_message( + payment_message = await edit_or_send_message( target_message=callback_query.message, text=KASSAI_PAYMENT_MESSAGE.format(amount=amount), reply_markup=confirm_keyboard, force_text=True, ) + + # Сохраняем message_id для последующего удаления + await state.update_data( + payment_message_id=payment_message.message_id if hasattr(payment_message, 'message_id') else callback_query.message.message_id, + payment_chat_id=callback_query.message.chat.id + ) await state.set_state(ReplenishBalanceKassaiState.waiting_for_payment_confirmation) diff --git a/handlers/payments/wata.py b/handlers/payments/wata.py index bfedf043..e2478a81 100644 --- a/handlers/payments/wata.py +++ b/handlers/payments/wata.py @@ -194,7 +194,7 @@ async def handle_custom_amount_input(message: types.Message, state: FSMContext): confirm_keyboard = InlineKeyboardMarkup( inline_keyboard=[ [InlineKeyboardButton(text=PAY_2, url=payment_url)], - [InlineKeyboardButton(text=BACK, callback_data="pay_wata")], + [InlineKeyboardButton(text=BACK, callback_data="balance")], ] ) await edit_or_send_message( @@ -237,7 +237,7 @@ async def process_amount_selection(callback_query: types.CallbackQuery, state: F confirm_keyboard = InlineKeyboardMarkup( inline_keyboard=[ [InlineKeyboardButton(text=PAY_2, url=payment_url)], - [InlineKeyboardButton(text=BACK, callback_data="pay_wata")], + [InlineKeyboardButton(text=BACK, callback_data="balance")], ] ) await edit_or_send_message( diff --git a/web/kassai_payment.py b/web/kassai_payment.py index dd6cc603..eafbc09c 100644 --- a/web/kassai_payment.py +++ b/web/kassai_payment.py @@ -6,7 +6,9 @@ from handlers.payments.utils import send_payment_success_notification from handlers.payments.kassai import verify_kassai_signature from config import KASSAI_SECRET_KEY, KASSAI_SHOP_ID from logger import logger +import bot +# Хранилище обработанных платежей для предотвращения дублирования processed_payments = set() @@ -58,6 +60,29 @@ async def kassai_payment_webhook(request: web.Request): await send_payment_success_notification(tg_id, amount_float, session) await add_payment(session, tg_id, amount_float, "kassai") + # Попытка удалить сообщение с кнопкой оплаты + try: + from aiogram.fsm.context import FSMContext + from aiogram.fsm.storage.base import StorageKey + + # Получаем данные из FSM state пользователя + storage_key = StorageKey(bot_id=bot.bot.id, chat_id=tg_id, user_id=tg_id) + state_data = await bot.dp.storage.get_data(storage_key) + + if state_data and 'payment_message_id' in state_data: + payment_message_id = state_data['payment_message_id'] + try: + await bot.bot.delete_message(chat_id=tg_id, message_id=payment_message_id) + logger.info(f"Payment message deleted for user {tg_id}") + except Exception as e: + logger.warning(f"Could not delete payment message for user {tg_id}: {e}") + + # Очищаем state после успешной оплаты + await bot.dp.storage.set_state(storage_key, None) + await bot.dp.storage.set_data(storage_key, {}) + except Exception as e: + logger.warning(f"Error handling payment message deletion: {e}") + if merchant_order_id: processed_payments.add(merchant_order_id)