47 lines
1.8 KiB
Python
47 lines
1.8 KiB
Python
from aiogram import Router, F, types
|
|
from aiogram.filters import Command
|
|
from aiogram.types import LabeledPrice, PreCheckoutQuery, CallbackQuery
|
|
|
|
router = Router()
|
|
|
|
# Функция отправки инвойса (чтобы не дублировать код)
|
|
async def send_donation_invoice(message: types.Message):
|
|
await message.answer_invoice(
|
|
title="Пожертвование",
|
|
description="пожертвовать на развитие",
|
|
payload="donation_payload",
|
|
provider_token="",
|
|
currency="XTR",
|
|
prices=[LabeledPrice(label="Пожертвование", amount=10)],
|
|
start_parameter="donation",
|
|
allow_paid_broadcast=False,
|
|
)
|
|
|
|
@router.message(Command("pay"))
|
|
async def cmd_pay(message: types.Message):
|
|
await send_donation_invoice(message)
|
|
|
|
@router.callback_query(F.data == "donate_10_stars")
|
|
async def on_donate_click(callback: CallbackQuery):
|
|
await send_donation_invoice(callback.message)
|
|
await callback.answer()
|
|
|
|
# Обработчик pre_checkout_query (проверка перед оплатой)
|
|
|
|
# Обработчик pre_checkout_query (проверка перед оплатой)
|
|
@router.pre_checkout_query()
|
|
async def pre_checkout_handler(pre_checkout_query: PreCheckoutQuery):
|
|
await pre_checkout_query.answer(ok=True)
|
|
|
|
# Обработчик успешной оплаты
|
|
@router.message(F.successful_payment)
|
|
async def success_payment_handler(message: types.Message):
|
|
payment_info = message.successful_payment
|
|
# Здесь можно добавить логику начисления дней подписки в БД
|
|
|
|
await message.answer(
|
|
f"✅ Оплата прошла успешно!\n"
|
|
f"Сумма: {payment_info.total_amount} {payment_info.currency}\n"
|
|
f"Спасибо за пожертвование!"
|
|
)
|