diff --git a/bot.py b/bot.py index 0b94c57..5a0afa9 100644 --- a/bot.py +++ b/bot.py @@ -6,9 +6,13 @@ from aiogram import Bot, Dispatcher, F, Router from aiogram.filters import CommandStart from aiogram.types import FSInputFile, Message from loguru import logger +import sys + +logger.remove() +logger.add(sys.stderr, level="DEBUG") from config import config -from instagram_monitor import InstagramMonitor +from instagram_monitor import InstagramMonitor, API_BASE router = Router() bot = Bot(token=config.telegram_bot_token) @@ -33,14 +37,10 @@ async def cmd_start(message: Message) -> None: @router.message(F.text == "/status") async def cmd_status(message: Message) -> None: if message.from_user and message.from_user.id == config.telegram_chat_id: - state_file = Path(config.download_dir) / "state.json" - tracked = 0 - if state_file.exists(): - import json - with open(state_file) as f: - tracked = len(json.load(f)) + stats = monitor.db.get_stats() + stats_text = ", ".join(f"{k}: {v}" for k, v in stats.items()) if stats else "пусто" await message.answer( - f"Отслежено медиа: {tracked}\n" + f"В базе: {stats_text}\n" f"Интервал: {config.check_interval_minutes} мин\n" f"Instagram: {config.instagram_username}" ) @@ -100,6 +100,33 @@ async def send_media(update: dict) -> None: await bot.send_message(chat_id=chat_id, text=f"{header}\n\n{caption}\n\n[Файл не удалось отправить]") +@router.message(F.text.startswith("/debug")) +async def cmd_debug(message: Message) -> None: + if message.from_user and message.from_user.id == config.telegram_chat_id: + parts = message.text.split() + if len(parts) < 2: + await message.answer("Использование: /debug @username") + return + username = parts[1].lstrip("@") + await message.answer(f"Ищу @{username}...") + + followees = monitor._get_followees() + user = next((u for u in followees if u["username"] == username), None) + if not user: + await message.answer(f"@{username} не найден в подписках") + return + + user_pk = user["pk"] + await message.answer(f"user_pk: {user_pk}\nПроверяю сториз...") + + resp = monitor.session.get( + f"{API_BASE}/feed/user/{user_pk}/story/", + params={"user_id": user_pk}, + timeout=30, + ) + await message.answer(f"HTTP {resp.status_code}\nResponse: {resp.text[:800]}") + + async def monitor_loop() -> None: logger.info("Starting monitor loop") while True: diff --git a/instagram_monitor.py b/instagram_monitor.py index b5465e0..868c0df 100644 --- a/instagram_monitor.py +++ b/instagram_monitor.py @@ -206,7 +206,9 @@ class InstagramMonitor: data = resp.json() items = data.get("items", []) + logger.debug(f"Stories {user_pk}: {len(items)} items, keys={list(data.keys())}") if not items: + logger.debug(f"Stories {user_pk} raw: {resp.text[:400]}") return [] stories = []