This commit is contained in:
2026-02-13 03:09:19 +05:00
commit 2204b615bc
13 changed files with 620 additions and 0 deletions

24
bot/handlers/__init__.py Normal file
View File

@@ -0,0 +1,24 @@
from aiogram import Router, types
from aiogram.filters import CommandStart
from bot.handlers import payments
from bot.handlers.payments import send_donation_invoice
router = Router()
router.include_router(payments.router)
@router.message(CommandStart())
async def cmd_start(message: types.Message):
await message.answer(f"""Привет, {message.from_user.full_name}!
⭐ Поддержать проект
Если вам нравится проект и вы хотите помочь его развитию, вы можете отправить звёзды в качестве добровольной поддержки.
Пожертвования помогают покрывать:
— еду автору
— аренду серверов
— развитие и улучшение проекта
Поддержка полностью добровольная и не является обязательным условием получения доступа.""")
# Отправляем кнопку оплаты (инвойс) сразу после текста
await send_donation_invoice(message)

46
bot/handlers/payments.py Normal file
View File

@@ -0,0 +1,46 @@
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"Спасибо за пожертвование!"
)