claude-home/paper-dynasty/open-packs-checkin-crash.md
2026-04-02 20:48:06 -05:00

3.3 KiB

title description type domain tags
Fix: /open-packs crash from orphaned Check-In Player packs Check-In Player packs with hyphenated name caused empty Discord select menu (400 Bad Request) and KeyError in callback. troubleshooting paper-dynasty
troubleshooting
discord
paper-dynasty
packs
hotfix

Fix: /open-packs crash from orphaned Check-In Player packs

Date: 2026-03-26 PR: #134 (hotfix branch based on prod tag 2026.3.4, merged to main) Tag: 2026.3.8 Severity: High --- any user with an orphaned Check-In Player pack could not open any packs at all

Problem

Running /open-packs returned: HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body --- In data.components.0.components.0.options: This field is required

Discord rejected the message because the select menu had zero options.

Root Cause

Two cascading bugs triggered by the "Check-In Player" pack type name containing a hyphen:

  1. Empty select menu: The pretty_name logic used '-' not in key to identify bare pack type names. "Check-In Player" contains a hyphen, so it fell into the elif 'Team' in key / elif 'Cardset' in key chain --- matching neither. pretty_name stayed None, no SelectOption was created, and Discord rejected the empty options list.

  2. KeyError in callback (secondary): Even if displayed, selecting "Check-In Player" would call self.values[0].split('-') producing ['Check', 'In Player'], which matched none of the pack type tokens in the if/elif chain, raising KeyError.

Check-In Player packs are normally auto-opened during the daily check-in (/comeonmanineedthis). An orphaned pack existed because roll_for_cards had previously failed mid-flow, leaving an unopened pack in inventory.

Fix

Three-layer fix applied to both cogs/economy.py (production) and cogs/economy_new/packs.py (main):

  1. Filter at source: Added AUTO_OPEN_TYPES = {"Check-In Player"} set. Packs with these types are skipped during grouping with continue, so they never reach the select menu.

  2. Fallback for hyphenated names: Added else: pretty_name = key after the Team/Cardset checks, so any future hyphenated pack type names still get a display label.

  3. Graceful error in callback: Replaced raise KeyError with a user-facing ephemeral message ("This pack type cannot be opened manually. Please contact Cal.") and return.

Also changed all "contact an admin" strings to "contact Cal" in discord_ui/selectors.py.

Lessons

  • Production loads cogs/economy.py, not cogs/economy_new/packs.py. The initial fix was applied to the wrong file. Always check which cogs are actually loaded by inspecting the bot startup logs (Loaded cog: ...) before assuming which file handles a command.
  • Hotfix branches based on old tags may have stale CI workflows. The docker-build.yml at the tagged commit had an older trigger config (branch push, not tag push), so the CalVer tag silently failed to trigger CI. Cherry-pick the current workflow into hotfix branches.
  • Pack type names are used as dict keys and split on hyphens throughout the open-packs flow. Any new pack type with a hyphen in its name will hit similar issues unless the grouping/parsing logic is refactored to stop using hyphen-delimited strings as composite keys.