Introduce balance field to User model with Alembic migration. Add referral menu, admin /refpay command, and deep link sharing. Update Dockerfile to multi-stage build and add Postgres service to compose. Fix deep link parsing logic and conditional proxy initialization.
73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
import logging
|
|
from aiogram import Router, F
|
|
from aiogram.filters import Command
|
|
from aiogram.fsm.context import FSMContext
|
|
from aiogram.types import CallbackQuery, Message
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from config import settings
|
|
from schemas.di import DependenciesDTO
|
|
from services.user_service import UserServiceException
|
|
from states.support import SupportStorage
|
|
from texts import GENERAL_PROCESSING, STANDARD_FALLBACK, SUPPORT_INIT, SUPPORT_MSG_SENT
|
|
from keyboards.client import return_to_menu
|
|
|
|
router = Router()
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@router.callback_query(F.data == "support")
|
|
async def support_init(cb: CallbackQuery, state: FSMContext):
|
|
await state.clear()
|
|
|
|
await cb.message.edit_text(text=SUPPORT_INIT, reply_markup=return_to_menu)
|
|
await state.set_state(SupportStorage.prompt)
|
|
|
|
|
|
@router.message(SupportStorage.prompt)
|
|
async def received_message(
|
|
msg: Message, state: FSMContext, session: AsyncSession, deps: DependenciesDTO
|
|
):
|
|
await state.clear()
|
|
|
|
notification_msg = await msg.reply(GENERAL_PROCESSING)
|
|
|
|
try:
|
|
await deps.user_service.support_forward_message(session, msg, deps.rw_sdk)
|
|
except UserServiceException:
|
|
await msg.reply(STANDARD_FALLBACK)
|
|
raise
|
|
except Exception:
|
|
await msg.reply(STANDARD_FALLBACK)
|
|
logger.exception("Exception occured while trying to forward a msg to support")
|
|
raise
|
|
|
|
await notification_msg.edit_text(SUPPORT_MSG_SENT, reply_markup=return_to_menu)
|
|
await state.set_state(SupportStorage.prompt)
|
|
|
|
|
|
@router.message(
|
|
F.chat.id == settings.admin_group_id,
|
|
F.message_thread_id.is_not(None),
|
|
F.from_user.is_bot == False, # noqa: E712
|
|
~Command("close"),
|
|
~Command("refpay"),
|
|
F.text,
|
|
)
|
|
async def handle_admin_message(
|
|
msg: Message, state: FSMContext, session: AsyncSession, deps: DependenciesDTO
|
|
):
|
|
await state.clear()
|
|
print(str(msg))
|
|
|
|
await deps.user_service.support_answer(session, msg)
|
|
|
|
|
|
@router.message(F.chat.id == settings.admin_group_id, Command("close"))
|
|
async def close_ticket(
|
|
msg: Message, state: FSMContext, session: AsyncSession, deps: DependenciesDTO
|
|
):
|
|
await state.clear()
|
|
|
|
await deps.user_service.close_ticket(session, msg)
|