diff --git a/src/aitrader/config.py b/src/aitrader/config.py index 1c3ef13..b7d419a 100644 --- a/src/aitrader/config.py +++ b/src/aitrader/config.py @@ -87,6 +87,7 @@ class Settings(BaseModel): openrouter_api_key: str = "" cryptopanic_api_key: str = "" discord_webhook_url: str = "" + discord_webhook_decisions_url: str = "" db_path: str = "data/aitrader.db" @@ -113,6 +114,7 @@ def get_settings() -> Settings: openrouter_api_key=os.getenv("OPENROUTER_API_KEY", ""), cryptopanic_api_key=os.getenv("CRYPTOPANIC_API_KEY", ""), discord_webhook_url=os.getenv("DISCORD_WEBHOOK_URL", ""), + discord_webhook_decisions_url=os.getenv("DISCORD_WEBHOOK_DECISIONS_URL", ""), db_path=os.getenv("AITRADER_DB", "data/aitrader.db"), ) return settings diff --git a/src/aitrader/notify/discord.py b/src/aitrader/notify/discord.py index 2a1c42c..bd5e970 100644 --- a/src/aitrader/notify/discord.py +++ b/src/aitrader/notify/discord.py @@ -22,16 +22,16 @@ def _enabled(settings: Settings) -> bool: return bool(settings.discord.enabled and settings.discord_webhook_url) -def _post(settings: Settings, embed: dict[str, Any]) -> None: +def _post(settings: Settings, embed: dict[str, Any], channel: str = "trades") -> None: if not _enabled(settings): return + if channel == "decisions" and settings.discord_webhook_decisions_url: + url = settings.discord_webhook_decisions_url + else: + url = settings.discord_webhook_url embed.setdefault("timestamp", datetime.now(timezone.utc).isoformat()) try: - r = requests.post( - settings.discord_webhook_url, - json={"embeds": [embed]}, - timeout=8, - ) + r = requests.post(url, json={"embeds": [embed]}, timeout=8) if r.status_code >= 400: log.warning("discord.post_failed", status=r.status_code, body=r.text[:200]) except requests.RequestException as e: @@ -88,6 +88,7 @@ def notify_decision(settings: Settings, symbol: str, ensemble, label_a: str, lab {"name": "Rationale", "value": ensemble.rationale, "inline": False}, ], }, + channel="decisions", ) @@ -227,4 +228,5 @@ def notify_news_alert(settings: Settings, symbol: str, headlines: list[dict[str, "color": color, "description": top, }, + channel="decisions", )