Fix chart display by adding FinViz fallback
- Add has_chart_attachment parameter to create_stock_embed() - Use attachment://chart.png only when chart file is attached - Fall back to FinViz chart URL when Yahoo Finance chart fails - Prevents broken image references in Discord embeds 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
19
bot.py
19
bot.py
@@ -258,8 +258,6 @@ class StockBot(commands.Bot):
|
|||||||
await channel.send(f"Unable to retrieve data for ticker: {ticker}")
|
await channel.send(f"Unable to retrieve data for ticker: {ticker}")
|
||||||
return
|
return
|
||||||
|
|
||||||
embed = self.create_stock_embed(stock_data)
|
|
||||||
|
|
||||||
# Generate chart using Yahoo Finance historical data
|
# Generate chart using Yahoo Finance historical data
|
||||||
chart_file = None
|
chart_file = None
|
||||||
candle_data = self.yahoo_api.get_candles(ticker, days=30)
|
candle_data = self.yahoo_api.get_candles(ticker, days=30)
|
||||||
@@ -272,6 +270,9 @@ class StockBot(commands.Bot):
|
|||||||
if chart_buffer:
|
if chart_buffer:
|
||||||
chart_file = discord.File(chart_buffer, filename="chart.png")
|
chart_file = discord.File(chart_buffer, filename="chart.png")
|
||||||
|
|
||||||
|
# Create embed with appropriate chart reference
|
||||||
|
embed = self.create_stock_embed(stock_data, has_chart_attachment=bool(chart_file))
|
||||||
|
|
||||||
# Send with chart attachment if available
|
# Send with chart attachment if available
|
||||||
if chart_file:
|
if chart_file:
|
||||||
await channel.send(embed=embed, file=chart_file)
|
await channel.send(embed=embed, file=chart_file)
|
||||||
@@ -280,12 +281,13 @@ class StockBot(commands.Bot):
|
|||||||
|
|
||||||
logger.info(f"Sent stock update for {ticker} to channel {channel_id}")
|
logger.info(f"Sent stock update for {ticker} to channel {channel_id}")
|
||||||
|
|
||||||
def create_stock_embed(self, stock_data: dict) -> discord.Embed:
|
def create_stock_embed(self, stock_data: dict, has_chart_attachment: bool = False) -> discord.Embed:
|
||||||
"""
|
"""
|
||||||
Create a formatted Discord embed for stock price data.
|
Create a formatted Discord embed for stock price data.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
stock_data: Dictionary containing stock information
|
stock_data: Dictionary containing stock information
|
||||||
|
has_chart_attachment: Whether a chart file will be attached
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Discord embed object
|
Discord embed object
|
||||||
@@ -333,8 +335,12 @@ class StockBot(commands.Bot):
|
|||||||
embed.add_field(name="Change", value=change_str, inline=True)
|
embed.add_field(name="Change", value=change_str, inline=True)
|
||||||
embed.add_field(name="Previous Close", value=f"${stock_data['previous_close']}", inline=True)
|
embed.add_field(name="Previous Close", value=f"${stock_data['previous_close']}", inline=True)
|
||||||
|
|
||||||
# Reference attached chart image
|
# Set chart image (attached file or FinViz fallback)
|
||||||
|
if has_chart_attachment:
|
||||||
embed.set_image(url="attachment://chart.png")
|
embed.set_image(url="attachment://chart.png")
|
||||||
|
else:
|
||||||
|
chart_url = f"https://finviz.com/chart.ashx?t={ticker}&ty=c&ta=1&p=d&s=l"
|
||||||
|
embed.set_image(url=chart_url)
|
||||||
|
|
||||||
market_status = "🟢 Market Open" if stock_data['market_open'] else "🔴 Market Closed"
|
market_status = "🟢 Market Open" if stock_data['market_open'] else "🔴 Market Closed"
|
||||||
embed.set_footer(text=f"{market_status}")
|
embed.set_footer(text=f"{market_status}")
|
||||||
@@ -547,8 +553,6 @@ async def get_stock_price(ctx, ticker: str = None):
|
|||||||
await ctx.send(f"Unable to retrieve data for ticker: {ticker}")
|
await ctx.send(f"Unable to retrieve data for ticker: {ticker}")
|
||||||
return
|
return
|
||||||
|
|
||||||
embed = bot.create_stock_embed(stock_data)
|
|
||||||
|
|
||||||
# Generate chart using Yahoo Finance historical data
|
# Generate chart using Yahoo Finance historical data
|
||||||
chart_file = None
|
chart_file = None
|
||||||
candle_data = bot.yahoo_api.get_candles(ticker, days=30)
|
candle_data = bot.yahoo_api.get_candles(ticker, days=30)
|
||||||
@@ -561,6 +565,9 @@ async def get_stock_price(ctx, ticker: str = None):
|
|||||||
if chart_buffer:
|
if chart_buffer:
|
||||||
chart_file = discord.File(chart_buffer, filename="chart.png")
|
chart_file = discord.File(chart_buffer, filename="chart.png")
|
||||||
|
|
||||||
|
# Create embed with appropriate chart reference
|
||||||
|
embed = bot.create_stock_embed(stock_data, has_chart_attachment=bool(chart_file))
|
||||||
|
|
||||||
# Send with chart attachment if available
|
# Send with chart attachment if available
|
||||||
if chart_file:
|
if chart_file:
|
||||||
await ctx.send(embed=embed, file=chart_file)
|
await ctx.send(embed=embed, file=chart_file)
|
||||||
|
|||||||
Reference in New Issue
Block a user