187 lines
6.5 KiB
Python
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() |