Add Google Sheet link to draft embeds

Added sheet_url parameter to draft embed functions:
- create_draft_board_embed - "View Full Board" link
- create_admin_draft_info_embed - "View Sheet" link
- create_on_the_clock_embed - "View Full Board" link
- create_on_clock_announcement_embed - "View Full Board" link

Updated all callers to pass the sheet URL from config.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Cal Corum 2025-12-11 20:10:16 -06:00
parent ff62529ee3
commit bf70aed890
6 changed files with 63 additions and 9 deletions

View File

@ -76,8 +76,11 @@ class DraftAdminGroup(app_commands.Group):
draft_data.currentpick draft_data.currentpick
) )
# Get sheet URL
sheet_url = config.get_draft_sheet_url(config.sba_season)
# Create admin info embed # Create admin info embed
embed = await create_admin_draft_info_embed(draft_data, current_pick) embed = await create_admin_draft_info_embed(draft_data, current_pick, sheet_url)
await interaction.followup.send(embed=embed) await interaction.followup.send(embed=embed)
@app_commands.command(name="timer", description="Enable or disable draft timer") @app_commands.command(name="timer", description="Enable or disable draft timer")

View File

@ -71,8 +71,11 @@ class DraftBoardCommands(commands.Cog):
await interaction.followup.send(embed=embed, ephemeral=True) await interaction.followup.send(embed=embed, ephemeral=True)
return return
# Get sheet URL
sheet_url = config.get_draft_sheet_url(config.sba_season)
# Create draft board embed # Create draft board embed
embed = await create_draft_board_embed(round_number, picks) embed = await create_draft_board_embed(round_number, picks, sheet_url)
await interaction.followup.send(embed=embed) await interaction.followup.send(embed=embed)

View File

@ -136,13 +136,17 @@ class DraftStatusCommands(commands.Cog):
if roster and roster.get('active'): if roster and roster.get('active'):
team_roster_swar = roster['active'].get('WARa') team_roster_swar = roster['active'].get('WARa')
# Get sheet URL
sheet_url = config.get_draft_sheet_url(config.sba_season)
# Create on the clock embed # Create on the clock embed
embed = await create_on_the_clock_embed( embed = await create_on_the_clock_embed(
current_pick, current_pick,
draft_data, draft_data,
recent_picks, recent_picks,
upcoming_picks, upcoming_picks,
team_roster_swar team_roster_swar,
sheet_url
) )
await interaction.followup.send(embed=embed) await interaction.followup.send(embed=embed)

View File

@ -136,7 +136,7 @@ class BotConfig(BaseSettings):
# Default sheet IDs (hardcoded as fallback) # Default sheet IDs (hardcoded as fallback)
default_keys = { default_keys = {
12: "1OF-sAFykebc_2BrcYCgxCR-4rJo0GaNmTstagV-PMBU", 12: "1OF-sAFykebc_2BrcYCgxCR-4rJo0GaNmTstagV-PMBU",
# Season 13+ will be added here as sheets are created 13: "1vWJfvuz9jN5BU2ZR0X0oC9BAVr_R8o-dWZsF2KXQMsE"
} }
# Check environment variable first (allows runtime override) # Check environment variable first (allows runtime override)

View File

@ -425,6 +425,9 @@ class DraftMonitorTask:
sorted_players = sorted(all_players, key=lambda p: p.wara if p.wara else 0.0, reverse=True) sorted_players = sorted(all_players, key=lambda p: p.wara if p.wara else 0.0, reverse=True)
top_roster_players = sorted_players[:5] top_roster_players = sorted_players[:5]
# Get sheet URL
sheet_url = config.get_draft_sheet_url(config.sba_season)
# Create and send the embed # Create and send the embed
embed = await create_on_clock_announcement_embed( embed = await create_on_clock_announcement_embed(
current_pick=next_pick, current_pick=next_pick,
@ -432,7 +435,8 @@ class DraftMonitorTask:
recent_picks=recent_picks if recent_picks else [], recent_picks=recent_picks if recent_picks else [],
roster_swar=roster_swar, roster_swar=roster_swar,
cap_limit=cap_limit, cap_limit=cap_limit,
top_roster_players=top_roster_players top_roster_players=top_roster_players,
sheet_url=sheet_url
) )
# Mention the team's GM if available # Mention the team's GM if available

View File

