summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.py26
1 files changed, 25 insertions, 1 deletions
diff --git a/main.py b/main.py
index ae862a3..797b274 100644
--- a/main.py
+++ b/main.py
@@ -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"])