@@ -211,13 +211,12 @@ export async function execute(interaction: ChatInputCommandInteraction) {
211211
212212** Credential Management**
213213
214- - ` /setup ` - Save Idle Champions credentials (auto-redeems public codes for new users)
214+ - ` /setup ` - Save Idle Champions credentials
215215
216216** Code Redemption**
217217
218- - ` /redeem ` - Privately redeem a code (private to you)
219- - ` /redeempublic ` - Publicly redeem shared codes (shows available codes or redeems specific one)
220- - ` /makepublic ` - Share your redeemed code with other users
218+ - ` /redeem ` - Redeem a code (private by default, becomes public if another user redeems successfully)
219+ - ` /makepublic ` - Explicitly share your redeemed code with other users
221220
222221** Account Management**
223222
@@ -318,14 +317,23 @@ const details = await codeManager.getRedeemedCodeDetails(discordId, limit);
318317** Public Code Management**
319318
320319``` typescript
321- // Get all public unexpired codes (for /redeempublic)
320+ // Get all public unexpired codes
322321const publicCodes = await codeManager .getPublicUnexpiredCodes ();
323322
323+ // Check if code is public
324+ const isPublic = await codeManager .isCodePublic (code );
325+
326+ // Check if code was successfully redeemed by another user
327+ const redeemedByOther = await codeManager .isCodeSuccessfullyRedeemedByOther (code , userId );
328+
324329// Mark code as expired (called when server returns "expired" error)
325330await codeManager .markCodeAsExpired (code );
326331
327332// Make a code public (called by /makepublic command)
328333await codeManager .markCodeAsPublic (code );
334+
335+ // Make a code private (called when an explicitly public code becomes invalid on redeem)
336+ await codeManager .markCodeAsPrivate (code );
329337```
330338
331339### Adding Data
@@ -335,7 +343,7 @@ await codeManager.markCodeAsPublic(code);
335343await codeManager .addRedeemedCode (
336344 code ,
337345 interaction .user .id ,
338- ' success ' ,
346+ ' Success ' ,
339347 lootDetails ,
340348 false // Private
341349);
@@ -693,44 +701,39 @@ NODE_ENV=development # Optional
693701
694702### Public vs Private Codes
695703
696- The bot now supports sharing codes between users:
704+ The bot supports automatic and manual code sharing between users:
697705
698706** Private Codes** (Default)
699707
700- - Redeemed via ` /redeem ` command
708+ - All codes start as private when redeemed via ` /redeem `
701709- Only the user who redeemed it gets the rewards
702- - Not shared with other users
703- - Stored in database for user's history
710+ - Not shared with other users unless explicitly made public
711+ - ** Auto-Public on Second User Success ** : If a second user successfully redeems the same code, it automatically becomes public for both users
704712
705- ** Public Codes**
713+ ** Public Codes** (Explicit or Automatic)
706714
707- - Made public via ` /makepublic ` command
708- - Any user can redeem via ` /redeempublic `
709- - Only unexpired, successful codes can be made public
710- - When new users run ` /setup ` , public codes are automatically redeemed for them
715+ - Made public automatically when a second user successfully redeems it
716+ - Made public explicitly via ` /makepublic ` command
717+ - Any user can redeem public codes via ` /redeem ` command
718+ - If an explicitly public code becomes invalid on redemption, it's automatically switched back to private (may be a mistake)
719+ - Only unexpired, successful codes show as public
711720
712721### Workflow Example
713722
714- 1 . User A redeems code ` XYZ ` via ` /redeem code:XYZ ` (private)
715- 2 . User A likes the code and runs ` /makepublic code:XYZ ` to share it
716- 3 . User B joins and runs ` /setup ` → automatically redeems ` XYZ ` and gets rewards
717- 4 . User C can manually redeem via ` /redeempublic code:XYZ ` to see and redeem the shared code
718- 5 . User D can run ` /redeempublic ` (no code) to see all available public codes
719-
720- ### Expiration Tracking
721-
722- Codes can expire on the game server:
723-
724- - When a code fails to redeem with "expired" error message, bot marks it as ` expired `
725- - Expired codes no longer appear in public code lists
726- - Each code tracks when it expires via ` expires_at ` timestamp
723+ 1 . User A redeems code ` XYZ ` via ` /redeem code:XYZ ` (stored as private)
724+ 2 . User B redeems the same code ` XYZ ` via ` /redeem code:XYZ ` → code automatically becomes public
725+ 3 . User A can see the code is now public in ` /codes ` command
726+ 4 . User C can manually redeem via ` /redeem code:XYZ ` and will also see it as public
727+ 5 . User A can explicitly make a code public via ` /makepublic code:XYZ ` (for exclusive codes they want to share)
728+ 6 . If User D redeems an explicitly public code and it becomes invalid, it switches back to private automatically
727729
728730### Database Fields
729731
730- ** redeemed_codes table additions :**
732+ ** redeemed_codes table fields :**
731733
732734- ` is_public ` (integer) - 1 if public, 0 if private
733735- ` expires_at ` (datetime) - When code expires (null = never)
736+ - ` status ` (text) - 'Success' or 'Code Expired' (only successful/expired redeems are stored)
734737
735738## Code Scanning (Auto-detection)
736739
0 commit comments