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:
43
bot.py
43
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:
|
||||
|
||||
@@ -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 = []
|
||||
|
||||
Reference in New Issue
Block a user