Compare commits
2 Commits
a8739d4047
...
d059e7b1be
| Author | SHA1 | Date | |
|---|---|---|---|
| d059e7b1be | |||
| 7be4b1d5d2 |
61
main.py
61
main.py
@ -418,6 +418,7 @@ DECODE_PRICE = getenv("DECODE_PRICE",1)
|
|||||||
CHECK_PRICE = getenv("CHECK_PRICE",10)
|
CHECK_PRICE = getenv("CHECK_PRICE",10)
|
||||||
IMG_PRICE = getenv("IMG_PRICE",100)
|
IMG_PRICE = getenv("IMG_PRICE",100)
|
||||||
|
|
||||||
|
ADMIN_USER_ID = int(getenv("ADMIN_USER_ID", "0")) # ID администратора из переменных окружения
|
||||||
|
|
||||||
if is_windows():
|
if is_windows():
|
||||||
image_path = "D:\\SALVAGEDB\\salvagedb_bot\\images"
|
image_path = "D:\\SALVAGEDB\\salvagedb_bot\\images"
|
||||||
@ -461,12 +462,18 @@ async def command_start_handler(message: Message, db: OracleDatabase = None) ->
|
|||||||
builder = InlineKeyboardBuilder()
|
builder = InlineKeyboardBuilder()
|
||||||
builder.button(text="Decode VIN", callback_data="decode_vin")
|
builder.button(text="Decode VIN", callback_data="decode_vin")
|
||||||
builder.button(text="Check VIN", callback_data="check_vin")
|
builder.button(text="Check VIN", callback_data="check_vin")
|
||||||
builder.button(text="Search car Photo", callback_data="search_car_photo")
|
builder.button(text="Car photo", callback_data="search_car_photo")
|
||||||
builder.adjust(3)
|
builder.adjust(3)
|
||||||
builder.button(text="Help", callback_data="help")
|
builder.button(text="Help", callback_data="help")
|
||||||
builder.button(text="Prices", callback_data="prices")
|
builder.button(text="Prices", callback_data="prices")
|
||||||
builder.button(text="Go Salvagedb.com", url="https://salvagedb.com")
|
builder.button(text="Go Salvagedb.com", url="https://salvagedb.com")
|
||||||
builder.adjust(3, 2)
|
|
||||||
|
# Добавляем кнопку администратора только для админа
|
||||||
|
if message.from_user.id == ADMIN_USER_ID:
|
||||||
|
builder.button(text="📊 Admin Stats", callback_data="admin_stats")
|
||||||
|
builder.adjust(3, 3, 1)
|
||||||
|
else:
|
||||||
|
builder.adjust(3, 2)
|
||||||
await message.answer(welcome_text, reply_markup=builder.as_markup())
|
await message.answer(welcome_text, reply_markup=builder.as_markup())
|
||||||
|
|
||||||
|
|
||||||
@ -543,7 +550,7 @@ async def help_callback(callback: CallbackQuery, db: OracleDatabase = None):
|
|||||||
f"• Detailed damage history for {CHECK_PRICE} ⭐ (auction data, damage types, repair costs)\n"
|
f"• Detailed damage history for {CHECK_PRICE} ⭐ (auction data, damage types, repair costs)\n"
|
||||||
f"• Sale dates and locations from insurance auctions\n\n"
|
f"• Sale dates and locations from insurance auctions\n\n"
|
||||||
|
|
||||||
"📸 **3. Search Car Photos**\n"
|
"📸 **3. Car Photos**\n"
|
||||||
f"• Check availability of damage photos\n"
|
f"• Check availability of damage photos\n"
|
||||||
f"• Access to actual auction photos for {IMG_PRICE} ⭐\n"
|
f"• Access to actual auction photos for {IMG_PRICE} ⭐\n"
|
||||||
f"• High-quality images showing vehicle condition and damage\n\n"
|
f"• High-quality images showing vehicle condition and damage\n\n"
|
||||||
@ -625,6 +632,52 @@ async def prices_callback(callback: CallbackQuery, db: OracleDatabase = None):
|
|||||||
await callback.answer()
|
await callback.answer()
|
||||||
|
|
||||||
|
|
||||||
|
@dp.callback_query(lambda c: c.data == "admin_stats")
|
||||||
|
async def admin_stats_callback(callback: CallbackQuery, db: OracleDatabase = None):
|
||||||
|
# Используем переданный db или глобальный oracle_db
|
||||||
|
database = db or oracle_db
|
||||||
|
|
||||||
|
# Проверяем, является ли пользователь администратором
|
||||||
|
if callback.from_user.id != ADMIN_USER_ID:
|
||||||
|
await callback.answer("❌ Access denied. This command is for administrators only.", show_alert=True)
|
||||||
|
return
|
||||||
|
|
||||||
|
# Сохраняем данные пользователя при нажатии кнопки админки
|
||||||
|
await database.save_user(callback.from_user, "admin_stats_button")
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Получаем общую статистику
|
||||||
|
stats = await database.get_users_summary()
|
||||||
|
|
||||||
|
# Формируем отчет
|
||||||
|
report = f"""📊 **Bot Users Statistics**
|
||||||
|
|
||||||
|
👥 **Users Overview:**
|
||||||
|
• Total users: {stats.get('total_users', 0)}
|
||||||
|
• Premium users: {stats.get('premium_users', 0)}
|
||||||
|
|
||||||
|
💰 **Revenue:**
|
||||||
|
• Total revenue: {stats.get('total_revenue', 0)} ⭐️
|
||||||
|
• Total transactions: {stats.get('total_transactions', 0)}
|
||||||
|
|
||||||
|
📈 **Activity:**
|
||||||
|
• Active last 24h: {stats.get('active_last_24h', 0)}
|
||||||
|
• Active last week: {stats.get('active_last_week', 0)}
|
||||||
|
|
||||||
|
📅 **Generated:** {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"""
|
||||||
|
|
||||||
|
# Создаем кнопку возврата в главное меню
|
||||||
|
builder = InlineKeyboardBuilder()
|
||||||
|
builder.button(text="🏠 Back to Main Menu", callback_data="main_menu")
|
||||||
|
|
||||||
|
await callback.message.answer(report, reply_markup=builder.as_markup(), parse_mode="Markdown")
|
||||||
|
await callback.answer()
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"Error generating admin stats via callback: {e}")
|
||||||
|
await callback.answer("❌ Error generating statistics. Please try again later.", show_alert=True)
|
||||||
|
|
||||||
|
|
||||||
@dp.callback_query(lambda c: c.data and c.data.startswith("pay_detailed_info:"))
|
@dp.callback_query(lambda c: c.data and c.data.startswith("pay_detailed_info:"))
|
||||||
async def pay_detailed_info_callback(callback: CallbackQuery, db: OracleDatabase = None):
|
async def pay_detailed_info_callback(callback: CallbackQuery, db: OracleDatabase = None):
|
||||||
# Используем переданный db или глобальный oracle_db
|
# Используем переданный db или глобальный oracle_db
|
||||||
@ -819,7 +872,7 @@ async def pre_checkout_handler(pre_checkout_query: PreCheckoutQuery, db: OracleD
|
|||||||
await pre_checkout_query.answer(ok=True)
|
await pre_checkout_query.answer(ok=True)
|
||||||
|
|
||||||
|
|
||||||
ADMIN_USER_ID = int(getenv("ADMIN_USER_ID", "0")) # ID администратора из переменных окружения
|
|
||||||
|
|
||||||
@dp.message(Command("admin_stats"))
|
@dp.message(Command("admin_stats"))
|
||||||
async def admin_stats_handler(message: Message, db: OracleDatabase = None):
|
async def admin_stats_handler(message: Message, db: OracleDatabase = None):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user