""" Основные хэндлеры бота: старт, помощь, цены, навигация """ from aiogram import Router from aiogram.filters import Command from aiogram.types import Message, CallbackQuery from aiogram.utils.keyboard import InlineKeyboardBuilder from database import DatabaseManager from config.settings import ADMIN_USER_ID router = Router() @router.message(Command("start")) async def command_start_handler(message: Message, db: DatabaseManager = None) -> None: """Обработчик команды /start""" user_id = message.from_user.id username = message.from_user.username or "Unknown" first_name = message.from_user.first_name or "" last_name = message.from_user.last_name or "" # Проверяем и добавляем пользователя в базу if db: await db.add_user_if_not_exists(user_id, username, first_name, last_name) # Создаем клавиатуру builder = InlineKeyboardBuilder() builder.button(text="🔍 Decode VIN", callback_data="decode_vin") builder.button(text="🚗 Check VIN", callback_data="check_vin") builder.button(text="📸 Search Car Photo", callback_data="search_car_photo") builder.button(text="💰 Prices", callback_data="prices") builder.button(text="❓ Help", callback_data="help") # Добавляем админ кнопку для администратора if user_id == ADMIN_USER_ID: builder.button(text="📊 Admin Panel", callback_data="admin_stats") builder.adjust(1) welcome_text = ( f"👋 Welcome to **SalvageDB Bot**, {first_name}!\n\n" "🚗 I can help you:\n" "• **Decode VIN** - Get basic vehicle information\n" "• **Check VIN** - Get detailed salvage and auction history\n" "• **Search Car Photos** - Find vehicle photos\n\n" "Choose an option below to get started:" ) await message.answer( welcome_text, reply_markup=builder.as_markup(), parse_mode="Markdown" ) @router.callback_query(lambda c: c.data == "main_menu") async def main_menu_callback(callback: CallbackQuery, db: DatabaseManager = None): """Возврат в главное меню""" user_id = callback.from_user.id first_name = callback.from_user.first_name or "" builder = InlineKeyboardBuilder() builder.button(text="🔍 Decode VIN", callback_data="decode_vin") builder.button(text="🚗 Check VIN", callback_data="check_vin") builder.button(text="📸 Search Car Photo", callback_data="search_car_photo") builder.button(text="💰 Prices", callback_data="prices") builder.button(text="❓ Help", callback_data="help") if user_id == ADMIN_USER_ID: builder.button(text="📊 Admin Panel", callback_data="admin_stats") builder.adjust(1) welcome_text = ( f"👋 Welcome back, {first_name}!\n\n" "🚗 I can help you:\n" "• **Decode VIN** - Get basic vehicle information\n" "• **Check VIN** - Get detailed salvage and auction history\n" "• **Search Car Photos** - Find vehicle photos\n\n" "Choose an option below:" ) await callback.message.edit_text( welcome_text, reply_markup=builder.as_markup(), parse_mode="Markdown" ) await callback.answer() @router.callback_query(lambda c: c.data == "help") async def help_callback(callback: CallbackQuery, db: DatabaseManager = None): """Показ справки""" help_text = ( "🆘 **SalvageDB Bot Help**\n\n" "**🔍 VIN Decode (Free)**\n" "Get basic vehicle information:\n" "• Make, Model, Year\n" "• Engine specifications\n" "• Basic vehicle data\n\n" "**🚗 VIN Check ($2.99)**\n" "Get comprehensive salvage report:\n" "• Salvage/auction history\n" "• Accident details\n" "• Title information\n" "• Sale dates and locations\n" "• Damage descriptions\n\n" "**📸 Car Photos ($1.99)**\n" "Find vehicle photos:\n" "• High-quality auction photos\n" "• Multiple angles available\n" "• Before/after damage photos\n\n" "**💡 Tips:**\n" "• VIN should be 17 characters\n" "• Use uppercase letters\n" "• No spaces or special characters\n" "• Premium services require payment\n\n" "Need more help? Contact support." ) builder = InlineKeyboardBuilder() builder.button(text="🏠 Main Menu", callback_data="main_menu") await callback.message.edit_text( help_text, reply_markup=builder.as_markup(), parse_mode="Markdown" ) await callback.answer() @router.callback_query(lambda c: c.data == "prices") async def prices_callback(callback: CallbackQuery, db: DatabaseManager = None): """Показ прайс-листа""" prices_text = ( "💰 **SalvageDB Pricing**\n\n" "**🆓 Free Services:**\n" "• VIN Decode - Basic vehicle info\n\n" "**💳 Premium Services:**\n" "**🚗 VIN Check - $2.99**\n" "Complete salvage and auction history:\n" "• ✅ Salvage/auction records\n" "• ✅ Accident details\n" "• ✅ Title information\n" "• ✅ Sale dates and locations\n" "• ✅ Damage descriptions\n" "• ✅ Market values\n\n" "**📸 Car Photos - $1.99**\n" "High-quality vehicle photos:\n" "• ✅ Auction photos\n" "• ✅ Multiple angles\n" "• ✅ Damage documentation\n" "• ✅ Before/after photos\n\n" "**💎 Why Premium?**\n" "• Professional data sources\n" "• Real-time updates\n" "• Comprehensive reports\n" "• Fast processing\n\n" "💳 **Payment:** We accept all major payment methods" ) builder = InlineKeyboardBuilder() builder.button(text="🔍 Try VIN Decode (Free)", callback_data="decode_vin") builder.button(text="🚗 Get VIN Check ($2.99)", callback_data="check_vin") builder.button(text="📸 Find Photos ($1.99)", callback_data="search_car_photo") builder.button(text="🏠 Main Menu", callback_data="main_menu") builder.adjust(1) await callback.message.edit_text( prices_text, reply_markup=builder.as_markup(), parse_mode="Markdown" ) await callback.answer()