From ef908e09467a0d5caae4b13460cc56c33f531613 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D1=83=D0=BF=D0=BE=D0=B9?= Date: Sun, 6 Jul 2025 10:43:05 +0300 Subject: [PATCH] bug fixes --- bot.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/bot.py b/bot.py index 4d4b186..f8d892a 100644 --- a/bot.py +++ b/bot.py @@ -94,6 +94,7 @@ class Config: "processed_posts_file": "processed_posts.json", "enable_reply": True, "reply_templates": ["Готово! Отправил звезды. ⭐", "Выполнено.", "Сделал.", "+rep"], + "skip_posts_with_comments": True, } with open(self.config_file, 'w', encoding='utf-8') as f: json.dump(config, f, indent=4, ensure_ascii=False) @@ -105,7 +106,7 @@ class Config: def __getattr__(self, name: str) -> Any: if name == "forum_thread_id" and self.cli_thread_id: return self.cli_thread_id - return self._config_data.get(name) + return self._config_data.get(name, True if name == "skip_posts_with_comments" else None) class ProcessedPostsManager: def __init__(self, file_path: str): @@ -199,6 +200,17 @@ class LolzAPI: await asyncio.sleep(1) return all_posts + async def get_post_comments(self, post_id: int) -> List[Dict[str, Any]]: + params = {"post_id": post_id} + data = await self._request("GET", "/posts/comments", params=params) + if data and "comments" in data: + return data["comments"] + return [] + + async def has_comments(self, post_id: int) -> bool: + comments = await self.get_post_comments(post_id) + return len(comments) > 0 + async def create_comment(self, post_id: int, comment_body: str) -> bool: payload = {"comment_body": comment_body} logger.info(f"Публикую комментарий к посту {post_id}...") @@ -293,6 +305,12 @@ class TelegramStarsBot: logger.info(f"Найден новый пост для обработки: ID {post_id}") + if self.config.skip_posts_with_comments: + if await self.lolz_api.has_comments(post_id): + logger.info(f"Пост {post_id} уже имеет комментарии. Пропускаю обработку.") + self.processed_manager.mark_processed(post_id) + return + post_content = post.get('post_body_html') or post.get('post_body') if not post_content: logger.warning(f"У поста {post_id} отсутствует содержимое. Пропускаем.") @@ -387,6 +405,7 @@ class TelegramStarsBot: logger.info("=" * 40) logger.info(f"Комментарии на форуме: {'ВКЛЮЧЕНЫ' if self.config.enable_reply else 'ВЫКЛЮЧЕНЫ'}") + logger.info(f"Пропуск постов с комментариями: {'ВКЛЮЧЕН' if self.config.skip_posts_with_comments else 'ВЫКЛЮЧЕН'}") logger.info(f"Проверка начинается со страницы: {self.start_page}") logger.info("Бот в работе. Для остановки нажмите Ctrl+C.") logger.info("=" * 40)