mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-14 02:52:12 +00:00
Added full support of Bot API 7.5 (#1518)
* Added full support of Bot API 7.5 * Added changelog * Update date type in RevenueWithdrawalStateSucceeded * Added example
This commit is contained in:
parent
dcfc9632f3
commit
1f7bbeb355
72 changed files with 1629 additions and 51 deletions
64
examples/stars_invoice.py
Normal file
64
examples/stars_invoice.py
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
import asyncio
|
||||
import logging
|
||||
from os import getenv
|
||||
|
||||
from aiogram import Bot, Dispatcher, F, Router
|
||||
from aiogram.filters import Command
|
||||
from aiogram.types import LabeledPrice, Message, PreCheckoutQuery
|
||||
|
||||
TOKEN = getenv("BOT_TOKEN")
|
||||
|
||||
GOODS = { # Fake storage for goods, in real life it should be a database
|
||||
"demo": 1,
|
||||
"another": 0,
|
||||
}
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
invoices_router = Router(name=__name__)
|
||||
|
||||
|
||||
@invoices_router.message(Command("start"))
|
||||
async def command_start(message: Message) -> None:
|
||||
# Send demo invoice to user, the payment will be refunded after successful payment
|
||||
await message.answer_invoice(
|
||||
title="Demo invoice",
|
||||
description="Demo invoice description",
|
||||
prices=[
|
||||
LabeledPrice(label="Demo", amount=42),
|
||||
],
|
||||
payload="demo",
|
||||
currency="XTR",
|
||||
)
|
||||
|
||||
|
||||
@invoices_router.pre_checkout_query(F.invoice_payload == "demo")
|
||||
async def pre_checkout_query(query: PreCheckoutQuery) -> None:
|
||||
# if your product is available for sale,
|
||||
# confirm that you are ready to accept payment
|
||||
if GOODS.get(query.invoice_payload) > 0:
|
||||
await query.answer(ok=True)
|
||||
else:
|
||||
await query.answer(ok=False, error_message="The product is out of stock")
|
||||
|
||||
|
||||
@invoices_router.message(F.successful_payment)
|
||||
async def successful_payment(message: Message, bot: Bot) -> None:
|
||||
await bot.refund_star_payment(
|
||||
user_id=message.from_user.id,
|
||||
telegram_payment_charge_id=message.successful_payment.telegram_payment_charge_id,
|
||||
)
|
||||
await message.answer("Thanks. Your payment has been refunded.")
|
||||
|
||||
|
||||
async def main() -> None:
|
||||
bot = Bot(token=TOKEN)
|
||||
|
||||
dispatcher = Dispatcher()
|
||||
dispatcher.include_router(invoices_router)
|
||||
|
||||
await dispatcher.start_polling(bot)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
asyncio.run(main())
|
||||
Loading…
Add table
Add a link
Reference in a new issue