diff --git a/.isort.cfg b/.isort.cfg index aa4633c..bc3cd63 100644 --- a/.isort.cfg +++ b/.isort.cfg @@ -1,5 +1,5 @@ [settings] -line_length = 119 +line_length = 160 skip=migrations/*.py, node_modules, venv known_standard_library=typing multi_line_output=4 diff --git a/bot.py b/bot.py index 0f6b4f8..7f5b3c3 100644 --- a/bot.py +++ b/bot.py @@ -7,9 +7,7 @@ import rekognition import text -from filters import ( - ContainsLink, ContainsTelegramContact, ContainsThreeOrMoreEmojies, IsMedia, IsMessageOnBehalfOfChat, - with_default_filters) +from filters import ContainsLink, ContainsTelegramContact, ContainsThreeOrMoreEmojies, IsMedia, IsMessageOnBehalfOfChat, with_default_filters from helpers import DB_ENABLED, enable_logging, in_production, init_sentry diff --git a/filters.py b/filters.py index c129fce..2ff16a4 100644 --- a/filters.py +++ b/filters.py @@ -9,11 +9,23 @@ MIN_PREVIOUS_MESSAGES_COUNT = 3 -def is_fake_user(user_id: int) -> bool: - from models import LogEntry +class HasValidPreviousMessages(MessageFilter): + def filter(self, message: Message) -> bool: + if not DB_ENABLED(): + return False + + return self.has_no_valid_previous_messages(user_id=message.from_user.id, chat_id=message.chat_id) + + @staticmethod + def has_no_valid_previous_messages(user_id: int, chat_id: int) -> bool: + from models import LogEntry - messages_count = LogEntry.select().where((LogEntry.user_id == user_id) & (LogEntry.action != 'delete')).count() - return messages_count < MIN_PREVIOUS_MESSAGES_COUNT + messages_count = LogEntry.select().where( + (LogEntry.user_id == user_id), + (LogEntry.chat_id == chat_id), + (LogEntry.action != 'delete'), + ).count() + return messages_count < MIN_PREVIOUS_MESSAGES_COUNT class ChatMessageOnly(MessageFilter): @@ -25,6 +37,7 @@ def with_default_filters(*filters: BaseFilter) -> BaseFilter: """Apply default filters to the given filter classes""" default_filters = [ ChatMessageOnly(), + HasValidPreviousMessages(), ] return reduce(operator.and_, [*default_filters, *filters]) # МАМА Я УМЕЮ ФУНКЦИОНАЛЬНО ПРОГРАММИРОВАТЬ @@ -49,12 +62,7 @@ def filter(self, message: Message) -> bool: return False # type: ignore entities_types = set([entity.type for entity in message.entities]) - has_links = len(entities_types.intersection({'url', 'text_link'})) != 0 - - if DB_ENABLED() and has_links: - return is_fake_user(message.from_user.id) - - return has_links + return len(entities_types.intersection({'url', 'text_link'})) != 0 class ContainsThreeOrMoreEmojies(MessageFilter):