from aiogram import F, Router from aiogram.filters import CommandStart from aiogram.fsm.context import FSMContext from aiogram.types import CallbackQuery, Message from config import ADMIN_ID, BOT_USERNAME, SHOP_NAME from db.storage import load_config from db.users import get, register from keyboards.user import main_menu_kb from services.admin import is_admin from runtime import get_bot, get_log_bot from utils.logging import log_admin router = Router(name="start") def _welcome_text(cfg) -> str: text = ( f"💎 Добро пожаловать в {SHOP_NAME}!\n\n" "💵 Здесь можно продать куки по следующим ставкам:\n" ) for rate in cfg.rates.values(): text += f"🔸 {rate.name}: {rate.price:.2f} ₽\n" return text + ( f"\n📊 AVG-система ({cfg.avg_min_price:.2f}-{cfg.avg_max_price:.2f} ₽/шт):\n" f"При отправке {cfg.avg_min_cookies}+ донатных cookie бот рассчитает средний Lifetime donate и предложит выгодную цену за каждую cookie.\n\n" "🍪 Отправьте .txt-файл или вставьте текст с cookie." ) async def _show_start( message: Message, state: FSMContext, user_id: int, username: str | None, referrer: int | None = None, ) -> None: await state.clear() is_new = register(user_id, username, referrer) profile = get(user_id) cfg = load_config() if profile and profile.is_banned: await message.answer(f"❌ Вы заблокированы. Причина: {profile.ban_reason or '—'}") return if not cfg.bot_enabled and user_id != ADMIN_ID: await message.answer("🚫 Бот временно отключен администратором.") return if is_new: bot = get_bot() or message.bot await log_admin( bot, ADMIN_ID, f"🆕 Новый пользователь\nID: {user_id}\n" f"@{username or 'нет'}\nРеферер: {referrer or '—'}", get_log_bot(), ) text = _welcome_text(cfg) if is_admin(user_id): text += "\n\n👑 Вы администратор. Продажа cookie отключена. Используйте /admin." await message.answer(text, parse_mode="HTML", reply_markup=main_menu_kb()) @router.message(CommandStart()) async def cmd_start(message: Message, state: FSMContext): argument = (message.text or "").split(maxsplit=1) referrer = None if len(argument) > 1 and argument[1].startswith("ref_"): try: referrer = int(argument[1][4:]) except ValueError: referrer = None await _show_start( message, state, message.from_user.id, message.from_user.username, referrer, ) @router.callback_query(F.data == "back_main") async def cb_back_main(callback: CallbackQuery, state: FSMContext): await state.clear() try: await callback.message.delete() except Exception: pass await _show_start( callback.message, state, callback.from_user.id, callback.from_user.username, ) await callback.answer()