Реализован функцоинал хранения сырых текстов поста в базе данных. Оформление поста происходит непосредственно перед его отправкой в канал.
- Реализованы методы `get_post_text_and_anonymity_by_message_id` и `get_post_text_and_anonymity_by_helper_id` в `PostRepository` для получения текста поста и флага анонимности. - Обновлена модель `TelegramPost`, добавлено поле `is_anonymous`. - Изменена схема базы данных для включения поля `is_anonymous` в таблицу `post_from_telegram_suggest`. - Обновлены функции публикации постов в `PostPublishService` для учета анонимности. - Добавлены тесты для проверки новых функций и корректности работы с анонимностью.
This commit is contained in:
@@ -85,14 +85,44 @@ def get_first_name(message: types.Message) -> str:
|
||||
return ""
|
||||
|
||||
|
||||
def get_text_message(post_text: str, first_name: str, username: str = None):
|
||||
def determine_anonymity(post_text: str) -> bool:
|
||||
"""
|
||||
Форматирует текст сообщения для публикации в зависимости от наличия ключевых слов "анон" и "неанон".
|
||||
Определяет, является ли пост анонимным на основе ключевых слов в тексте.
|
||||
|
||||
Args:
|
||||
post_text: Текст сообщения
|
||||
|
||||
Returns:
|
||||
bool: True, если "анон" в тексте; False, если "неанон" или "не анон" в тексте;
|
||||
False по умолчанию (если нет ключевых слов)
|
||||
"""
|
||||
if not post_text:
|
||||
return False
|
||||
|
||||
post_text_lower = post_text.lower()
|
||||
|
||||
# Сначала проверяем "неанон" или "не анон" (более специфичное условие)
|
||||
if "неанон" in post_text_lower or "не анон" in post_text_lower:
|
||||
return False
|
||||
|
||||
# Проверяем "анон"
|
||||
if "анон" in post_text_lower:
|
||||
return True
|
||||
|
||||
# По умолчанию False
|
||||
return False
|
||||
|
||||
|
||||
def get_text_message(post_text: str, first_name: str, username: str = None, is_anonymous: Optional[bool] = None):
|
||||
"""
|
||||
Форматирует текст сообщения для публикации в зависимости от наличия ключевых слов "анон" и "неанон"
|
||||
или переданного параметра is_anonymous.
|
||||
|
||||
Args:
|
||||
post_text: Текст сообщения
|
||||
first_name: Имя автора поста
|
||||
username: Юзернейм автора поста (может быть None)
|
||||
is_anonymous: Флаг анонимности (True - анонимно, False - не анонимно, None - legacy, определяется по тексту)
|
||||
|
||||
Returns:
|
||||
str: - Сформированный текст сообщения.
|
||||
@@ -109,12 +139,21 @@ def get_text_message(post_text: str, first_name: str, username: str = None):
|
||||
else:
|
||||
author_info = f"{first_name} (Ник не указан)"
|
||||
|
||||
if "неанон" in post_text or "не анон" in post_text:
|
||||
return f'Пост из ТГ:\n{safe_post_text}\n\nАвтор поста: {author_info}'
|
||||
elif "анон" in post_text:
|
||||
return f'Пост из ТГ:\n{safe_post_text}\n\nПост опубликован анонимно'
|
||||
# Если передан is_anonymous, используем его, иначе определяем по тексту (legacy)
|
||||
# TODO: Уверен можно укоротить
|
||||
if is_anonymous is not None:
|
||||
if is_anonymous:
|
||||
return f'Пост из ТГ:\n{safe_post_text}\n\nПост опубликован анонимно'
|
||||
else:
|
||||
return f'Пост из ТГ:\n{safe_post_text}\n\nАвтор поста: {author_info}'
|
||||
else:
|
||||
return f'Пост из ТГ:\n{safe_post_text}\n\nАвтор поста: {author_info}'
|
||||
# Legacy: определяем по тексту
|
||||
if "неанон" in post_text or "не анон" in post_text:
|
||||
return f'Пост из ТГ:\n{safe_post_text}\n\nАвтор поста: {author_info}'
|
||||
elif "анон" in post_text:
|
||||
return f'Пост из ТГ:\n{safe_post_text}\n\nПост опубликован анонимно'
|
||||
else:
|
||||
return f'Пост из ТГ:\n{safe_post_text}\n\nАвтор поста: {author_info}'
|
||||
|
||||
@track_time("download_file", "helper_func")
|
||||
@track_errors("helper_func", "download_file")
|
||||
|
||||
Reference in New Issue
Block a user