Changelog
View the full changelog of xeno-bot's development progress, including all features, improvements, and fixes across versions. Each version entry includes a summary of changes and links to relevant commits for more details.
v1.9.22 — UX: V2 gift responses & leaderboard/server fixes¶
Date: 2026-03-07
- Improved:
/giftsuccess responses now use Components V2 for clearer, multi-line presentation. Gift payloads showFrom,To,Item/Xenomorph/Host, and explicit IDs so transfers are easy to read and audit. - Fixed: Incorrect xenomorph label shown in some
/giftreplies (e.g., message said a different role than the xeno transferred). The display name and emoji are now derived fromconfig/evolutions.jsonrole mappings (roles) using the xeno'sroleorstage, ensuring the text matches the actual xeno given. - Fixed:
/leaderboardserver view now defaults to server-scoped mode when invoked inside a guild (no subcommand). Component interactions preserve the invokingguildId, preventing accidental fallbacks to global aggregates during menu updates. - Misc: Minor load-time verification and module safety checks added; no behavioral change expected beyond presentation and scoping fixes.
v1.9.21 — Fix: leaderboard scoping and paging¶
Date: 2026-03-07
- Fixed:
/leaderboard globaland/leaderboard servernow correctly preserve and apply sort/filter options across interaction pages and component updates. - Global: All component interactions on the global leaderboard now explicitly run the global subcommand so every update continues to use global aggregates.
- Server: All component interactions on the server leaderboard now explicitly run the server subcommand so rankings and filters are computed from server-local data only (no global fallbacks).
- Why: Previously component updates could lose the subcommand context and mix global/server data, producing confusing or incorrect rankings. This change ensures consistent, predictable leaderboard pages.
v1.9.20 — UX: evolve list formatting¶
Date: 2026-03-07
- Improved: The
/evolve listview now formats entries to match the rest of the bot UI:<emoji> <Role Display> [ID]with the pathway shown on a second line. This makes xenomorph entries consistent with other lists (hosts, eggs) and improves scanability. - Why: Previously the list used a compact
#id roleline that lacked the role emoji and consistent bracketed ID. The new format uses configured role emojis and display names to match completion/cancel messages and other UX patterns. - Files:
src/commands/evolve/index.jsupdated to usegetRoleDisplay()for list entries.
v1.9.19 — Fix: xenomorph guild scoping & data backfill¶
Date: 2026-03-07
- Fixed: Xenomorphs are now explicitly stored and queried per-guild so
/inventoryand/evolveonly show xenomorphs that belong to the same server. - Schema: Added
guild_idcolumn to thexenomorphstable and updatedsrc/models/xenomorph.jsto write/read this column when available. - Migration & Backfill: Added migration
20260307140000_add_xenomorphs_guild_id.jsand a data backfill migration20260307151000_populate_xenomorphs_guild_id.jsthat derivesguild_idfrom each xeno'shive_id(or the owner's first hive when a direct hive link was missing). - Why: Prevents cross-server inventory leakage and makes guild-scoped features reliable without inferring guilds from other relations.
- Notes: Rows where a guild could not be derived remain
NULLand will be excluded by guild-scoped queries unlessincludeUnAssignedis used. Run migrations on any additional DB instances (staging/replica) as needed.
v1.9.18 — Fix: host autocomplete labels & next_stage display¶
Date: 2026-03-07
- Fixed: Host autocomplete labels no longer include raw emoji markup. Autocomplete now shows only the host display name (e.g.,
Colonial Marine (x1) [#8437]) to avoid raw emoji token text appearing in selection lists. - Fixed: The
next_stageautocomplete now shows only the role display name (for example,Deacon) instead ofdeacon — Deacon, making selections cleaner and easier to read. - Minor: Continued polish to grouped
/evolve startautocomplete labels and count formatting (counts use(xN)).
v1.9.17 — UX: grouped evolve/autocomplete and clearer counts¶
Date: 2026-03-07
- Improved:
/evolve startautocomplete and host selection now group items by stage/pathway and host type to reduce option clutter. Example label:Facehugger • Pathway: standard (x20)is now shown asFacehugger • Pathway: standard (x20) [#123]and the count is displayed as(x20)for clarity. - Why: Large inventories produced long autocomplete lists showing every individual ID. Grouping reduces noise and makes it easier to pick the right group.
- Behavior: Each grouped option uses a single representative ID (the lowest ID in the group) as the option value so Discord accepts the numeric value. This keeps the command compatible while improving readability. If you prefer a follow-up selector to pick a specific ID from the group, we can add that as a later enhancement.
- Related: Added robust pathway/role normalization so pathway-specific facehugger variants (e.g.,
space_jockey_facehugger) are matched even if the user typesspaceorspacejockey.
v1.9.16 — Migration: normalize pathway-specific facehugger roles¶
Date: 2026-03-07
- Change: Non-standard pathways that used a generic
facehuggerstage (e.g.,dog,space_jockey) are now normalized to pathway-specific stage identifiers (dog_facehugger,space_jockey_facehugger) inconfig/evolutions.json. - Migration: Added a knex migration
20260307123000_migrate_facehugger_roles.jsthat updates existingxenomorphsrows: any xeno withroleorstage=facehuggerand a non-standardpathwaywill be renamed to{pathway}_facehugger. - Why: This prevents ambiguity where multiple pathways shared the generic
facehuggerlabel and ensures evolution requirements map to the correct pathway-specific stage. - Rollback: The migration includes a down-step to revert pathway-specific names back to the generic
facehuggerif needed.
v1.9.15 — Fix: evolve autocomplete and evolving-xeno filtering¶
Date: 2026-03-07
- Fixed:
/evolve startautocomplete previously suggested xenomorphs that either had no configured next evolution or were already undergoing evolution, which could lead to confusing UI and failed attempts. - Root cause: Autocomplete fell back to listing all roles when a selected xeno had no next step, and did not exclude xenos with queued evolution jobs.
- Fix: Autocomplete now:
- only suggests xenomorphs that have a configured next evolution step for their pathway; and
- excludes xenomorphs that currently have a queued evolution job (status =
queued). - User impact: Users will no longer see invalid or busy xenos in the selection list; attempting to start an evolution will only be possible for valid, idle xenos.
v1.9.14 — Fix: inventory egg list truncation¶
Date: 2026-03-07
- Fixed: Inventory view sometimes appeared to omit egg types for users with large egg collections; more egg types are now visible per page.
- Root cause: The inventory V2 view paged egg entries with a small page size which hid many egg types for heavy collectors.
- Fix: Increased the inventory page size so
/inventoryshows more egg entries per page, reducing truncation. Further UI improvements (e.g., a "Show all" option) can be added if desired.
v1.9.13 — Fix: prevent duplicate host insertions¶
Date: 2026-03-07
- Fixed: Prevented intermittent
Duplicate entryerrors when running/huntunder concurrent load. The error occurred when the code attempted to manually reuse deletedhosts.idvalues and two concurrent requests chose the same free ID. - Root cause:
insertWithReusedIdcould select the same gap ID for multiple concurrent inserts, causing primary key collisions on MySQL. - Fix:
hostsinsertion now uses the database's auto-increment behavior (no manualidassignment) so the DB reliably assigns unique IDs and avoids race conditions. - Notes: If ID reuse is still required for other tables, consider implementing transactional locking or a centralized ID allocator to avoid races.
v1.9.12 — Command option label consistency¶
Date: 2026-03-05
- Improved: Standardized select-menu and autocomplete entity labels to a consistent
Name [ID]pattern across key command flows. - Updated commands:
gift,hive,evolve, anddevgiveoption labels/autocomplete entries. - Xeno context: Added pathway context where relevant (for example, xeno options now include pathway details when useful).
- UX impact: Makes it easier to match inventory entries with command choices and reduces ambiguity when selecting entities.
v1.9.11 — Evolution completion DM V2 redesign¶
Date: 2026-03-05
- Improved: Evolution completion direct messages now use Components V2 for cleaner presentation.
- New format:
Your evolution job [jobId] completed<emoji> <from role> [xenoId] -> <emoji> <to role> [xenoId]- Details: Role display names and emojis are now resolved from evolution role config for consistent naming across pathways.
- Reliability: Added plain-text DM fallback if V2 component sending fails.
v1.9.10 — Gift xenomorph autocomplete + evolution status fix¶
Date: 2026-03-05
- Fixed:
/gift xenomorphautocomplete now properly lists giftable xenomorphs owned by the user. - Improved: Xeno autocomplete labels now include configured xeno emoji + display name, ID, and pathway for easier selection.
- Fixed: Manual
/gift xenomorphby ID no longer incorrectly blocks gifting due to historical evolution records. - Details: Gift blocking now only checks active evolution jobs (
queued/processing) instead of any row inevolution_queue.
v1.9.9 — New-user egg catch award fix¶
Date: 2026-03-05
- Fixed: Resolved spawn catch failures for first-time users that logged
Failed awarding egg. - Root cause:
createUser()inusermodel referenced an undefinedlogger, causing a runtime error during initial user creation. - Impact: New users can now catch spawned eggs normally, receive inventory updates, and avoid console award errors.
- Internal: Added the missing user-model logger initialization and kept existing award flow unchanged.
v1.9.8 — Inventory xeno list formatting polish¶
Date: 2026-03-05
- Improved:
/inventoryxenomorph entries now use host-style formatting for readability and consistency. - Before:
#663 facehugger: Pathway: standard • Created: ... - Now:
<xeno emoji> <xeno display name> [663]: Created ... - Details: Xeno labels now use evolution role metadata (display name + configured emoji) and keep a clean timestamp line similar to host entries.
v1.9.7 — Hive create-flow interaction fix¶
Date: 2026-03-05
- Fixed:
/hiveno-hive create flow no longer breaks interactions on the same message after creating a hive. - Bug behavior before: Creating a hive from the no-hive prompt, then using dashboard buttons on that same message, resulted in failed interactions.
- Now: After pressing View Hive, the same message is upgraded to the full hive dashboard collector so Stats/Modules/Milestones/Queen/Members and management actions function normally.
- Internal: Refactored hive dashboard collector wiring into a reusable attachment path used by both existing-hive and post-create view flows.
v1.9.6 — Eggs list claim pagination fix¶
Date: 2026-03-05
- Fixed:
/eggs listno longer resets to page 1 when claiming/collecting an egg from later pages. - Improved: Collect actions now preserve the current list page context so users can claim multiple eggs on page 2+ without repeatedly pressing Next.
- Technical: Collect button IDs now carry page context and all eggs-list collectors restore that page before re-rendering.
Commit: post-v1.9.5 fix for eggs list paging state retention.
v1.9.5 — Post-1.9.4 gameplay, UX, and data integrity updates¶
Date: 2026-03-05
- Gameplay & Balance: Added grantable-only Golden Egg support and excluded grantable-only eggs from normal spawns; rebalanced egg/host spawn weights (including rarer deacon/neomorph and king-pathway tuning).
- Inventory UX: Expanded
/inventorywith sorting + filtering across eggs, items, hosts, and xenomorphs (including type/stage filters and richer pagination behavior). - Stats UI: Refactored
/statsto Components V2 with improved sectioned layout and user avatar thumbnail. - ID Management: Implemented reusable-ID insertion utility for
hives,hosts, andxenomorphsso deleted IDs are reused instead of always incrementing. - Dog Pathway Fixes: Updated dog pathway first evolution to runner, added/updated runner and related xeno emoji/assets, and added migration tooling for legacy dog drones.
- Encyclopedia Expansion: Added Xenos catalogue view to
/encyclopediaand added rarity metadata to evolution roles so xeno entries show rarity with rarity emojis. - Gift/Hive Integrity Fix: Fixed
/gift xenomorphso gifted xenos clearhive_idon transfer (prevents unintended reassignment when gifted back); added cleanup migration for stale/invalid xeno↔hive links. - Hive Management Iterations: Multiple hive-screen improvements including module upgrades, members pagination/navigation, delete confirmations/back flow, snapshot/readability updates, and queen/module action flow polish.
- Developer/Infra Improvements: Added devgive host-type handling/autocomplete improvements and command-registration guardrails to reduce profile double-registration risk.
Commits included (after v1.9.4): cfebf00, d2206d9, 599d4c0, fa1efd6, c07f181, 1c88cf6, ec291af, 964564e, eb04e2f, 0ea96b7, f249a5c, 31b4d6b, 9144806, d4eb9b4, 30c943c, d98a1db, a7ddd16, cc25963, 8f987cd, d0b7ebf, e83ecb2, 6088b0c, c6671af, a4b66f4, c9fd9a4, 37f8c73, 2af9a10, eb50837, 64762e7, 17f095e, e9f7844, 4c44526, 6452859, bd6af2c, 4f9d299, 710fe87.
v1.9.4 — Hive queen restrictions and UI polish¶
Date: 2026-03-03
- Fixed: Only fully-evolved Queen xenomorphs can now be assigned as hive queens (previously allowed any evolved xeno).
- Improved: Hive UI redesigned for clarity:
- Stats screen now shows member breakdown by role.
- Queen screen displays current queen details and lists all hive members.
- Assign Queen screen shows available queens with pathway and level info.
- Add Xenos screen displays available xenos with detailed metadata.
- All screens now use better formatting with emojis and clearer status indicators.
- Hive snapshots split into multi-line format for readability.
v1.9.3 — Hive system expansion¶
Date: 2026-03-03
- Added interactive Assign Queen button + select menu to manage hive queens.
- Added interactive Add Xenos button + multi-select to grow your colony.
- Hive views now track and display xenomorph membership.
- Added permissions checking: only hive owner can manage members and queens.
- Fixed existing typo in hive create-prompt handler.
v1.9.3 — Evolve list UX updates and payload-limit fixes¶
Date: 2026-03-03
This patch release improves /evolve list usability and resolves Discord component payload-limit errors introduced during interactive UI expansion.
Features¶
- Enhanced
/evolve listwith new interaction controls: - Added a type filter select menu to sort/filter list entries by xenomorph type.
- Added per-entry
Infobuttons that open detailed info for the selected xenomorph.
Bug Fixes¶
- Fixed Discord API payload failures (
COMPONENT_MAX_TOTAL_COMPONENTS_EXCEEDED) on evolve list views. - Reduced component payload size to stay under Discord V2 limits while preserving filter + per-entry info functionality.
- Lowered evolve list page size.
- Capped type-filter option count.
Internal¶
- Version bumped to
1.9.3. - Patch release contains no intentional breaking changes.
v1.9.2 — Evolve list filter and payload mitigation¶
Date: 2026-03-03
- Added type filter select and per-entry info buttons to
/evolve list. - Reduced page size and filter options to fit Discord component limits.
- Made expired evolve views keep UI disabled instead of hiding controls.
v1.9.2 — Tutorial command and article reminder fixes¶
Date: 2026-03-03
This patch release focuses on onboarding UX and news reminder reliability.
Features¶
- Added a new interactive
/tutorialcommand with: - Category selector menu
- Multi-page navigation (Previous/Next)
- Dedicated sections for server setup, basics, hives, evolutions/hatching, hunts, and extra tips
Bug Fixes¶
- Fixed
/tutorialpayload validation failure by correcting select-menu emoji option format (Discord API expected emoji object shape). - Fixed news reminder visibility across deferred/component replies by applying reminder injection before reply/edit paths in
safeReply. - Fixed article-change detection for edited existing articles (e.g.
releases.md) so reminders trigger when latest content is updated, not only when new files are added.
Internal¶
- Version bumped to
1.9.2. - Patch release contains no intentional breaking changes.
v1.9.1 — Release notes and version bump¶
Date: 2026-03-02
- Added v1.9.0 release notes documenting recent bug fixes and features.
Date: 2026-02-27
- Initial project scaffold and first commit (6f75204).
v1.9.1 — Bug fixes and command reliability¶
Date: 2026-03-03
This is a bug-fix-only patch release focused on command stability, pagination correctness, and forum workflow reliability.
Command & UI Fixes¶
- Setup egg-limit stability
- Fixed runtime logger reference issues in
/setup egg-limiterror paths. -
Kept max egg limit validation at 10 with reliable error handling.
-
Eggs command subcommand fixes
- Fixed
/eggs infonot working by implementing missing handler logic. -
Added
/eggs destroyhandler support and safer unknown-subcommand fallback messaging. -
Eggs list behavior fixes
- Fixed list pagination edge cases that could stop navigation early.
- Fixed stale timestamp rendering (
Hatched: 56 years ago) by using correct hatch timestamps. - Fixed
View Listbutton from result screens by attaching collectors in those flows. -
Adjusted collected-entry behavior:
- Immediate collect action still updates the current view to show
Collected. - Fresh
/eggs listcalls only show uncollected entries.
- Immediate collect action still updates the current view to show
-
Hunt list consistency
- Fixed
hunt-listquick hunt button to reuse/huntexecution flow so cooldown and hunt logic are consistent. - Updated empty-state behavior so
/hunt-liststill opens list UI when no hosts are owned.
Forum Bug Report Workflow Fixes¶
- Added bug-report forum automation for new thread posts with a
Mark Resolvedaction. - Fixed thread create compatibility issues (
ButtonBuilder is not a constructor) by using runtime-safe component payloads. - Updated resolve-button permissions to allow only thread owner or guild owner.
- Resolve action now sends a response, then archives and locks the thread.
- Forum post notice message now uses Components V2 payload style.
Configuration/Data Fixes¶
- Reorganized emoji configuration ordering and applied emoji-related display corrections used by command output flows.
Internal¶
- Version bumped to
1.9.1. - Patch release contains no intentional breaking changes.
v1.9.0 — Code quality, performance optimization, and database efficiency¶
Date: 2026-03-03
This release focuses on code quality improvements, performance optimization, and reducing database load through caching and better indexing.
Code Quality & Refactoring¶
- JSON parsing helper utility: Created centralized
src/utils/jsonParse.jsfor safe JSON parsing across models. - Eliminated 15+ duplicate try-catch blocks previously scattered across 5 models (xenomorph, user, guild, hive, host).
- Consistent error handling and logging for all JSON parsing operations.
- Intelligently handles edge cases: already-parsed objects, null values, and invalid JSON.
-
Improved maintainability: future JSON parsing changes only need one place to update.
-
Model refactoring: Updated all models to use the new centralized JSON parsing utility.
xenomorph.js: Consolidated 3 duplicate parsing patterns into helper calls.user.js: Removed 2 separate try-catch blocks, simplified logic.guild.js: Standardized error handling with helper utility.hive.js: Consistent parsing across multiple lookups.host.js: Cleaner data transformation with helper.
Performance & Caching¶
- News reminder cache: Created
src/utils/newsReminderCache.jswith smart in-memory caching. - Reduces DB queries for reminder checks by approximately 90%.
- 5-minute TTL cache stores user's latest read article timestamp.
- Cache misses trigger DB lookup, hit results bypass database entirely.
- Automatic cleanup every 10 minutes prevents memory bloat.
- Cache automatically invalidates when user reads a new article via
/newscommand. - Updated
interactionCreate.jsto check cache before performing DB lookup. -
Modified
/newscommand to invalidate cache after marking article as read. -
Database indexing: Added performance index to
active_spawnstable. - New
created_atindex enables faster cleanup/expiration queries. - Particularly beneficial for garbage collection of old spawn records in high-activity guilds.
- Works alongside existing indices:
guild_id,channel_id + message_id, andspawned_at.
Performance Impact¶
- Database load reduction: ~90% fewer queries for news reminder checks across all interactions.
- Interaction latency improvement: Cache hits avoid network round-trips to database.
- Query performance: Active spawn queries benefit from additional
created_atindex during cleanup operations. - Memory efficiency: Cache uses minimal memory (~1KB per cached user, ~100KB for 1000+ users).
Implementation Details¶
- Cache lifecycle: TTL-based expiration + explicit invalidation on article reads.
- Database compatibility: Indices work with both MySQL and PostgreSQL (SQLite skipped).
- Backward compatibility: All changes are fully backward compatible; no migrations required.
- Error handling: Graceful fallback if cache fails; DB lookups still work.
Internal¶
- Version bumped to
1.9.0. - Commit: ca1d6bb - "Improvements: Code quality, performance optimization, and database efficiency"
- All utilities validated and loaded successfully.
- No breaking changes; safe to deploy in production.
v1.8.0 — Gift fix, ephemeral interactions, and critical memory leak patch¶
Date: 2026-03-02
Critical Bug Fixes¶
- Memory leak patch: Fixed critical memory leak affecting message component collectors across 9 commands (hunt, hunt-list, ping, hive, evolve, emojis, pathway, help, and gift).
- Root cause: Removed collector
filterfunctions were replaced with manual user ID checks inside collect handlers, causing all interactions from all users to be processed instead of filtered at collector creation time. - Impact: Memory accumulation from 224 MB → 1473 MB before OOM crash on deployed bot.
- Solution: Restored proper
filter: i => i.user.id === userIdto all affected collectors to prevent processing unwanted interactions and eliminate unbounded memory growth. - All 9 commands validated and tested; collectors now properly filter interactions at creation time.
Features¶
- Gift command SQL fix: Fixed
/gift xenomorpherror when users had active evolution queue jobs. - Changed
xenomorph_idtoxeno_idin evolution_queue table query (line 367) to match actual schema. - Devephemeral command: Added developer-only text command
/devephemeralfor testing Components v2 ephemeral interaction responses. - Text-only execution (no slash command data export).
- Demonstrates proper ContainerBuilder and TextDisplayBuilder usage with MessageFlags.IsComponentsV2.
UX Improvements¶
- Ephemeral help interactions: Fixed
/helpcommand to properly display as ephemeral when appropriate. - Added missing
ephemeral: isEphemeralflag to deferReply and safeReply calls. - Ephemeral permission errors: User permission validation errors across all affected commands now display as ephemeral responses instead of failing silently.
- Prevents error messages from cluttering the main chat channel.
Internal¶
- Version bumped to
1.8.0. - All affected commands load successfully and pass validation.
- Critical memory safety restored to production bot.
v1.7.0 — Pathways, Devgive expansion, number formatting, and support links¶
Date: 2026-03-02
Key Features¶
- Pathway command registration fix: Fixed
/pathwaynot appearing by restoring proper commanddataexport so it deploys and registers correctly. - Evolution pathway stage corrections: Updated egg first-stage mapping so pathways hatch into lore-appropriate starts:
- Neomorph eggs now hatch to
bloodburster - Deacon-path eggs now hatch to
hammerpede - King-path eggs now hatch to
king_facehugger - Devgive expansion and UX cleanup:
- Added ability to grant
xenomorphsat specific pathway/stage - Added ability to grant
royal_jelly - Consolidated
/devgiveinto a single unified flow with atypeselector and contextual autocomplete - New public utility commands:
- Added
/inviteto provide bot OAuth invite link - Added
/support-serverto provide support Discord link
Improvements¶
- Readable number formatting system:
- Added
src/utils/numberFormat.js(formatNumber,formatNumberShort,formatNumberAuto) - Applied formatting across key surfaces (including
devgive,stats,inventory,eggs, and hive displays) so large values are shown as comma-separated or compact forms. - Error-response support routing:
- Interaction failure replies now include a support-server link when configured.
- Added support invite and bot invite URLs in
config/links.json.
Bug Fixes¶
- Fixed
ButtonBuilder is not a constructorruntime errors affecting/invite,/support-server, and fallback interaction error replies by using compatibility-safe link button payloads. - Prevented secondary error-reply failures in interaction error handling path.
Internal¶
- Version bumped to
1.7.0. - Updated release documentation to include all post-
1.6.0shipped changes.
v1.6.0 — Eggs List Overhaul & Rarity System¶
Date: 2026-03-02
Major Features¶
- Complete Eggs List Redesign: Transformed
/eggs listinto a fully interactive command matching hunt-list functionality: - Paginated display (4 hatches per page)
- Direct collection from list with disabled button states
- Shows collected eggs with "Collected: ✅" status and disabled buttons
- Added Statistics page showing total hatches, ready count, most common type, and unique types
- Added interactive "Hatch Egg" button with dropdown selection menu
- Navigation between list, stats, and hatch screens
-
Improved timestamp display: "Hatched: \<time>" / "Hatching: \<time>" / "Collected: ✅"
-
Configurable Rarity System: Created centralized rarity configuration:
- New
config/rarities.jsondefining rarity tiers (Common 1-3, Rare 4-5, Very Rare 6+) - Added custom rarity emojis:
<:common:...>,<:rare:...>,<:very_rare:...> - Updated both eggs list and hunt-list to display emoji-only rarity badges
-
Unified display format:
🥚 Egg Name • :very_rare:instead of🥚 Egg Name • 🟪 Very Rare -
Enhanced Egg Hatching UX:
- Removed
/eggs collectsubcommand (collection now happens directly from list) - Added select menu for hatching with dropdown showing available eggs, quantities, and hatch times
- Added "View List" button to all result pages (sell/hatch) with full interactive navigation
- Result pages now have complete collector support for seamless workflow
Display Improvements¶
- Unified format across eggs and hunt-list:
- Three-line display: Name/Type • Rarity, ID: ###, Status/Timestamp
- Consistent emoji usage and rarity badge placement
- Bot avatar thumbnails on all list pages
Bug Fixes¶
- Fixed egg list showing all hatches including collected ones inappropriately
- Fixed button states not properly disabling when eggs aren't ready to collect
- Fixed navigation between different screens losing context
- Improved collector lifecycle management for sell/hatch commands
Configuration Changes¶
- Added
config/rarities.jsonwith rarity tier definitions - Added rarity emojis to
config/emojis.json - Removed
eggs.collectsubcommand fromconfig/commands.json
Internal¶
- Version bumped to
1.6.0 - Refactored rarity badge generation to use centralized config
- Enhanced eggs command with multiple screen types (list, stats, hatch, result)
- Improved code maintainability with modular page builders
v1.5.0 — V2 Components stabilization and nodemon improvements¶
Date: 2026-03-02
Key Features¶
- V2 Components Migration: Completed migration of
/newscommand to discord.js V2 components using ContainerBuilder, TextDisplayBuilder, and SeparatorBuilder for modern UI rendering. - Improved Collector Helper: Enhanced
createInteractionCollectorto properly handle V2 component updates and avoid sending empty messages: - Now intelligently filters out empty arrays for components and embeds
- Prevents Discord API errors (50006: Cannot send an empty message)
- Properly passes MessageFlags.IsComponentsV2 for V2 component rendering
Bug Fixes¶
- Fixed ButtonBuilder import errors by using style-specific builders (PrimaryButtonBuilder, SecondaryButtonBuilder) compatible with discord.js v15
- Fixed V2 component update pattern: changed from
message.edit()tobtn.editReply()for proper interaction-based updates - Fixed collectorHelper passing undefined properties to Discord API, which now filters to only include defined and non-empty values
- Fixed news command home view to skip loading latest article preview when none exist
- Fixed nodemon auto-restart on gitignored files (logs, .env, data)
Developer Experience¶
- Added comprehensive
nodemon.jsonconfiguration that ignores log files, data, and editor files - Updated
npm run devto use nodemon config instead of inline flags - Prevents unnecessary bot restarts when logging systems write to disk
Internal¶
- Version bumped to
1.5.0. - All V2 component patterns now follow discord.js v15 best practices
- Bot remains stable during development workflows with proper file watching
v1.4.0 — DevMenu, logging improvements, and leaderboard fixes¶
Date: 2026-03-02
Key Features¶
- DevMenu command: Converted
xen!devcommandsto a newxen!devmenuinteractive command with owner-only action buttons for developer maintenance. - Enhanced logging with guild context: Added guild names to spawn and hatch manager logs.
- Eggs command options registration: Fixed missing option definitions in
config/commands.json. - Leaderboard server filtering fix: Fixed
/leaderboard servershowing global data.
Bug Fixes¶
- Fixed several collector and logging issues.
Internal¶
- Version bumped to
1.4.0.
v1.3.0 — Help UX, embed colour unification, spawn deletion toggle¶
Date: 2026-02-28
- Added a guild-level toggle to delete the original spawn message after it is caught (
/setup message-delete enabled:<true|false>). The setting is persisted underguild_settings.data.delete_spawn_messageand defaults tofalseinconfig/guildDefaults.json. - Implemented spawn-message deletion in the spawn manager with robust channel/message fetch and a
Manage Messagespermission check. Failures are logged but do not surface user-facing errors. - Unified embed colour across commands: added a top-level
colourinconfig/commands.json, normalized color strings to numeric values in the commands loader, and fixed EmbedBuilder ValidationErrors by using numeric fallbacks. - Improved Help UX: added "About" and "Setup (Server Admins)" sections, removed the
usagedisplay (and removedusagefields from the commands config), fixed category listing and selection bugs, and restored clickable setup mentions where application command IDs are available. - Added a developer-only
devgivecommand and registered it for owner use. - Migrated many commands to a per-command directory layout while keeping legacy files to preserve history and ease rollout.
- Logging and diagnostics: event/load logs now include event names, spawn/hatch logs include
guildNamewhen available, and fallback logging was hardened for edge cases. - Fixed several runtime and syntax issues introduced during refactors (help selection population, truncated help file syntax, and embed color validation).
Notes:
- The spawn deletion feature defaults to off; enable via
/setup message-delete enabled:trueto start deleting spawn messages after a catch. - Additional followups: add an admin-facing notice when the bot lacks
Manage Messagespermission in the spawn channel, and consider de-duplicating legacy flat command files in a future cleanup release.
v1.2.0 — News, Shop, Inventory, and Currency Improvements¶
Released: 2026-02-28
This release introduces multiple user-facing features, bug fixes, and developer tools. Highlights:
Key Features¶
- News/Home improvements
- The news home now automatically previews the most recent article (uses file modification timestamps to detect newest content).
- Added
src/utils/articles.jsto reliably detect latest article title/content with short caching. - When a user opens
/newsthe bot records the latest article timestamp as read for that user so reminders stop. -
Added a per-user unread-article reminder that shows on commands when a newer article is available; reminders are cleared when the user reads the article.
-
Inventory UI & Currencies
- Added a
Currenciestab toInventoryshowingcredits(global) androyal_jelly(guild). - Fixed an issue where the inventory view showed an "Avatar / View Avatar" placeholder when the user had no items — avatar only appears when items exist.
-
creditsis now a global currency stored underdata.currency.credits(not per-guild). Default value is0viaconfig/userDefaults.json. -
Shop & Items
- Shop UI now displays configured emojis and uses a stable button implementation compatible with the repo's discord.js/builders versions.
- Removed purchasable eggs/cosmetics from the shop and added consumable items and boosts.
-
Fixed buy flow robustness and purchase confirmation messaging; purchases correctly deduct currency and add items.
-
Developer & Ops
- Added several developer-only commands and hid them from normal help listings.
- Hardened
devevalwith blacklists and logging. -
Added owner bypasses for setup and text-mode
forcespawncommands. -
Data & Migrations
- Made
creditsa global currency: addedscripts/migrate-credits-global.jsto migrate guild-level credits to global credits (dry-run and apply modes). - Added
scripts/migrate-mark-articles-read.jsto initializedata.meta.lastReadArticleAtfor existing users so they won't immediately see unread reminders.
Bug Fixes¶
- Fixed a TypeError related to
ButtonBuilderincompatibilities by using the builders-providedSecondaryButtonBuilder/SuccessButtonBuilderfallback when appropriate. - Fixed interaction handling so the news-reminder check is performed asynchronously and does not block command handling (avoids "The application did not respond").
- Adjusted inventory and shop collectors to be robust against rejected component payloads.
Notes for Server Operators¶
- Run
node scripts/migrate-credits-global.js --applyif you have legacycreditsstored per-guild and want them consolidated into global balances. - A one-time migration to mark all users as read was included and run during development. If you prefer a different initial state, run
node scripts/migrate-mark-articles-read.js(dry-run without--apply).
Internal¶
- Version bumped to
1.2.0. - Tests run locally and passed after changes.
v1.1.0 — Improvements, telemetry, and stability¶
Date: 2026-02-28
- Bump package to
1.1.0and publish-ready metadata. - Hardened logging and sanitization: added redaction for sensitive env values in health and log-tail outputs, file-backed
fallbackLogger, and forced-ANSI support for consistent logs in non-TTY environments. /healthredesign: switched to subcommands (showandlastlogs), added developerdetaillevels, owner-onlylastlogswith rate-limiting and audit entries, and masked secrets as*****in outputs.- Collector helper and command hardening: centralized
createInteractionCollector, fixed many collector integrations across commands to avoid component attach errors. /infostyling and runtime values:infonow reports real runtime values (Node, discord.js, gateway ping, shard info, cached counts) and includes thumbnail/footer/timestamp for clarity./statsoverhaul: reorganized layout, combined server/global views, added SQL-backed leaderboard ranking viaegg_catches, and per-egg historical rates computed from recorded events.- Egg recording and analytics: added
egg_catchestable andrecordEggCatch()to persist timestamped catch events and keep aggregateegg_statsin sync. - Spawn loop fix: ensured the spawn manager always schedules the next spawn after events complete to avoid the loop stopping unexpectedly.
- Various small fixes and compatibility updates across commands, configuration, and deploy flows.
v1.0.0 — Minor improvements and cleanup¶
Date: 2026-02-28
- Continued refinements to the
newsUX, quick links handling, and collector integration (3c9ce90, 6afb398). - Created per-category article files in
config/articles/and populated example content forrelease,events,newsletter, andother(3f2c915, 3ce5a60).
v0.8.0 — Links configuration and news home improvements¶
Date: 2026-02-28
- Reworked
config/links.jsoninto a categorized structure (e.g.,general,community) and updated commands/events to support both the new shape and the legacy flat shape for backward compatibility (6c11509). - Improved
newscommand home view to include: - An Introduction field
- Quick Links (categorized or flat) rendered as embedded link lists
- Latest article preview with title and truncated body
- Bot avatar thumbnail on the Home embed
- Category selector buttons to open per-category article lists stored under
config/articles/(commits: 3ce5a60, b56c851, 3f2c915, 6afb398)
v0.7.0 — Message component handling / collector helper¶
Date: 2026-02-28
- Introduced
createInteractionCollectorhelper to reliably attach MessageComponentCollectors to interaction replies; this centralizes the defer/edit/fetch pattern and reduces repeated boilerplate (bee298f, 6382363, f4c51c7). - Refactored commands to use the helper (inventory, shop, news, help, leaderboard, encyclopedia) to improve stability and avoid TypeErrors when attaching collectors (464c7e3, 9dd81ce, 3f2c915).
v0.6.0 — Logging hardening & fallback logger¶
Date: 2026-02-28
- Added a resilient file-backed
fallbackLoggerfor last-resort synchronous logging (cd819a3). - Adjusted console logging output so
npm startformats match development console output (99ff5be, 0b1a377, a0d981a, 4651848, 5ba41b4). - Added ability to force ANSI colors in logs via environment flags for consistent formatting in non-TTY environments (e4b77f2).
v0.5.0 — Deploy & profile improvements¶
Date: 2026-02-28
- Improved command deploy scripts and profile selection to be safer for dev vs public registration, and added default guildId support for deploy flows (82192b9, 84f985d, 9f04d4e).
v0.4.0 — Preview join, buttons, and news command (initial)¶
Date: 2026-02-28
- Added a developer-only
previewjoincommand to preview the guild join embed and improved join/guildCreate handling (6ab96d9, 3f4d149). - Implemented runtime-safe button creation (builders vs raw payload) to maintain compatibility across environments (785affe).
- Introduced initial
newscommand for reading and paginating latest articles (2a29a52).
v0.3.0 — Commands, setup and autocomplete¶
Date: 2026-02-27 — 2026-02-28
- Added
setupcommand enhancements including adetailssubcommand and saferexecuteInteractionuse (0dad7a9, 867b29c). - Added
autocompleteimprovements and logging for choices (227bd1b). - Added
eggsfeatures (list/collect/hatch support) and related command adjustments (04d5995, 857dd71).
v0.2.0 — Core utilities, DB and command scaffolding¶
Date: 2026-02-27
- Implemented
safeReplyutility for consistent interaction responses (4fc2da8). - Refactored database access into a unified
dbmodule and improved DATABASE_URL handling for MySQL/Postgres (4717292, adef985). - Removed local SQLite binary from repository and updated .gitignore (dcac588).
- Added
checkcommandsutility and enhanced command loading/logging (93c061e, efde13f). - Fixed various spawn/knex/interaction reference bugs discovered during initial integration (9d040f7, 9ef0ad8, e40b4d4).