feat: /debug @username command + verbose story logging

- /debug @username shows raw API response for stories endpoint
- Debug logging enabled for story fetch
- /status now shows SQLite stats (story/post counts)
This commit is contained in:
2026-06-17 12:52:20 +07:00
parent 5eec400f20
commit 3e792659f2
2 changed files with 37 additions and 8 deletions

43
bot.py
View File

@@ -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:

View File

@@ -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 = []