Overview
The Achievement System tracks your progress across all game features and rewards you with exclusive badges, gems, and coins when you hit milestones.Achievements are checked automatically after every command - you don’t need to manually claim them!
How Achievements Work
Automatic Detection
The bot checks for new achievements after every command you run:- You complete an action (pull gacha, win a battle, etc.)
- The system checks all achievement conditions
- If you qualify for a new achievement, you’re notified instantly
- Rewards are automatically added to your account
You can’t miss achievements - they’ll be detected as soon as you meet the requirements!
Viewing Achievements
View Your Badges
!ach, !badges
View another player’s achievements:
📛 Badge View
Visual wall of all badge emotes. Unlocked badges shown in full color, locked badges show as 🔒.
📜 List View
Detailed list with achievement names, descriptions, and unlock status.
Navigation Controls
The achievement viewer includes interactive buttons:- ◀️ Previous: Go to the previous page
- 📜 List / 📛 Badges: Toggle between badge wall and detailed list
- ▶️ Next: Go to the next page
Achievement Categories
Achievements span all major game features:Gacha Achievements
Tracking your gacha pulls and collection progress. Examples:- First pull milestone
- Pulling specific rarities
- Collection size milestones
Battle Achievements
Based on PvP battles and win streaks. Examples:- Win your first battle
- Reach win streaks
- Complete X total battles
Raid Achievements
Tracking raid participation and damage milestones. Examples:- Deal X total damage
- Survive X turns
- Participate in raids
Bounty Achievements
Based on bounty completions and boss kills. Examples:- R_TAKEDOWN: Defeat an R Tier bounty
- SR_TAKEDOWN: Defeat an SR Tier bounty
- SSR_TAKEDOWN: Defeat an SSR Tier bounty
- UR_TAKEDOWN: Defeat a UR Tier bounty
- VETERAN_HUNTER: Complete X bounties
Collection Achievements
Tracking your character collection size and diversity. Examples:- Own X characters
- Own all characters from a series
- Own characters of specific rarities
Progression Achievements
Tracking long-term progression metrics. Examples:- Reach Team Level X
- Earn X total gems
- Complete expeditions
Rewards
Each achievement grants rewards upon unlock:Badge Emote
Unique emote displayed in your achievement collection.
Gems
Premium currency for gacha pulls.
Coins
Currency for shop purchases.
Reward amounts vary by achievement difficulty and rarity.
Unlock Notification
When you unlock an achievement, you’ll receive an embed notification:Notifications appear in the same channel where you completed the qualifying action.
Achievement Viewer Layout
Badge Wall Page
Displays badge emotes in a compact grid:List View Page
Displays detailed achievement info:Tracking Your Progress
The system tracks various metrics behind the scenes:- Total pulls: Gacha summons across all banners
- Battle wins: PvP victories
- Boss kills: Unique boss IDs defeated
- Bounty completions: Total bounty victories
- Expedition gems: Total gems earned from expeditions
- Characters owned: Unique characters in inventory
These trackers are managed by the
Tracker system and update automatically.Example Achievement Flow
Automatic Check
The
on_command_completion listener triggers.Achievement engine checks:- Do you have the SSR_TAKEDOWN achievement?
- No → Unlock it!
Achievement Engine
Achievements are defined incore/achievements.py using the Achievement class:
AchievementEngine handles:
- Checking all registered achievements
- Detecting newly qualified achievements
- Granting rewards
- Preventing duplicate unlocks
Achievement checks are optimized to run quickly and not impact command performance.
Badge Emote System
Each achievement has a unique badge emote:- Emotes are stored in the
Emotesclass - The unachieved lock emote is
Emotes.UNACHIEVED - Badges can be custom Discord emotes or Unicode emojis
- 🩸 First Blood
- ⚔️ Battle Master
- 💎 Gacha God
- 🏆 Ultimate Collector
Pagination System
The achievement viewer automatically paginates large collections:- Badge Pages: Chunked by 4000 characters (Discord description limit)
- List Pages: 10 achievements per page
- Total Pages: Badge pages + List pages
Button States
- Prev Button: Disabled on first page
- Next Button: Disabled on last page
- Jump Button: Toggles label based on current mode
Interaction Checks
Only the command author can use the achievement viewer buttons:View Timeout
The interactive viewer has a 60 second timeout:- After 60 seconds of inactivity, buttons become disabled
- The embed remains visible but is no longer interactive
- Run
!achievementsagain to get a new interactive viewer
The timeout helps reduce memory usage and prevent stale interactions.
Common Questions
Can I claim achievements manually?
Can I claim achievements manually?
No, achievements are automatically detected and claimed after every command. There’s no manual claim process.
Do I need to use !achievements to unlock them?
Do I need to use !achievements to unlock them?
No, the
!achievements command only displays your progress. Unlocks happen automatically during gameplay.Can achievements be lost or revoked?
Can achievements be lost or revoked?
No, once unlocked, achievements are permanent and cannot be lost.
What if I meet multiple achievement requirements at once?
What if I meet multiple achievement requirements at once?
You’ll receive separate notification embeds for each achievement unlocked in sequence.
Can I see hidden achievement requirements?
Can I see hidden achievement requirements?
Strategy Tips
Check Regularly
Use
!achievements to see which milestones you’re close to completing.Diversify Activities
Achievements span all features - don’t focus on just one game mode.
Track Bounty Bosses
Boss kill achievements (R/SR/SSR/UR_TAKEDOWN) are one-time unlocks - complete them all!
Use as Goals
Locked achievements with visible requirements make great long-term goals.
Technical Details
Database Storage
Achievements are stored in theachievements table:
Listener Hook
Theon_command_completion listener is registered on the Achievement cog:
This listener fires after every successful command execution.