diff --git a/bot_listener.py b/bot_listener.py index 1b79c77a..8057bb05 100644 --- a/bot_listener.py +++ b/bot_listener.py @@ -242,16 +242,36 @@ def start_bot(): def tradealert_preview(message): """Preview the current trade-alert push payload for one city.""" try: - parts = message.text.split(maxsplit=1) + parts = message.text.split() if len(parts) < 2: bot.reply_to( message, - "用法: /tradealert ankara", + "用法: /tradealert ankara/tradealert ankara 2026-03-06", + parse_mode="HTML", + ) + return + + target_date = None + city_tokens = parts[1:] + if city_tokens: + last_token = city_tokens[-1].strip() + try: + from datetime import datetime as _dt + _dt.strptime(last_token, "%Y-%m-%d") + target_date = last_token + city_tokens = city_tokens[:-1] + except Exception: + pass + + city_input = " ".join(city_tokens).strip().lower() + if not city_input: + bot.reply_to( + message, + "用法: /tradealert ankara/tradealert ankara 2026-03-06", parse_mode="HTML", ) return - city_input = parts[1].strip().lower() city_name = ALIASES.get(city_input) if not city_name and city_input in CITY_REGISTRY: @@ -278,20 +298,24 @@ def start_bot(): bot.send_message( message.chat.id, - f"📡 正在生成 {city_name.title()} 的异动预警预览...", + f"📡 正在生成 {city_name.title()} 的异动预警预览" + f"{f' ({target_date})' if target_date else ''}...", ) payload = build_trade_alert_for_city( city_name, config, force_refresh=True, + target_date=target_date, ) preview = ((payload.get("telegram") or {}).get("zh") or "").strip() trigger_count = int(payload.get("trigger_count") or 0) severity = str(payload.get("severity") or "none") + resolved_date = payload.get("target_date") header = ( f"[TEST PREVIEW] city={city_name} " + f"date={resolved_date} " f"severity={severity} triggers={trigger_count}" ) diff --git a/src/utils/telegram_push.py b/src/utils/telegram_push.py index f8852f36..fd2d43ca 100644 --- a/src/utils/telegram_push.py +++ b/src/utils/telegram_push.py @@ -3,6 +3,7 @@ import json import os import threading import time +from datetime import datetime from typing import Any, Dict, List, Optional from loguru import logger @@ -138,13 +139,16 @@ def build_trade_alert_for_city( city: str, config: Dict[str, Any], force_refresh: bool = False, + target_date: Optional[str] = None, ) -> Dict[str, Any]: from web.app import _analyze from src.analysis.market_alert_engine import build_trading_alerts from src.data_collection.polymarket_client import build_city_market_snapshot city_weather = _analyze(city, force_refresh=force_refresh) - target_date = city_weather.get("local_date") + resolved_target_date = target_date or city_weather.get("local_date") + if resolved_target_date: + datetime.strptime(resolved_target_date, "%Y-%m-%d") proxy = ( (config.get("polymarket", {}) or {}).get("proxy") @@ -152,7 +156,7 @@ def build_trade_alert_for_city( ) market_snapshot = build_city_market_snapshot( city=city, - target_date=target_date, + target_date=resolved_target_date, proxy=proxy, force_refresh=force_refresh, ) @@ -162,7 +166,7 @@ def build_trade_alert_for_city( market_snapshot=market_snapshot, map_url=map_url, ) - alert_payload["target_date"] = target_date + alert_payload["target_date"] = resolved_target_date return alert_payload