Files
Roblox-Buyer/handlers/start.py
T
2026-07-20 08:58:10 +05:00

96 lines
3.3 KiB
Python

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"💎 Добро пожаловать в <b>{SHOP_NAME}</b>!\n\n"
"💵 Здесь можно продать куки по следующим ставкам:\n"
)
for rate in cfg.rates.values():
text += f"🔸 {rate.name}: {rate.price:.2f}\n"
return text + (
f"\n📊 <b>AVG-система ({cfg.avg_min_price:.2f}-{cfg.avg_max_price:.2f} ₽/шт):</b>\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"🆕 <b>Новый пользователь</b>\nID: <code>{user_id}</code>\n"
f"@{username or 'нет'}\nРеферер: {referrer or ''}",
get_log_bot(),
)
text = _welcome_text(cfg)
if is_admin(user_id):
text += "\n\n👑 <i>Вы администратор. Продажа cookie отключена. Используйте /admin.</i>"
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()