from datetime import datetime, timezone import telebot from app.extensions.db import db from app.models.users import Users from app.models.regions import Regions from app.models.subscriptions import Subscriptions from app.models.userevents import UserEvents def is_whitelisted(chat_id: int) -> tuple[bool, str | None]: """Проверяет, есть ли пользователь с заданным chat_id и не заблокирован ли он.""" user = Users.query.filter_by(chat_id=chat_id).first() if user: if user.is_blocked: return False, "Ваш доступ заблокирован." return True, None return False, None def get_sorted_regions() -> list[tuple[int, str]]: """Возвращает список всех активных регионов, отсортированных по region_id.""" return ( Regions.query .filter_by(active=True) .with_entities(Regions.region_id, Regions.region_name) .order_by(Regions.region_id.asc()) .all() ) def get_user_subscribed_regions(chat_id: int) -> list[tuple[int, str]]: """Возвращает список активных подписанных регионов пользователя.""" regions = ( Regions.query .join(Subscriptions, Subscriptions.region_id == Regions.region_id) .filter( Subscriptions.chat_id == chat_id, Subscriptions.active.is_(True), Subscriptions.skip.is_(False), Regions.active.is_(True) ) .with_entities(Regions.region_id, Regions.region_name) .order_by(Regions.region_id.asc()) .all() ) return regions def format_regions_list(regions: list[tuple[int, str]]) -> str: """Форматирует список регионов для отображения.""" return '\n'.join(f"{region_id} - {region_name}" for region_id, region_name in regions)