# bot/tautulli_client.py import os import requests from datetime import datetime, timedelta from dotenv import load_dotenv load_dotenv() TAUTULLI_URL = os.getenv("TAUTULLI_URL") TAUTULLI_API_KEY = os.getenv("TAUTULLI_API_KEY") class TautulliClient: def __init__(self): self.base_url = f"{TAUTULLI_URL}/api/v2" self.api_key = TAUTULLI_API_KEY def _request(self, cmd: str, params: dict = {}): payload = { "apikey": self.api_key, "cmd": cmd, **params } try: res = requests.get(self.base_url, params=payload) res.raise_for_status() return res.json().get("response", {}).get("data", []) except Exception as e: print(f"❌ Tautulli API error for {cmd}: {e}") return [] def get_user_watch_history(self, username: str, media_type: str = "movie", days: int = 14, max_items: int = 20): """Get a list of recently watched movies or shows by username.""" cutoff = datetime.now() - timedelta(days=days) print(media_type) if media_type=='movie': tautulli_media_type='movie' elif media_type=='tv': tautulli_media_type='episode' history = self._request("get_history", { "user": username, "media_type":tautulli_media_type, "order_column": "date", "order_dir": "desc", "length": 100 # buffer to allow filtering }) history = history['data'] #print(history) filtered = [] print('FULL HISTORY') for item in history: print(item['user'],item['media_type'],item['title'],item['grandparent_title'],username,cutoff,datetime.fromtimestamp(item["date"])) try: watched_date = datetime.fromtimestamp(item["date"]) if watched_date < cutoff: continue filtered.append({ "title": item["title"] if media_type == "movie" else item["grandparent_title"], "type": media_type, "genres": item.get("genre", "").split(", "), "summary": item.get("summary", "") }) if len(filtered) >= max_items: break except Exception: continue print(filtered) return filtered