from aiogram import Router, types, F from aiogram.fsm.context import FSMContext from aiogram.fsm.state import StatesGroup, State from utils.get_regions import get_sorted_regions from utils.subscribe import handle_subscribe, handle_unsubscribe, get_user_subscriptions from utils.show_settings_menu import show_settings_menu from .base_commands import is_whitelist router = Router(name=__name__) @router.message(F.text == "Настройки") async def handle_settings_menu(message: types.Message): chat_id = message.chat.id whitelist = await is_whitelist(chat_id) if not whitelist: text = "Вы неавторизованы для использования бота." await message.answer(text=text) return # await SubscriptionState.waiting_for_action.set() # Устанавливаем состояние ожидания выбора действия await message.answer("Выберите действие", reply_markup=show_settings_menu(chat_id)) @router.message(F.text == "Подписаться") async def subscribe_command(message: types.Message,): chat_id = message.chat.id whitelist = await is_whitelist(chat_id) if not whitelist: text = "Вы неавторизованы для использования бота." await message.answer(text=text) # await state.clear() # Завершаем состояние, если пользователь не авторизован return # await SubscriptionState.choosing_regions.set() # Переходим в состояние ожидания ввода номеров регионов region_list = await get_sorted_regions() text = (f"Отправьте номер или номера регионов, на которые хотите подписаться (через запятую):\n" f"{region_list}\n" f"Напишите 'отмена' для отмены.") await message.answer(text=text, reply_markup=types.ReplyKeyboardRemove()) @router.message(F.text == "Отписаться") async def unsubscribe_command(message: types.Message): chat_id = message.chat.id if not await is_whitelist(chat_id): text = "Вы неавторизованы для использования бота." await message.answer(text=text) # await state.clear() # Завершаем состояние, если пользователь не авторизован return await handle_unsubscribe(chat_id) await message.answer("Вы успешно отписались от всех регионов.", reply_markup=show_settings_menu(chat_id)) # await state.clear() # Завершаем состояние после выполнения действия @router.message(F.text == "Мои подписки") async def my_subscriptions_command(message: types.Message): chat_id = message.chat.id if not await is_whitelist(chat_id): text = "Вы неавторизованы для использования бота." await message.answer(text=text) # await state.clear() # Завершаем состояние, если пользователь не авторизован return # Логика для отображения подписок пользователя subscriptions = await get_user_subscriptions(chat_id) if subscriptions: text = "Ваши подписки:\n" + "\n".join(f"{sub.region_id}: {sub.region_name}" for sub in subscriptions) else: text = "У вас нет активных подписок." await message.answer(text=text, reply_markup=show_settings_menu(chat_id)) # await state.clear() # Завершаем состояние после выполнения действия