invoices, order handling, db updates
This commit is contained in:
71
handlers/admins/inline_mode.py
Normal file
71
handlers/admins/inline_mode.py
Normal file
@@ -0,0 +1,71 @@
|
||||
import logging
|
||||
|
||||
from aiogram import Router, F
|
||||
from aiogram.types import (
|
||||
ChosenInlineResult,
|
||||
InlineQuery,
|
||||
InlineQueryResultArticle,
|
||||
InputTextMessageContent,
|
||||
)
|
||||
from aiogram.utils.deep_linking import create_start_link
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from misc.filters import IsVerified
|
||||
from misc.kb.admins import payment_link, placeholder_kb
|
||||
from misc.utils import b64_to_dict, dict_to_b64
|
||||
from repositories.invoices import InvoiceRepository
|
||||
|
||||
router = Router()
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@router.inline_query(IsVerified(), F.query.cast(int).as_("amount"))
|
||||
async def send_invoice(iq: InlineQuery, amount: int):
|
||||
results = [
|
||||
InlineQueryResultArticle(
|
||||
id=dict_to_b64({"a": amount}),
|
||||
title=f"💸 Счёт на {amount}₽",
|
||||
input_message_content=InputTextMessageContent(
|
||||
message_text="⏳ Создаю счёт..."
|
||||
),
|
||||
reply_markup=placeholder_kb,
|
||||
description="Нажмите, чтобы создать счёт.",
|
||||
),
|
||||
]
|
||||
await iq.answer(results, is_personal=True)
|
||||
|
||||
|
||||
@router.chosen_inline_result()
|
||||
async def chosen_inline(
|
||||
ev: ChosenInlineResult, session: AsyncSession, invoice_repo: InvoiceRepository
|
||||
):
|
||||
data = b64_to_dict(ev.result_id)
|
||||
amount = data.get("a")
|
||||
if not amount:
|
||||
await ev.bot.edit_message_text(
|
||||
inline_message_id=ev.inline_message_id, text="🍃 Что-то пошло не так..."
|
||||
)
|
||||
logger.critical("amount is null during the invoice creation.")
|
||||
return
|
||||
|
||||
try:
|
||||
amount = int(amount)
|
||||
except Exception as e:
|
||||
await ev.bot.edit_message_text(
|
||||
inline_message_id=ev.inline_message_id, text="🍃 Что-то пошло не так..."
|
||||
)
|
||||
logger.exception(e)
|
||||
return
|
||||
|
||||
invoice = await invoice_repo.create_invoice(
|
||||
session,
|
||||
amount=amount,
|
||||
creator_id=ev.from_user.id,
|
||||
inline_message_id=ev.inline_message_id,
|
||||
)
|
||||
invoice_link = await create_start_link(ev.bot, f"invoice:{invoice.id}", encode=True)
|
||||
await ev.bot.edit_message_text(
|
||||
inline_message_id=ev.inline_message_id,
|
||||
text=f"<b>💸 Счёт на {amount}₽.</b>",
|
||||
reply_markup=payment_link(invoice_link),
|
||||
)
|
||||
Reference in New Issue
Block a user