#!/usr/bin/env python3 """ Runner for market briefings — handles both AM and PM briefings. Called by OpenClaw cron jobs. """ import sys import os import argparse # Add workspace to path sys.path.insert(0, "/home/hoffmann_admin/.openclaw/workspace") from jobs.premarket_briefing import generate_premarket_briefing from jobs.daily_briefing import generate_daily_briefing def send_to_telegram(text: str, chat_id: str = "8386527252") -> bool: """Send message to Telegram.""" try: import requests bot_token = os.environ.get("TELEGRAM_BOT_TOKEN") if not bot_token: print("Warning: TELEGRAM_BOT_TOKEN not set") return False url = f"https://api.telegram.org/bot{bot_token}/sendMessage" # Split long messages if needed if len(text) > 4000: text = text[:3997] + "..." payload = { "chat_id": chat_id, "text": text, "parse_mode": "HTML", "disable_web_page_preview": True } response = requests.post(url, json=payload, timeout=30) response.raise_for_status() return True except Exception as e: print(f"Failed to send Telegram message: {e}") return False def main(): parser = argparse.ArgumentParser(description="Run market briefing") parser.add_argument("--type", choices=["am", "pm"], required=True, help="Briefing type: am (pre-market) or pm (close)") parser.add_argument("--send", action="store_true", help="Send to Telegram after generating") args = parser.parse_args() # Generate briefing if args.type == "am": briefing = generate_premarket_briefing() else: briefing = generate_daily_briefing() print(briefing) print(f"\n--- Character count: {len(briefing)} ---") # Send to Telegram if requested if args.send: chat_id = os.environ.get("MARKET_BRIEFING_CHAT_ID", "8386527252") if send_to_telegram(briefing, chat_id): print(f"\nāœ“ Sent to Telegram (chat: {chat_id})") else: print(f"\nāœ— Failed to send to Telegram") return 1 return 0 if __name__ == "__main__": sys.exit(main())