Trades
The trade system is built around trust + transparency. Every trade gets posted in a public forum thread. League members vote approve/deny. The bot tracks who voted, what the threshold is, and auto-settles the XP transfer once the trade clears.
Submitter flow
/trade send <other_team> <screenshot> <my_xp> <their_xp>— submitter uploads a screenshot of the in-game trade screen.- Bot persists the screenshot to permanent storage (so it doesn't expire when Discord's ephemeral CDN garbage-collects the upload).
- AI vision parses the screenshot in the background and posts a structured "AI trade-screen read" with player names, OVRs, and pick details.
- Forum thread opens; both team owners get pinged.
Voting
Configured via /setup trade configure (or from the dashboard's Trade page — the old /trade setup and /trade settings were merged here in the Wave-13 consolidation):
votesRequired— total approve votes needed to clear (default 5)approvalPercentage— share of decisive votes that must be approvevoterRoleId— restrict voting to a specific role (e.g. commish council)
Votes use buttons; one vote per user; switching is allowed until threshold.
Auto-actions on approval
Once approved, the bot:
- Transfers XP per
team1Gives.xp/team2Gives.xp. - Removes any traded players from each team's trade block AND deletes the trade-block notification embed.
- Posts a public announcement pinging both team roles in the forum thread.
Trade deadline
/trade deadline on freezes new trades AND clears every team's trade block in one shot — used for the in-season "no trades after Week 7" cutoff. /trade deadline off reopens.
AI replay
/test_trade replay_all re-runs the screenshot vision parse against every trade in the league's history, cross-checks parsed players against the live Madden roster, and auto-flips any approved trade where the players didn't actually move to needs_review status.