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

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

@@ -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("Новостей для обработки не найдено")