Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions bot/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from app.logger import bot_logger as logger
from app.models import User
from bot.charity_bot import dispatcher
from core.services.mailing_type import MailingType

bot = Bot(config.TELEGRAM_TOKEN)

Expand All @@ -31,8 +32,8 @@ class TelegramNotification:
This class describes the functionality for working with notifications in Telegram.
"""

def __init__(self, has_mailing: str = 'subscribed') -> None:
self.has_mailing = has_mailing
def __init__(self, sub_status: str = 'subscribed') -> None:
self.sub_status = sub_status

# TODO refactoring https://github.com/python-telegram-bot/python-telegram-bot/wiki/Avoiding-flood-limits
def send_notification(self, message):
Expand All @@ -43,19 +44,20 @@ def send_notification(self, message):
:param telegram_chats: Users query
:return:
"""
if self.has_mailing not in ('all', 'subscribed', 'unsubscribed'):
values = [member.value for member in MailingType]
if self.sub_status not in values:
return False

chats_list = []
query = db_session.query(User.telegram_id).filter(User.banned.is_(False))

if self.has_mailing == 'subscribed':
if self.sub_status == MailingType.SUBSCRIBED.value:
Comment thread
JediMode marked this conversation as resolved.
Outdated
chats_list = query.filter(User.has_mailing.is_(True))

if self.has_mailing == 'unsubscribed':
if self.sub_status == MailingType.UNSUBSCRIBED.value:
chats_list = query.filter(User.has_mailing.is_(False))

if self.has_mailing == 'all':
if self.sub_status == MailingType.ALL.value:
chats_list = query

user_notification_context = SendUserNotificationsContext([])
Expand Down
10 changes: 10 additions & 0 deletions core/services/mailing_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from enum import Enum


class MailingType(Enum):
"""
This class implements enumeration.
"""
SUBSCRIBED = 'subscribed'
UNSUBSCRIBED = 'unsubscribed'
ALL = 'all'
4 changes: 4 additions & 0 deletions core/services/user_service.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from flask import request, jsonify, make_response
from sqlalchemy.exc import SQLAlchemyError

from app.models import ReasonCanceling, User, Category, Task, Users_Categories, ExternalSiteUser
Expand Down Expand Up @@ -135,7 +136,10 @@ def change_subscription(self, telegram_id):
db_session.commit()
Comment thread
JediMode marked this conversation as resolved.
except SQLAlchemyError as ex:
logger.error(f"User DB - 'change_subscription' method: {str(ex)}")
db_session.rollback()
return user.has_mailing
Comment thread
AntonZelinsky marked this conversation as resolved.

logger.info("Subscription: Status successfully changed.")
return user.has_mailing
Comment thread
JediMode marked this conversation as resolved.
Outdated

def change_user_category(self, telegram_id, category_id):
Expand Down