Commit Graph

138 Commits

Author SHA1 Message Date
Cal Corum
1a9efa8f7e fix: add locked_play context manager to prevent stuck play locks
Early returns in log_chaos, log_sac_bunt, and log_stealing left play
locks permanently stuck because the lock was acquired but never released.
The new locked_play async context manager wraps checks_log_interaction()
and guarantees lock release on exception, early return, or normal exit.

Migrated all 18 locking commands in gameplay.py and removed redundant
double-locking in end_game_command.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 21:54:44 -06:00
Cal Corum
c4577ed46f fix: validate player positions in lineup before game start
Some checks failed
Build Docker Image / build (pull_request) Failing after 16s
Prevents PositionNotFoundException from crashing mlb-campaign when a
player is placed at a position they cannot play (e.g. an outfielder
listed at Catcher in the Google Sheet). Adds early validation in
get_lineups_from_sheets and proper error handling at all read_lineup
call sites so the user gets a clear message and the game is cleaned up.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 19:32:27 -06:00
Cal Corum
89801e1d42 Fix circular import by moving play lock functions to separate module
HOTFIX: Production bot failed to start due to circular import.

Root cause: utilities/dropdown.py importing from command_logic/logic_gameplay.py
while logic_gameplay.py imports from utilities/dropdown.py.

Solution: Created play_lock.py as standalone module containing:
- release_play_lock()
- safe_play_lock()

Both modules now import from play_lock.py instead of each other.

Error message:
  ImportError: cannot import name 'release_play_lock' from partially
  initialized module 'command_logic.logic_gameplay' (most likely due
  to a circular import)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-04 09:33:37 -06:00
Cal Corum
ebf006e5c6 Fix play lock system to prevent permanent user lockouts
CRITICAL BUG FIX: Play locks were never released on exceptions, causing
permanent user lockouts. Found 13 stuck plays in production.

Changes:
1. Added lock_play parameter to checks_log_interaction() (default True)
2. Removed unnecessary locks from read-only commands:
   - /settings-ingame (game settings, not play state)
   - /show-card defense (read-only display)
   - /substitute commands (just show UI, lock in callback)
3. Added safe_play_lock() context manager for automatic lock release
4. Added play locking to substitution callbacks:
   - SelectBatterSub.callback()
   - SelectReliefPitcher.callback()
5. Global error handler now releases stuck locks automatically

Architecture:
- Commands that display UI or read data: No lock
- Commands that modify play state: Lock at last possible moment
- 3-layer defense: manual release, context manager, global handler

Resolves race condition from concurrent play modifications.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-04 09:21:18 -06:00
Cal Corum
c043948238 CLAUDE: Fix gauntlet game creation and Event 9 issues
Multiple fixes to resolve PlayNotFoundException and lineup initialization errors:

1. gauntlets.py:
   - Fixed Team object subscriptable errors (use .id instead of ['id'])
   - Added fallback cardsets (24, 25, 26) for Event 9 RP shortage
   - Fixed draft_team type handling (can be Team object or dict)

2. cogs/gameplay.py:
   - Fixed gauntlet game creation flow to read field player lineup from sheets
   - Catches LineupsMissingException when SP not yet selected
   - Instructs user to run /gamestate after SP selection

3. utilities/dropdown.py:
   - Fixed SelectStartingPitcher to create own session instead of using closed session
   - Store game/team IDs instead of objects to avoid detached session issues
   - Added exception handling for failed legality check API calls

