diff options
Diffstat (limited to 'main.py')
| -rw-r--r-- | main.py | 26 |
1 files changed, 25 insertions, 1 deletions
@@ -8,22 +8,36 @@ Usage: Requires a .zuliprc file in the same directory (see .zuliprc.example). """ +import logging import re import zulip import yfinance as yf +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s [%(levelname)s] %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", +) +log = logging.getLogger("slopbot") + # Regex to match stock tickers like $NVDA, $AAPL, $BRK TICKER_RE = re.compile(r'\$([A-Z]{1,5})') +log.info("Connecting to Zulip...") client = zulip.Client(config_file='.zuliprc') +log.info("Connected as %s", client.email) def fetch_price(ticker: str) -> str: """Return a formatted price string for a ticker, or an error message.""" + log.info("Fetching price for %s", ticker) try: price = yf.Ticker(ticker).fast_info['lastPrice'] - return f"${ticker}: ${price:,.2f}" + result = f"${ticker}: ${price:,.2f}" + log.info(" -> %s", result) + return result except Exception as e: + log.warning(" -> %s unavailable: %s", ticker, e) return f"${ticker}: unavailable ({e})" @@ -44,6 +58,14 @@ def handle_event(event: dict) -> None: if not tickers: return + log.info( + "Message from %s in %s/%s: found tickers %s", + msg["sender_email"], + msg.get("display_recipient", "?"), + msg.get("subject", "?"), + tickers, + ) + lines = [fetch_price(t) for t in dict.fromkeys(tickers)] # dedup, preserve order reply = "\n".join(lines) @@ -53,6 +75,8 @@ def handle_event(event: dict) -> None: "topic": msg.get("subject", ""), "content": reply, }) + log.info("Reply sent.") +log.info("Listening for messages...") client.call_on_each_event(handle_event, event_types=["message"]) |
