96 lines
4.2 KiB
Python
96 lines
4.2 KiB
Python
from telegram import Update, InlineKeyboardMarkup, InlineKeyboardButton
|
|
from telegram.ext import ContextTypes
|
|
from bot.operations.hotels import manage_hotels, hotel_actions, delete_hotel, check_pms, setup_rooms
|
|
from bot.operations.statistics import statistics, stats_select_period, generate_statistics
|
|
from bot.operations.settings import settings_menu, toggle_telegram, toggle_email, set_notification_time, show_current_settings
|
|
from bot.operations.users import show_users
|
|
|
|
|
|
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
|
"""Обработчик команды /start."""
|
|
user_id = (
|
|
update.message.from_user.id
|
|
if update.message
|
|
else update.callback_query.from_user.id
|
|
)
|
|
print(f"Пользователь {user_id} вызвал команду /start")
|
|
|
|
keyboard = [
|
|
[InlineKeyboardButton("📊 Статистика", callback_data="stats")],
|
|
[InlineKeyboardButton("🏨 Управление отелями", callback_data="manage_hotels")],
|
|
[InlineKeyboardButton("👤 Пользователи", callback_data="manage_users")],
|
|
[InlineKeyboardButton("⚙️ Настройки", callback_data="settings")],
|
|
]
|
|
reply_markup = InlineKeyboardMarkup(keyboard)
|
|
if update.message:
|
|
await update.message.reply_text("Выберите действие:", reply_markup=reply_markup)
|
|
elif update.callback_query:
|
|
await update.callback_query.edit_message_text("Выберите действие:", reply_markup=reply_markup)
|
|
|
|
|
|
|
|
async def handle_button_click(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
|
"""Обработчик всех нажатий кнопок."""
|
|
query = update.callback_query
|
|
await query.answer()
|
|
|
|
callback_data = query.data
|
|
|
|
# Сохраняем предыдущее меню для кнопки "Назад"
|
|
context.user_data["previous_menu"] = context.user_data.get("current_menu", "main_menu")
|
|
context.user_data["current_menu"] = callback_data
|
|
|
|
if callback_data == "stats":
|
|
await statistics(update, context)
|
|
elif callback_data.startswith("stats_hotel_"):
|
|
await stats_select_period(update, context)
|
|
elif callback_data.startswith("stats_period_"):
|
|
await generate_statistics(update, context)
|
|
elif callback_data == "manage_hotels":
|
|
await manage_hotels(update, context)
|
|
elif callback_data == "manage_users":
|
|
await show_users(update, context)
|
|
elif callback_data.startswith("hotel_"):
|
|
await hotel_actions(update, context)
|
|
elif callback_data.startswith("delete_hotel_"):
|
|
await delete_hotel(update, context)
|
|
elif callback_data.startswith("check_pms_"):
|
|
await check_pms(update, context)
|
|
elif callback_data.startswith("setup_rooms_"):
|
|
await setup_rooms(update, context)
|
|
elif callback_data == "settings":
|
|
await settings_menu(update, context)
|
|
elif callback_data == "toggle_telegram":
|
|
await toggle_telegram(update, context)
|
|
elif callback_data == "toggle_email":
|
|
await toggle_email(update, context)
|
|
elif callback_data == "set_notification_time":
|
|
await set_notification_time(update, context)
|
|
elif callback_data == "current_settings":
|
|
await show_current_settings(update, context)
|
|
elif callback_data == "main_menu":
|
|
await start(update, context)
|
|
elif callback_data == "back":
|
|
await navigate_back(update, context)
|
|
else:
|
|
await query.edit_message_text("Команда не распознана.")
|
|
|
|
|
|
async def navigate_back(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
|
"""Обработчик кнопки 'Назад'."""
|
|
previous_menu = context.user_data.get("previous_menu", "main_menu")
|
|
context.user_data["current_menu"] = previous_menu
|
|
|
|
if previous_menu == "main_menu":
|
|
await start(update, context)
|
|
elif previous_menu == "stats":
|
|
await statistics(update, context)
|
|
elif previous_menu == "manage_hotels":
|
|
await manage_hotels(update, context)
|
|
elif previous_menu == "manage_users":
|
|
await show_users(update, context)
|
|
elif previous_menu.startswith("hotel_"):
|
|
await hotel_actions(update, context)
|
|
else:
|
|
await update.callback_query.edit_message_text("Команда не распознана.")
|