@ -23,7 +23,8 @@ async def create_on_the_clock_embed(
draft_data: DraftData, draft_data: DraftData,
recent_picks: List[DraftPick], recent_picks: List[DraftPick],
upcoming_picks: List[DraftPick], upcoming_picks: List[DraftPick],
team_roster_swar: Optional[float] = None team_roster_swar: Optional[float] = None,
sheet_url: Optional[str] = None
) -> discord.Embed: ) -> discord.Embed:
""" """
Create "on the clock" embed showing current pick info. Create "on the clock" embed showing current pick info.
@ -34,6 +35,7 @@ async def create_on_the_clock_embed(
recent_picks: List of recent draft picks recent_picks: List of recent draft picks
upcoming_picks: List of upcoming draft picks upcoming_picks: List of upcoming draft picks
team_roster_swar: Current team sWAR (optional) team_roster_swar: Current team sWAR (optional)
sheet_url: Optional Google Sheets URL for draft tracking
Returns: Returns:
Discord embed with pick information Discord embed with pick information
@ -100,6 +102,14 @@ async def create_on_the_clock_embed(
inline=False inline=False
) )
# Draft Sheet link
if sheet_url:
embed.add_field(
name="📊 Draft Sheet",
value=f"[View Full Board]({sheet_url})",
inline=False
)
# Add footer # Add footer
if current_pick.is_traded: if current_pick.is_traded:
embed.set_footer(text="📝 This pick was traded") embed.set_footer(text="📝 This pick was traded")
@ -296,7 +306,8 @@ async def create_draft_list_embed(
async def create_draft_board_embed( async def create_draft_board_embed(
round_num: int, round_num: int,
picks: List[DraftPick] picks: List[DraftPick],
sheet_url: Optional[str] = None
) -> discord.Embed: ) -> discord.Embed:
""" """
Create draft board embed showing all picks in a round. Create draft board embed showing all picks in a round.
@ -304,6 +315,7 @@ async def create_draft_board_embed(
Args: Args:
round_num: Round number round_num: Round number
picks: List of DraftPick for this round picks: List of DraftPick for this round
sheet_url: Optional Google Sheets URL for draft tracking
Returns: Returns:
Discord embed with draft board Discord embed with draft board
@ -341,6 +353,14 @@ async def create_draft_board_embed(
inline=False inline=False
) )
# Draft Sheet link
if sheet_url:
embed.add_field(
name="Draft Sheet",
value=f"[View Full Board]({sheet_url})",
inline=False
)
embed.set_footer(text="Use /draft-board [round] to view different rounds") embed.set_footer(text="Use /draft-board [round] to view different rounds")
return embed return embed
@ -435,7 +455,8 @@ async def create_pick_success_embed(
async def create_admin_draft_info_embed( async def create_admin_draft_info_embed(
draft_data: DraftData, draft_data: DraftData,
current_pick: Optional[DraftPick] = None current_pick: Optional[DraftPick] = None,
sheet_url: Optional[str] = None
) -> discord.Embed: ) -> discord.Embed:
""" """
Create detailed admin view of draft status. Create detailed admin view of draft status.
@ -443,6 +464,7 @@ async def create_admin_draft_info_embed(
Args: Args:
draft_data: Current draft configuration draft_data: Current draft configuration
current_pick: Current DraftPick (optional) current_pick: Current DraftPick (optional)
sheet_url: Optional Google Sheets URL for draft tracking
Returns: Returns:
Discord embed with admin information Discord embed with admin information
@ -532,6 +554,14 @@ async def create_admin_draft_info_embed(
inline=False inline=False
) )
# Draft Sheet link
if sheet_url:
embed.add_field(
name="Draft Sheet",
value=f"[View Sheet]({sheet_url})",
inline=False
)
embed.set_footer(text="Use /draft-admin to modify draft settings") embed.set_footer(text="Use /draft-admin to modify draft settings")
return embed return embed
@ -543,7 +573,8 @@ async def create_on_clock_announcement_embed(
recent_picks: List[DraftPick], recent_picks: List[DraftPick],
roster_swar: float, roster_swar: float,
cap_limit: float, cap_limit: float,
top_roster_players: List[Player] top_roster_players: List[Player],
sheet_url: Optional[str] = None
) -> discord.Embed: ) -> discord.Embed:
""" """
Create announcement embed for when a team is on the clock. Create announcement embed for when a team is on the clock.
@ -560,6 +591,7 @@ async def create_on_clock_announcement_embed(
roster_swar: Team's current total sWAR roster_swar: Team's current total sWAR
cap_limit: Team's salary cap limit cap_limit: Team's salary cap limit
top_roster_players: Top 5 most expensive players on the team's roster top_roster_players: Top 5 most expensive players on the team's roster
sheet_url: Optional Google Sheets URL for draft tracking
Returns: Returns:
Discord embed announcing team is on the clock Discord embed announcing team is on the clock
@ -630,6 +662,14 @@ async def create_on_clock_announcement_embed(
inline=False inline=False
) )
# Draft Sheet link
if sheet_url:
embed.add_field(
name="📊 Draft Sheet",
value=f"[View Full Board]({sheet_url})",
inline=False
)
# Footer with pick info # Footer with pick info
if current_pick.is_traded: if current_pick.is_traded:
embed.set_footer(text="📝 This pick was acquired via trade") embed.set_footer(text="📝 This pick was acquired via trade")