76 lines
3.7 KiB
Python
76 lines
3.7 KiB
Python
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() # Завершаем состояние после выполнения действия
|