These changes fix the issue where gauntlet games would fail to initialize
because the SP lineup entry wasn't being committed to the database.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:56:38 -06:00
Cal Corum
65abc8ed55 Remove outdate image links
Add S3 image links
Pull all fielding ratings at game start
2025-06-04 09:54:13 -05:00
Cal Corum
a4adf50ca1 Added discord bot object to complete game function 2025-06-01 09:44:16 -05:00
Cal Corum
b3fa68b80e Bug fixes for uncapped doubles 2025-05-30 21:16:51 -05:00
Cal Corum
17680a2348 Added /substitution defense 2025-05-30 01:19:45 -05:00
Cal Corum
e9c9a3f392 dictionary to object bug fix 2025-05-29 21:54:46 -05:00
Cal Corum
cb2637086e Live scorecard fix
Gauntlet entry string fix
2025-03-31 13:54:39 -05:00
Cal Corum
9218bd6047 Update cache reset command
Decrease cache limit to 3 days
Add kickstart live scorecard function
2025-03-09 14:20:30 -05:00
Cal Corum
cf4157a59d Increase scorebug timeout to 8 seconds 2025-03-09 00:58:15 -06:00
Cal Corum
8e35812cd3 Increase concurrent db connections
Decrease timeout on Scorebug buttons to reduce open connections
2025-03-03 22:13:40 -06:00
Cal Corum
9d831a9512 Post gamestate publicly if human team GM runs command 2025-02-23 23:20:54 -06:00
Cal Corum
50895fef90 Show charts on SPD checks
Fix gb chart with OBC 5, 7
Add 1998 to player command
2025-02-10 23:44:05 -06:00
Cal Corum
f6bae8c208 Local db to Postgresql 2025-02-08 04:11:04 -06:00
Cal Corum
d5f2978b01 Update new-game flow 2025-02-06 15:12:12 -06:00
Cal Corum
282a7e7ac2 Added live scorecard functionality
Added new pitcher embed highlighting
2025-02-05 11:30:56 -06:00
Cal Corum
fc130e6a98 Update buffer message for ballpark fly
Bolded new pitcher text
2025-02-03 13:58:51 -06:00
Cal Corum
3b6bcfb186 Beta day 1 bug fixes 2025-02-02 22:01:33 -06:00
Cal Corum
7d54d9ea34 Add unlimited new-game
Add pitcher substitution
Add AI pitcher subs
2025-02-01 21:32:40 -06:00
Cal Corum
4a76d59481 Check for AI fatigue 2025-01-26 02:20:29 -06:00
Cal Corum
36dbde848e new_game_checks refactor 2025-01-24 10:08:11 -06:00
Cal Corum
965ceebd35 Add responders check to dropdowns
Add colors and insults to helpers
Finish /set commands with helpers post /new-game
Add POW check for pitchers
2024-12-27 22:33:25 -06:00
Cal Corum
724b8922f2 Update gauntlet get SP for new objects
Handle gamestates without full lineups
Added /set command for lineup and SP
Fixed uncapped hit bugs
Added league_name property to Games
Fix get_team for gauntlets
Fixed SelectSP dropdown bug
2024-12-27 16:12:25 -06:00
Cal Corum
3db25b177a Refactor new game checks
Trail batter-runner on uncapped hits
2024-12-26 14:36:04 -06:00
Cal Corum
9dbd7896c4 Add PB to catcher string
Fix chaos interaction bug
2024-12-25 15:00:22 -06:00
Cal Corum
7015fb3125 Added baserunning ai notes
Added get_batter_card to gameplay_queries
2024-12-24 21:08:00 -06:00
Cal Corum
fddb06b2fe Mege cleanup 2024-12-24 16:10:44 -06:00
Cal Corum
7f6472bbc6 Batter subs plus cleanup 2024-12-23 10:09:11 -06:00
Cal Corum
95ee071ef8 Add DTwentyRoll
Add /log lineout
Add ManagerAi.tag_from_third()
2024-12-06 20:41:38 -06:00
Cal Corum
1e9e79916f Added /log frame-check
Fixed game-summary error
2024-12-06 11:56:56 -06:00
Cal Corum
8118b4a691 Added PO/FO to fielding roll
Complete /log xcheck and /log groundball
2024-12-06 00:46:49 -06:00
Cal Corum
d6d3d7beb0 Log stealing done
Log xchecks started
2024-11-25 13:17:51 -06:00
Cal Corum
073bd04b4b Added RosterLinks to remove card_id from setup process
Add SelectStartingPitcher dropdown
New .sync function
2024-11-23 19:53:48 -06:00
Cal Corum
a4af7652fc ask_confirm bug fix
manual_end_game complete
2024-11-21 10:38:39 -06:00
Cal Corum
7a718d45f0 AbRoll and JumpRoll objects
Add handedness to pitcher/batter
2024-11-20 21:31:31 -06:00
Cal Corum
f7685ff0e3 Added AbRoll and JumpRoll
Added auto_roll and roll_buttons to Game
Added log chaos
2024-11-17 14:57:54 -06:00
Cal Corum
3d333dabc3 Update api logging
New Position exception
Pull scouting data with lineups
More bunt types
String validation on gameplay models
AI Defensive alignment
2024-11-16 00:31:54 -06:00
Cal Corum
bfd72ae0f5 Update logging to RotatingFileHandler
Add auto game end
Calculate stats and decisions
Support raising instantiated exceptions
2024-11-09 23:14:54 -06:00
Cal Corum
c3418c4dfd New show-card dropdown view
Added PlayInitException
Added complete_and_post_play for log commands
Added many more log plays
Add undo-play
Added query logging
2024-11-09 00:48:13 -06:00
Cal Corum
fc3b407f2d ask_confirm helper added to buttons
Singles are complete
Doubles are complete
Uncapped advance is complete
2024-11-08 10:10:30 -06:00
Cal Corum
0327b6af62 Added ThrowResponse as managerai response
Added /log single, all but uncapped complete
Added check_uncapped_advance, ai on defense complete
2024-11-07 11:38:45 -06:00
Cal Corum
736897efad Added tag_from_second decision for AI
Flyball A and B complete
2024-11-04 00:12:35 -06:00
Cal Corum
86818e322c checks_log_interaction ready for use 2024-10-24 20:54:29 -05:00
Cal Corum
ee685f1415 Updated scorebug embed
Added play initialization
2024-10-24 17:14:11 -05:00
Cal Corum
79efceb6dd refactor exceptions and continue gameplay cog rebuild 2024-10-24 15:32:07 -05:00
Cal Corum
19e781137e Complete /new-game campaign
Add scorebug function to Game
Add card links prop to players
Add scorebug prop to play
2024-10-15 01:23:04 -05:00
Cal Corum
5fc89b5ce4 Added play table 2024-10-14 23:24:13 -05:00