- Removed unused prehandling, referrals, support, and states files. - Updated admin and client handlers to improve structure and functionality. - Introduced admin filters and routers for better access control. - Added new billing and deposit functionalities for client interactions. - Enhanced keyboard layouts for admin and client menus. - Implemented promotion handling for admin users. - Updated configuration to include admin settings. - Improved utility functions for quote fetching and menu text building. - Added common handlers for undefined commands and message deletions.
52 lines
2.0 KiB
Python
52 lines
2.0 KiB
Python
from aiogram import F, Router
|
|
from aiogram.fsm.context import FSMContext
|
|
from aiogram.types import CallbackQuery, Message
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from schemas.di import DependenciesDTO
|
|
from schemas.promotions import NewPromotionContext
|
|
from bot.texts import ADM_PROMO_INIT, CALLBACK_FALLBACK, GENERAL_PROCESSING, ADM_VERIFY_PROMOTION, SUCCESSFULLY_SENT_PROMO
|
|
from bot.keyboards.common import return_to_menu
|
|
from bot.keyboards.admins import action_confirmation
|
|
from bot.states.admins import AdminStorage
|
|
|
|
router = Router()
|
|
|
|
@router.callback_query(F.data == "promotion")
|
|
async def promo_init(cb: CallbackQuery, state: FSMContext):
|
|
await state.clear()
|
|
|
|
await cb.message.edit_text(ADM_PROMO_INIT, reply_markup=return_to_menu)
|
|
|
|
ctx = NewPromotionContext(cb.message)
|
|
await state.set_state(AdminStorage.promotion_msg)
|
|
await state.set_data({"ctx": ctx})
|
|
|
|
@router.message(AdminStorage.promotion_msg)
|
|
async def promo_text(msg: Message, state: FSMContext):
|
|
data = await state.get_data()
|
|
await state.clear()
|
|
|
|
edited_msg = await msg.answer(GENERAL_PROCESSING)
|
|
ctx: NewPromotionContext | None = data.get("ctx")
|
|
if ctx:
|
|
await ctx.msg.delete()
|
|
|
|
ctx.promotion = msg
|
|
await edited_msg.edit_text(ADM_VERIFY_PROMOTION, reply_markup=action_confirmation)
|
|
|
|
await state.set_state(AdminStorage.promotion_msg)
|
|
await state.set_data({"ctx": ctx})
|
|
|
|
@router.callback_query(AdminStorage.promotion_msg, F.data.in_(("approve", "decline")))
|
|
async def promo_send(cb: CallbackQuery, state: FSMContext, session: AsyncSession, deps: DependenciesDTO):
|
|
data = await state.get_data()
|
|
await state.clear()
|
|
|
|
ctx: NewPromotionContext | None = data.get("ctx")
|
|
if not (ctx and ctx.promotion and ctx.msg):
|
|
await cb.message.edit_text(CALLBACK_FALLBACK, reply_markup=return_to_menu)
|
|
return
|
|
|
|
successful = await deps.user_service.launch_promotion(session, ctx.promotion)
|
|
await cb.message.edit_text(SUCCESSFULLY_SENT_PROMO.format(successful=successful), reply_markup=return_to_menu) |