- корректировка логики проверки дублей

This commit is contained in:
2025-08-22 18:03:38 +03:00
parent 073fa11127
commit 1717693a2f
5 changed files with 231 additions and 9 deletions

View File

@@ -7,6 +7,7 @@ from telethon import TelegramClient
from telethon.errors import FloodWaitError
from config import TELEGRAM_CONFIG
from history_manager import HistoryManager
class TelegramNewsClient:
@@ -14,6 +15,7 @@ class TelegramNewsClient:
self.logger = logging.getLogger(__name__)
self.content_processor = content_processor
self.config = TELEGRAM_CONFIG
self.history_manager = HistoryManager()
async def get_messages(self, client, channel_username):
"""Получение сообщений из Telegram канала/топика"""
@@ -221,8 +223,13 @@ class TelegramNewsClient:
raise
async def check_and_publish_news(self, news_list):
"""Проверка и публикация новостей в Telegram"""
"""Проверка и публикация новостей в Telegram
Returns:
list: Список topic_id успешно опубликованных новостей
"""
self.logger.info("Начинаем проверку новостей для Telegram")
published_topics = [] # Список успешно опубликованных топиков
client = TelegramClient(
self.config['session_file'],
@@ -238,23 +245,30 @@ class TelegramNewsClient:
if not news_list:
self.logger.warning("Список новостей пуст")
return
return published_topics
# Фильтруем новости для публикации
list_for_public = []
for topic_id, topic_title in news_list:
# Улучшенная проверка дубликатов
# Сначала проверяем в постоянной истории
if self.history_manager.is_published('telegram', topic_title):
self.logger.debug(f"Новость '{topic_title}' найдена в истории публикаций, пропускаем")
continue
# Затем проверяем в последних сообщениях канала
is_duplicate = self._check_duplicate_news(topic_title, tg_titles, tg_messages)
if not is_duplicate:
list_for_public.append((topic_id, topic_title))
self.logger.debug(f"Новость '{topic_title}' добавлена в список для публикации")
else:
self.logger.debug(f"Новость '{topic_title}' уже существует в Telegram, пропускаем")
# Добавляем в историю, если новость есть в канале, но нет в истории
self.history_manager.add_published('telegram', topic_id, topic_title)
self.logger.debug(f"Новость '{topic_title}' уже существует в Telegram, добавлена в историю")
if not list_for_public:
self.logger.warning("Новостей для публикации в Telegram нет")
return
return published_topics
self.logger.info(f"Новости для публикации в Telegram: {list_for_public}")
@@ -273,9 +287,16 @@ class TelegramNewsClient:
self.config['channel_username'],
content
)
# Сохраняем в историю после успешной публикации
self.history_manager.add_published('telegram', topic_id, topic_title)
published_topics.append(topic_id) # Добавляем в список успешно опубликованных
self.logger.info(f"Новость '{topic_title}' добавлена в историю публикаций")
await asyncio.sleep(10.0) # 10 секундная задержка между сообщениями
else:
self.logger.warning(f"Не удалось получить содержимое новости {topic_id}")
return published_topics
def is_enabled(self):
"""Проверка, включен ли Telegram клиент"""