Plugin:skill pairs now read as noun:verb commands instead of repeating the plugin name. Also added concise descriptions to all SKILL.md frontmatter. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
34 lines
1.3 KiB
Markdown
34 lines
1.3 KiB
Markdown
---
|
|
title: "Fix: Scout Token Purchase Not Deducting Currency"
|
|
description: "Scout token buy flow silently failed to deduct 200₼ due to using db_patch instead of the dedicated money endpoint."
|
|
type: troubleshooting
|
|
domain: development
|
|
tags: [paper-dynasty, discord, api, bug-fix]
|
|
---
|
|
|
|
# Fix: Scout Token Purchase Not Deducting Currency
|
|
|
|
**Date:** 2026-03-15
|
|
**PR:** #90
|
|
**Severity:** High — players getting free tokens
|
|
|
|
## Problem
|
|
|
|
The `/buy scout-token` command completed successfully but didn't deduct the 200₼ cost. Players could buy unlimited tokens.
|
|
|
|
## Root Cause
|
|
|
|
The buy handler used `db_patch('/players/{id}', {'scout_tokens': new_count})` to increment tokens, but this endpoint doesn't trigger the money deduction side-effect. The dedicated `/players/{id}/money` endpoint handles balance validation and atomic deduction.
|
|
|
|
## Fix
|
|
|
|
Replaced the `db_patch` call with a two-step flow:
|
|
1. `POST /players/{id}/money` with `{"amount": -200, "reason": "scout_token_purchase"}`
|
|
2. Only increment `scout_tokens` if the money call succeeds
|
|
|
|
## Lessons
|
|
|
|
- Always use dedicated money endpoints for currency operations — never raw patches
|
|
- The `db_patch` helper bypasses business logic by design (it's for admin corrections)
|
|
- Added integration test covering the full buy→deduct→verify flow
|