- корректировка логики проверки дублей
This commit is contained in:
@@ -11,6 +11,7 @@ from site_api import SiteAPI
|
||||
from telegram_client import TelegramNewsClient
|
||||
from vk_client import VKClient
|
||||
from discord_client import DiscordClient
|
||||
from config_updater import ConfigUpdater
|
||||
|
||||
|
||||
class NewsBot:
|
||||
@@ -21,6 +22,7 @@ class NewsBot:
|
||||
self.telegram_client = TelegramNewsClient(self.content_processor)
|
||||
self.vk_client = VKClient(self.content_processor)
|
||||
self.discord_client = DiscordClient(self.content_processor)
|
||||
self.config_updater = ConfigUpdater()
|
||||
|
||||
self.logger.info("Бот инициализирован с модульной архитектурой")
|
||||
if DISCORD_CONFIG['enabled']:
|
||||
@@ -42,19 +44,49 @@ class NewsBot:
|
||||
if news_list:
|
||||
self.logger.info(f"Получено {len(news_list)} новостей для обработки")
|
||||
|
||||
# Отслеживаем успешно опубликованные новости во всех источниках
|
||||
published_in_telegram = []
|
||||
published_in_vk = []
|
||||
published_in_discord = []
|
||||
|
||||
# Публикация в Telegram
|
||||
if self.telegram_client.is_enabled():
|
||||
await self.telegram_client.check_and_publish_news(news_list)
|
||||
published_in_telegram = await self.telegram_client.check_and_publish_news(news_list)
|
||||
|
||||
# Публикация в VK
|
||||
if self.vk_client.is_enabled():
|
||||
await asyncio.get_event_loop().run_in_executor(
|
||||
published_in_vk = await asyncio.get_event_loop().run_in_executor(
|
||||
None, self.vk_client.check_and_publish_news, news_list
|
||||
)
|
||||
|
||||
# Публикация в Discord (если включен)
|
||||
if self.discord_client.is_enabled():
|
||||
await self.discord_client.check_and_publish_news(news_list)
|
||||
published_in_discord = await self.discord_client.check_and_publish_news(news_list)
|
||||
|
||||
# Определяем новости, опубликованные во ВСЕХ активных источниках
|
||||
all_sources = []
|
||||
if self.telegram_client.is_enabled():
|
||||
all_sources.append(set(published_in_telegram))
|
||||
if self.vk_client.is_enabled():
|
||||
all_sources.append(set(published_in_vk or []))
|
||||
if self.discord_client.is_enabled():
|
||||
all_sources.append(set(published_in_discord or []))
|
||||
|
||||
if all_sources:
|
||||
# Находим пересечение - новости, опубликованные везде
|
||||
successfully_published_everywhere = set.intersection(*all_sources)
|
||||
|
||||
if successfully_published_everywhere:
|
||||
# Находим максимальный topic_id среди успешно опубликованных
|
||||
max_topic_id = max(successfully_published_everywhere)
|
||||
|
||||
# Обновляем start_topic_id в keys.py
|
||||
if self.config_updater.update_start_topic_id(max_topic_id):
|
||||
self.logger.info(f"start_topic_id обновлен на {max_topic_id} после успешной публикации во всех источниках")
|
||||
else:
|
||||
self.logger.warning("Не удалось обновить start_topic_id в keys.py")
|
||||
else:
|
||||
self.logger.info("Нет новостей, опубликованных во всех активных источниках")
|
||||
else:
|
||||
self.logger.warning("Новостей для обработки не найдено")
|
||||
|
||||
|
Reference in New Issue
Block a user