- корректировка логики проверки дублей
This commit is contained in:
@@ -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 клиент"""
|
||||
|
Reference in New Issue
Block a user