""" Reeling Tools for CrewAI (v1.1.0) 15-Channel Publishing, Reddit/Quora Topic Radar, Pre-Publish Spam Shield & AI Video Storyboards. https://reeling.app/plugins/crewai """ import os import requests from typing import Optional, List, Dict, Any try: from crewai.tools import BaseTool except ImportError: class BaseTool: pass class ReelingCommunityRadarTool(BaseTool): name: str = "reeling_discover_community_questions" description: str = ( "Finds fresh daily Reddit and Quora questions for target keywords and returns " "current anti-ban cadence quotas (3 answers/day and 3 posts/week)." ) def _run(self, topics: List[str], platforms: Optional[List[str]] = None) -> Dict[str, Any]: api_key = os.getenv("REELING_API_KEY", "") base_url = os.getenv("REELING_API_URL", "https://api.reeling.app") resp = requests.post( f"{base_url}/api/v1/community/discover", json={"topics": topics, "platforms": platforms or ["reddit", "quora"]}, headers={"X-API-Key": api_key, "Content-Type": "application/json"}, timeout=30, ) return resp.json() class ReelingDraftSafeAnswerTool(BaseTool): name: str = "reeling_draft_community_answer" description: str = ( "Drafts a value-first Reddit or Quora answer (120-220 words) and evaluates it " "against deterministic spam & shadowban filters (returns 0-100 Safety Score)." ) def _run(self, platform: str, question_title: str, question_url: Optional[str] = None) -> Dict[str, Any]: api_key = os.getenv("REELING_API_KEY", "") base_url = os.getenv("REELING_API_URL", "https://api.reeling.app") resp = requests.post( f"{base_url}/api/v1/community/draft-answer", json={"platform": platform, "questionTitle": question_title, "questionUrl": question_url}, headers={"X-API-Key": api_key, "Content-Type": "application/json"}, timeout=45, ) return resp.json() class ReelingPublishTool(BaseTool): name: str = "reeling_publish_post" description: str = ( "Publishes or schedules video, text, or community posts across 15 platforms " "(youtube, tiktok, instagram, facebook, linkedin, threads, pinterest, bluesky, " "x, reddit, medium, quora, telegram, discord, mastodon)." ) def _run( self, project_id: str, title: str, caption: str, platforms: List[str], video_url: Optional[str] = None, reply_to_url: Optional[str] = None, scheduled_for: Optional[str] = None, ) -> Dict[str, Any]: api_key = os.getenv("REELING_API_KEY", "") base_url = os.getenv("REELING_API_URL", "https://api.reeling.app") payload = { "project_id": project_id, "title": title, "caption": caption, "platforms": platforms, "video_url": video_url, "reply_to_url": reply_to_url, "scheduled_for": scheduled_for, } resp = requests.post( f"{base_url}/api/v1/publish", json={k: v for k, v in payload.items() if v is not None}, headers={"X-API-Key": api_key, "Content-Type": "application/json"}, timeout=45, ) return resp.json()