All checks were successful
Build and Push Docker Images / build (push) Successful in 1m28s
- Рефакторинг Telegram бота на модульную структуру для удобства поддержки и расширения - Создан общий RabbitMQ клиент для Flask и Telegram компонентов - Подготовлена базовая архитектура для будущего масштабирования и новых функций Signed-off-by: UdoChudo <stream@udochudo.ru>
56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
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)
|
||
|
||
|