savagedb_bot/handlers/main_handlers.py

187 lines
6.5 KiB
Python

"""
Основные хэндлеры бота: старт, помощь, цены, навигация
"""
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()