CHANGELOG

Updates

LATEST
v3.9.0 RELEASE

Neon PostgreSQL Migration & AniList Integration Overhaul

Migrated Kairoku's core database infrastructure from Supabase to high-performance Neon serverless PostgreSQL, wired Neon Realtime telemetry endpoints, fixed AniList OAuth authentication secrets parsing, and resolved interaction timeout reliability.

2026-10-15

Key Highlights

  • Neon PostgreSQL Migration: Seamlessly transitioned all backend services, watchlists, favorites, and guild configs to managed serverless Neon Postgres.
  • Realtime WebSocket Integration: Connected the live Neon Realtime socket telemetry endpoint for lightning-fast state updates.
  • AniList OAuth & Secret Fixes: Resolved whitespace parsing issues for client secrets and fixed session interval verification for stable account linking.

New Features & Additions

Neon Serverless Database Migration
databasebackendmigration

Migrated all core bot and user data tables from Supabase to Neon PostgreSQL, complete with primary key sequence synchronization and full foreign key integrity.

Bug Fixes & Hardening

AniList Account Linking & OAuth Handshake
anilistauthcommands

Fixed client secret whitespace trimming and interval session verification queries so /anilist connect and list sync complete instantly without errors.

PATCH
v3.8.2 RELEASE

Fix Setup Command Timeout & Interaction Reliability

Fixed An issue where the `/kairoku setup` command would occasionally time out under database load, displaying 'The application did not respond' or getting stuck in 'Kairoku is thinking...'.

2026-09-28

Key Highlights

  • Added interaction deferrals to setup processing to gracefully handle execution duration.

Bug Fixes & Hardening

Setup command deferrals
commandssetupbot

Defers interaction gracefully ensuring the `/kairoku setup` does not timeout for databases experiencing latency above 3 seconds. Allows configuration to save asynchronously safely before following up.

PATCH
v3.8.1 RELEASE

Character Birthdays Fix & Persistence

Fixed an issue in the `/kairoku setup` command where the `character_birthdays` option was not correctly persisted to the database. Setting anime channels for announcements will now properly show.

2026-09-28

Key Highlights

  • Fixed Setup Flag: The character_birthdays settings are now properly persisted to the database configuration when executing `/kairoku setup`.
  • Config Display Updates: Character Birthdays shows correctly inside `/kairoku config`.

Bug Fixes & Hardening

Wired character_birthdays option in /kairoku setup
commandssetupbot

Fixed an issue in the `/kairoku setup` command where the `character_birthdays` option wasn't properly reading as a boolean and was not persisting to the database. The status (Enabled/Disabled) correctly displays on the `/kairoku config` embed.

MINOR
v3.8.0 RELEASE

Interactive Bug Reporting (/report) & Discord Interaction Hardening

Introduced the interactive /report command allowing users to preview and send bug reports directly to the developer, along with global interaction response hardening for Discord.js v14 compatibility.

2026-09-21

Key Highlights

  • Interactive /report Command: Submit bug reports with an interactive confirmation preview before forwarding details and server invite links to the developer.
  • Developer Direct Alerts: Bug reports arrive directly in developer DMs with detailed user, channel, and server metadata.
  • Discord Interaction Hardening: Standardized interaction responses across all commands onto MessageFlags.Ephemeral and silenced duplicate event router warnings for inline button collectors.

New Features & Additions

Interactive Bug Reporting Command (/report)
commandsreport

Users can now invoke /report <details> to preview their bug report embed, view warning prompts regarding server invite link generation, and explicitly send to the developer or cancel via button components.

IMPROVED

Discord.js Flag Normalization
commandsrouter

Updated interaction replies across all commands to use MessageFlags.Ephemeral instead of deprecated options parameters, eliminating deprecation warnings in logs.

Bug Fixes & Hardening

Interaction Routing for Inline Button Collectors
buttonsrouter

Silenced unhandled button warnings for ephemeral command collectors (such as /report confirmation buttons) in the central interaction button router.

MINOR
v3.7.0 RELEASE

Automated Discussion Threads & Enhanced Error Handling

Kairoku now automatically generates spoiler-free Discord threads for new episode notifications, and features much more precise API error reporting, including real-time limits and specific query failures.

2026-09-18

Key Highlights

  • Auto-Generated Threads: Episode notifications now spawn a dedicated Discord Thread automatically to keep spoilers safely out of main chat.
  • Specific API Errors: Generic error messages have been replaced with descriptive feedback detailing exact AniList downtime strings or rate-limiting events.
  • Thread Permission Grace: Senders silently catch lacking Thread permissions and continue episode delivery seamlessly without dropping messages.

New Features & Additions

Spoiler-Free Episode Threads
schedulernotifications

Episode notification deliveries will now silently spawn a dedicated Discord thread connected to the announcement if bot permissions allow, organizing discussion without risking spoilers.

IMPROVED

Descriptive AniList Error Routing
anime commands

All anime-specific slash commands now read GraphQL exceptions directly, surfacing accurate descriptions for timeouts, empty accounts, or exact strings over generic trace catch-alls.

Bug Fixes & Hardening

HTTP 429 Rate-Limit Awareness
anime commandskairoku commands

The command pipeline now properly intercepts strict AniList 429 limits and gracefully notifies the Discord user directly instead of swallowing the exception.

PATCH
v3.6.0 RELEASE

Provider Identity Safety, Deferred Interactions & Readiness Endpoint

Critical safety hardening: Kitsu-sourced results can no longer corrupt AniList subscriptions or episode notifications, user commands acknowledge before slow work, and the bot exposes a measured readiness probe instead of inferred health.

2026-09-17

Key Highlights

  • Provider Identity Safety: Kitsu-sourced anime is never written to subscription or notification databases, preventing AniList ID collisions.
  • Deferred Interactions: /user stats, /user recommend, and favorite/watchlist buttons defer before slow DB/API work with private error handling.
  • Real Readiness Endpoint: GET /ready probes the database and Discord gateway with measured latency; /health liveness is unchanged.
  • Kitsu Validation: invalid IDs, non-anime records, non-numeric IDs, and out-of-range ratings are dropped instead of fabricated.

Bug Fixes & Hardening

Kitsu Results Blocked from Subscriptions & Notifications
anime

Anime results sourced from the Kitsu fallback provider are now blocked from being written to subscription or episode notification databases, preventing AniList ID collisions.

Numeric-ID Lookups Bypass Kitsu Fallback
anime

Search queries that are purely numeric (AniList IDs) now always go to AniList directly, preventing the Kitsu fallback from misinterpreting AniList IDs.

Kitsu Client Drops Invalid IDs
anime

Non-numeric, non-positive, and overflow Kitsu IDs are dropped instead of being coerced to 0 or NaN, preventing phantom entries in search results.

Kitsu Client Validates JSON:API Shape
anime

Responses missing the required JSON:API data field or containing non-anime records are now rejected as malformed instead of producing empty anime objects.

Kitsu Season Boundaries Corrected
anime

Season derivation now uses standard month boundaries (Jan-Mar = Winter, etc.) instead of the previous incorrect ranges.

Kitsu Subtype Case Normalization
anime

Kitsu subtypes are now case-insensitively matched (e.g. 'movie' maps to MOVIE), preventing unmapped lowercase variants from returning null.

Kitsu Rating Bounds Check
anime

Average ratings are now bounded to (0, 100] and checked for finite values, preventing NaN or negative scores from appearing in embeds.

Improvements & Optimizations

User Commands Acknowledge Before Slow Work
commands

/user stats and /user recommend now defer their reply before calling remote services, preventing Discord interaction timeouts.

Favorite & Watchlist Buttons Acknowledge Before Work
commands

The Favorite and Watchlist buttons defer immediately and handle database failures privately instead of showing Discord timeout errors.

New Features & Additions

Real Readiness Endpoint
status

A new GET /ready endpoint probes the PostgreSQL database and Discord gateway with measured latency. Returns 200 when both are healthy, 503 otherwise. The existing /health liveness endpoint is unchanged.

FEATURE
v3.5.0 RELEASE

Kitsu Backup Provider & Resilient Status Page

Kairoku no longer goes silent when AniList does. The bot now pairs AniList with Kitsu, the open anime database, as an automatic backup provider - when AniList fails (outage, HTTP 403 block, rate limit, or server error) every anime command transparently keeps working. The website status page shows AniList 403 errors in plain view and reports the Kitsu backup provider as its own first-class service.

2026-09-11

Key Highlights

  • Automatic Backup Provider: when AniList fails, all anime commands keep running on the Kitsu anime database - no user action needed.
  • Transparent Fallback: /anime search, today, tomorrow, schedule, trending, airing, popular, random, recommendations, and seasonal all survive an AniList outage.
  • Resilient Status Page: the website surfaces AniList 403 errors directly and shows the Kitsu backup provider with a live 'falling back to Kitsu' indicator.
  • Graceful Degradation: fields Kitsu does not expose resolve to sensible empty values instead of errors.

New Features & Additions

Kitsu Backup Provider
animestatus

The bot pairs AniList with Kitsu as a fallback data source. When AniList fails recoverably - timeout, network error, malformed response, HTTP 403 block, HTTP 429, or HTTP 5xx - anime commands automatically retry on Kitsu exactly once. If Kitsu also fails, the original AniList error is shown so nothing silently breaks. Kitsu replaced Jikan (MyAnimeList), whose schedule feed was unreliable.

Kitsu Backup Provider on the Status Page
status

A new 'Kitsu API' card reports the backup provider's health on the status page. When AniList is reporting an outage but Kitsu is healthy, the AniList row notes that the bot is falling back to Kitsu.

Improvements & Optimizations

Status Page Shows AniList 403 Errors
status

The website status page now surfaces AniList 403 failures ('temporarily disabled' and Cloudflare blocks) with their exact error detail instead of a generic online status.

MAJOR
v3.4.0 RELEASE

Focus: In-Development & Quiz Features Removed

Kairoku now exposes only polished, fully working features. The /anime trivia quiz and the community features that were still under development (/anime poll, matchup, rankings, vote) have been removed so no command leaves users on a placeholder. Every remaining command is production-ready.

2026-09-07

Key Highlights

  • Quiz Removed: the /anime trivia quiz is gone.
  • In-Development Features Removed: /anime poll, matchup, rankings, and vote were placeholders and are now gone.
  • No More Placeholders: every slash command shipped works end to end.

Removed

Anime Quiz Removed
animecommands

The /anime quiz trivia feature was removed. The quiz subcommand no longer appears in the command tree and its button interactions are gone.

In-Development Community Commands Removed
animecommands

The /anime poll, matchup, rankings, and vote commands replied with an in-development placeholder and were never functional. They are removed so the command list only contains working features.

FEATURE
v3.3.0 RELEASE

AniList Syncing & Secure Account Linking

Kairoku now links directly to AniList: your watchlist and favorites sync both ways with /anilist connect. The OAuth flow was rebuilt on the Authorization Code grant so tokens are exchanged server-side and stored encrypted, and linking is confirmed with a DM straight to your Discord.

2026-09-05

Key Highlights

  • AniList Account Linking: new /anilist connect, disconnect, sync and watchlist-status commands.
  • Two-Way Sync: your Kairoku watchlist and favorites import from and push to your AniList profile.
  • Secure OAuth: the connect flow now uses the Authorization Code grant - the code is exchanged server-side with the client secret and the token is stored AES-256-GCM encrypted.
  • DM Confirmation: when you finish linking on the website, Kairoku DMs you a confirmation embed.
  • Stable Startup: a missing AniList secret no longer crashes the bot; syncing degrades to disabled with a clear log instead.

New Features & Additions

AniList Account Linking
anilistcommandsuser

New /anilist commands let users connect their AniList account: connect, disconnect, sync, and watchlist-status. Linked accounts sync watchlist and favorites in both directions.

DM Confirmation After Linking
aniliststatus

Once linking finishes on the website callback page, the bot sends a green confirmation embed to your Discord DMs.

Improvements & Optimizations

Secure Authorization Code OAuth Flow
aniliststatus

The connect flow moved off the implicit grant. The user authorizes on AniList, the website callback posts the code back, and the bot exchanges it server-side with the client secret before storing the encrypted token.

Website Open Discord Opens Your App
status

The post-connect confirmation link no longer drops you into the support server; it opens the Discord client on your own account.

Bug Fixes & Hardening

Graceful Shutdown on Partial Config
aniliststatus

A missing client secret or missing token-encryption key no longer crashes the bot at boot. AniList syncing disables cleanly with an explanatory log line instead.

Removed

Anime Quiz Removed
animecommands

The /anime quiz trivia feature was removed. The quiz subcommand no longer appears in the command tree and its button interactions are gone, keeping the bot focused on schedules, releases, and server automation.

MAJOR
v3.2.0 RELEASE

Kairoku is Live: Production Launch, News & Whitelist Removed

Kairoku leaves closed beta and is available to every server. The guild whitelist is gone, so slash commands register on every server the bot joins (and instantly on new joins via guildCreate). The anime news feature was removed entirely to keep the bot focused on anime schedules, releases, and server automation.

2026-08-30

Key Highlights

  • Production Launch: the bot is live and can be added to any server via the OAuth install link on the website.
  • No Whitelist: commands now register on every guild the bot is a member of instead of an ops-managed allowlist.
  • Instant Setup on Join: a new guildCreate handler registers the full command tree the moment the bot joins a server.
  • Stale Commands Purged: re-registration replaces each guild's command set, removing leftover legacy commands (e.g. /music).
  • Anime News Removed: the news service, /anime news, per-guild news channels, and news scheduler were removed.

Removed

Guild Whitelist Removed
commandsstatus

WhitelistService and the whitelisted_servers table are gone. Commands are registered on every server the bot is in, so no ops DB entry is needed to grant access.

Anime News Feature Removed
animecommands

The news service, news scheduler, and /anime news command were removed. Per-guild news channels and the /kairoku setup news option are gone. The kairoku_anime_news table and news_channel_id column are dropped by migration.

New Features & Additions

Commands Register on Guild Join
commands

A guildCreate handler registers the command tree immediately whenever the bot is added to a new server, instead of waiting for the next startup.

Improvements & Optimizations

Commands on Every Server
commands

Startup re-registration now covers all cached guilds and clears stale global commands, removing legacy commands (such as /music) from every server.

Production Website
statuscommands

The site dropped its closed-beta framing: ADD TO DISCORD now points to the bot's OAuth install link, and the status/commands pages reflect the live product.

MAJOR
v3.1.0 RELEASE

TypeScript Rewrite: Full Core Migration from Java to Node.js

The entire Kairoku engine was rewritten from Spring Boot + JDA into Node.js 22 + TypeScript + discord.js. Every command, menu, button, select, and embed matches the Java output byte-for-byte, the schedulers now run under Postgres advisory locks, and the app deploys as a single Dockerized Node process. The Java codebase is fully removed from the working tree (preserved in git history); see MIGRATION_PARITY.md for the parity ledger.

2026-08-30

Key Highlights

  • Full TypeScript Core: Spring Boot + JDA replaced by Node.js 22 + TypeScript + discord.js with byte-for-byte command and embed parity.
  • 273 Automated Tests: node:test suite covering command handlers, embeds, services, schedulers, and Java-parity contracts.
  • Resilient Schedulers: episode, release, and news jobs run under Postgres advisory locks with fixed-rate, drift-free timing and overlap protection.
  • AniList Reliability: token-bucket rate limiting (85 req/min), retry with exponential backoff, and a bounded 30-minute result cache.
  • Dockerized Deployment: multi-stage image, health-checked container, graceful SIGTERM shutdown, and an HTTP server that boots before login.

Improvements & Optimizations

Core Rewritten in TypeScript
commandsgeneral

Java/Spring/JDA engine fully replaced by Node.js 22 + TypeScript + discord.js. All five command roots (/ping, /releases, /kairoku, /user, /anime) behave identically, including autocomplete, selects, and buttons.

Embed & Interaction Parity
commands

Every embed (search, schedule, news, releases, server setup, subscriptions), custom ID prefix, and user-facing message matches the Java output byte-for-byte, verified by automated parity contracts.

Scheduler Starts After Login
general

The first episode-availability check runs only after the bot is online, eliminating wasted pre-login work.

Bounded AniList Cache
anime

The AniList response cache is now capped with expiry- and oldest-first eviction to prevent unbounded memory growth over long uptime.

Bug Fixes & Hardening

Crash-Proof Event Handling
generalsecurity

Interaction handlers and promise rejections are caught and logged, so transient Discord/API failures can no longer crash the bot process.

Subscription Queries Parallelized
animecommands

/anime subscriptions and /kairoku subscriptions now resolve anime details concurrently instead of serially, cutting multi-subscription latency.

New Features & Additions

Docker Deployment
setupgeneral

Multi-stage Dockerfile runs the compiled dist output as an unprivileged user with a health-check endpoint; docker-compose brings up the container with automatic restarts and graceful shutdown.

Security & Stability

Database & Secrets Hardening
databasesecurity

All database access is parameterized, .env stays gitignored, the bot uses no privileged Discord intents, and npm audit reports zero vulnerabilities.

Removed

Java Source Removed
general

src/main, src/test, pom.xml, Maven wrapper, and Spring resources were removed from the working tree. The complete Java history remains in git; MIGRATION_PARITY.md records the parity ledger.

FEATURE
v3.0.0 RELEASE

Anime Refocus: Real News, Watchlist, Server Automation & Music Removal

Kairoku pivots to anime updates and Discord community automation. Real anime news from Anime News Network (with Crunchyroll News/MAL failover), per-guild news channels, personal watchlist & favorites, idempotent server scaffolding, and the music player is removed from the active app (preserved at preserve/music-legacy). Crunchyroll account integration researched and reported as UNSUPPORTED (no official API).

2026-08-28

Key Highlights

  • Real Anime News: /anime news polls genuine ANN RSS articles with automatic feed failover; delivered to each guild's news channel.
  • Personal Watchlist & Favorites: /anime watchlist and /anime favorites show your saved shows, backed by AniList IDs.
  • Server Setup Automation: /kairoku setupserver idempotently creates/reuses an ANIME category, news/releases/discussion/announcements channels, an Anime role, and permission overwrites.
  • Music Removed: the music player, filters, radio, and history commands are no longer part of the active bot (code preserved at the preserve/music-legacy tag).
  • Crunchyroll Integration Report: research confirmed no official public API; see CRUNCHYROLL_INTEGRATION_REPORT.md.

New Features & Additions

Real Anime News System
animenewsgeneral

AnimeNewsService polls Anime News Network RSS every 10 minutes with failover to Crunchyroll News and MyAnimeList feeds. Articles are deduplicated by GUID and delivered to the configured per-guild news channel.

Personal Watchlist & Favorites
animeuser

/anime watchlist and /anime favorites render the user's saved anime from the database as clean numbered embeds.

Server Setup Automation
setupanimegeneral

/kairoku setupserver (Manage Server) scaffolds the ANIME category, channels, role, and permission overwrites idempotently.

Removed

Music Player & Related Commands
music

/music, /filter, /radio, /history, and /settings were removed from the active bot. The music implementation is preserved at git tag/branch preserve/music-legacy.

Security & Stability

RLS on Anime News Table
databasesecuritynews

kairoku_anime_news now has row-level security enabled (V12), consistent with other bot-internal tables.

PATCH
v2.6.1 RELEASE

Autoplay Reliability, Play History & Now Playing Cleanup

Stability patch closing autoplay repetition edge cases, fixing the /history play log, and streamlining the Now Playing embed.

2026-08-26

Key Highlights

  • Autoplay Repetition Fixes: Closed skipped-track history gap, query collapse, and blank-title dedup bypass that could cause repeated plays.
  • Play History Fixed: /history now reflects everything that actually played — including autoplay-selected tracks — instead of only manually requested songs.
  • Now Playing Timestamp Removed: The position/duration display (00:00 / 04:27) is no longer shown — title, artist, requester, and control buttons remain.
  • Commands Cleanup: /playlist and /lyrics removed entirely.
  • Audit Remediation: P0-P3 security and stability findings addressed.

Bug Fixes & Hardening

Autoplay Skipped-Track History Gap
musicautoplay

Skipped tracks were not recorded in autoplay history, allowing them to be reselected as candidates immediately after being skipped.

Autoplay Query Collapse
musicautoplay

Autoplay search queries could collapse to identical strings across successive picks, causing repeated track suggestions.

Autoplay Blank-Title Dedup Bypass
musicautoplay

Tracks with empty or blank titles bypassed the deduplication normaliser and were incorrectly allowed as candidates.

Play History Not Recording All Songs
musichistory

/history only showed manually requested tracks. Autoplay-selected songs were never written to the play history database, leaving the server play log mostly empty. Every track that plays is now recorded (autoplay entries use a system user), and Supabase write failures are now logged instead of silently ignored.

Improvements & Optimizations

Now Playing Timestamp Removed
music

The position/duration progress display (e.g. 00:00 / 04:27) has been removed from the Now Playing embed. Title, artist, requester, and all control buttons remain unchanged.

Removed

Playlist and Lyrics Commands Removed
commands

The /playlist and /lyrics commands have been removed entirely along with all associated infrastructure.

Security & Stability

Audit P0-P3 Findings Remediated
generalstatus

Resolved priority P0 through P3 security and stability findings identified in the latest audit pass.

FEATURE
v2.6.0 RELEASE

Anime Search Subscriptions, Role Mentions & Live Autocomplete

Comprehensive anime subscription and discovery upgrade: interactive search-based subscriptions with live AniList autocomplete, rich title & thumbnail resolution, server notification role mentions, and real-time timezone search.

2026-08-25

Key Highlights

  • Search-Based Anime Subscriptions: Subscribe to airing alerts directly by typing anime titles or AniList IDs with instant live autocomplete.
  • Rich Title & Cover Art Resolution: /anime subscriptions now displays full anime titles, AniList links, and cover thumbnails instead of raw numeric IDs.
  • Server Notification Role Mentions: Configure @Anime roles in /kairoku setup to notify members for episode releases.
  • Live Timezone Autocomplete: Real-time timezone search in /kairoku setup timezone across global IANA timezones with UTC offset calculations.
  • Live Radio Station Autocomplete: Fast station discovery and live radio search directly in Discord slash commands.

New Features & Additions

Search-Based Anime Subscriptions & Autocomplete
animecommands

Replaced manual ID entry in /anime subscribe and /kairoku subscribe with live interactive search. Autocomplete suggests matching anime with title, season year, and community score stars.

Configurable Anime Notification Roles
animecommands

Added anime_role options to /kairoku setup, allowing server admins to designate specific roles for anime episode alerts. Current roles are visible in /kairoku config.

Real-Time Timezone Autocomplete Search
commands

Slash command autocomplete for /kairoku setup timezone with support for popular global presets, country/city keywords (e.g., IST, Tokyo, London, NY), and automatic UTC offset calculations.

Radio Station Live Search Autocomplete
musiccommands

Added instant autocomplete suggestions for popular radio streams and live radio-browser directory station search under /radio play.

Improvements & Optimizations

Rich Subscriptions Embed with Anime Titles & Links
animecommands

Updated /anime subscriptions and /kairoku subscriptions to dynamically resolve subscribed anime details from AniList, rendering clickable title links, anime IDs, and cover artwork.

PATCH
v2.5.1 RELEASE

Autoplay Diversity Fix & Lavalink Node Connection Fix

Patch release fixing two critical music issues: autoplay no longer repeats the same song or artist indefinitely, and Kairoku now correctly connects to the configured Lavalink nodes out of the box without requiring manual environment setup.

2026-08-21

Key Highlights

  • Autoplay Diversity: 5-stage candidate rejection now prevents the same song, artist, or recently played tracks from being selected again.
  • Context-Aware Query Generation: Autoplay searches using artist + style context — not the exact current song title — to find genuinely different music.
  • Atomic Concurrency Guard: A single-flight CAS lock prevents multiple autoplay triggers firing at the same time.
  • Unicode & Multi-Language Support: International track titles (Japanese, Korean, Arabic, Cyrillic) are now correctly handled for deduplication.
  • Edge-Case Hardening: Year remasters, named remixers, and numbered tracks are no longer falsely blocked or falsely allowed.

Bug Fixes & Hardening

Autoplay No Longer Repeats the Same Song
musicautoplay

The root cause was that autoplay used the exact current track title as the search query, which naturally returned the same track. It now uses a context-aware strategy based on artist and style, and rejects the seed track, queued tracks, and the last 15 played tracks.

Autoplay Artist Loop Eliminated
musicautoplay

A diversity scoring system now penalises consecutive plays from the same artist (streak dampening). After 2 songs from the same artist, autoplay switches to key title token search to discover adjacent artists in the same niche.

Concurrent Autoplay Trigger Race Condition
musicautoplay

Track-end events could previously fire multiple simultaneous autoplay resolution requests, causing unexpected tracks to start after the queue was cleared. An AtomicBoolean CAS guard and session epoch invalidation now prevent this entirely.

International Track Deduplication
musicautoplay

The old normaliser stripped all non-ASCII characters to empty strings, making Japanese, Korean, Arabic, and Cyrillic tracks bypass duplicate checks. The normaliser now preserves Unicode letters and numbers across all languages.

Improvements & Optimizations

Bounded Per-Guild Autoplay History
musicautoplay

Each server now maintains an independent rolling history of the last 15 autoplay tracks. Candidates matching any entry in that history are rejected before scoring. History is never shared between servers.

MAJOR
v2.5.0 RELEASE

Music Engine Overhaul & Setup Cleanup

Complete music system rewrite with strict multi-guild isolation, Lavalink failover chain, YouTube removal, metadata-based autoplay, and a clean single-message UI. Obsolete server setup infrastructure removed.

2026-08-21

Key Highlights

  • 3-Tier Provider Failover: Primary Lavalink (SSL) → Secondary Lavalink → SoundCloud — YouTube fully removed.
  • Strict Multi-Guild Isolation: Each server has its own independent player, queue, and scheduler — no cross-server interference.
  • Single Editable Now Playing Embed: One loading message edited in-place, no more duplicate or spam messages.
  • Metadata-Based Autoplay: Autoplay now searches using artist + title context for genuinely related tracks.
  • Stream Failure Suppression: Silent internal fallback on stream errors — no more spamming "Stream failed" in chat.
  • Removed Obsolete Setup Commands: /setup, /setup support, and /setup content commands and all infrastructure deleted.

Removed

Setup Command Removal
setupcommands

Removed /setup, /setup support, and /setup content slash commands along with all associated setup and content seeding infrastructure (SupportServerRebuildService, ServerContentSeeder, and 14 related classes).

YouTube Fully Removed
music

YouTube is completely removed from the audio resolution chain. No YouTube searches, fallbacks, or direct URL loading exist anywhere in the codebase.

New Features & Additions

Lavalink 3-Tier Failover Chain
music

New AudioSourceResolver implements a strict sequential failover: Primary Lavalink (SSL, port 443) → Secondary Lavalink (non-SSL, port 80) → SoundCloud via LavaPlayer. Each tier has a configurable timeout. All providers configured via environment variables in .env — passwords never logged.

Bug Fixes & Hardening

Multi-Guild Isolation
musicstatus

Each guild now has a fully independent GuildMusicManager with its own AudioPlayer, TrackScheduler, queue, history, skip votes, and autoplay state. Playing in one server no longer affects or errors in another.

Stream Failed Spam Eliminated
music

Stream exceptions now trigger a silent internal source fallback. Discord users only see a message if every fallback tier fails. Repeated "Stream failed" embeds are fully suppressed.

Improvements & Optimizations

Single Editable Now Playing Embed
musiccommands

A /music play command now creates exactly one loading embed, which is edited in-place to become the Now Playing embed with controls. Subsequent tracks edit the same message — no new messages are created mid-session.

Metadata-Based Autoplay
music

Autoplay now builds contextual search queries from the finished track's artist and title metadata, selecting the highest-relevance candidate from 5 options. Prevents unrelated or disproportionately off-topic track selections.

Security & Stability

Lavalink Credentials via Environment Variables
musicstatus

Lavalink node host, port, and password are loaded from environment variables (LAVALINK_PRIMARY_*, LAVALINK_SECONDARY_*) defined in .env. Passwords are never printed in logs, stack traces, or HTTP headers.

MAJOR
v2.4.0 RELEASE

Audio Engine DSP, Democratic Skip Voting & Support Server Rebuild

Comprehensive audio processing overhaul featuring real-time DSP filters, democratic skip voting algorithms, centralized embed security, official support server rebuild engine, and dynamic command documentation.

2026-08-21

Key Highlights

  • Real-Time DSP Audio Filters: Speed modulation, pitch shifting, bass boost, nightcore, vaporwave, and karaoke.
  • Democratic Voice Skip Voting: 50% listener quorum threshold with dynamic recalculation on voice state changes.
  • Support Server Rebuild Subsystem: Automated 8-tier role hierarchy, 7 clean categories, and native AutoMod rule provisioning.
  • Dynamic JDA Command Documentation: Introspects registered slash commands to seed #commands and export web metadata.

New Features & Additions

Audio Filter DSP Pipeline
musiccommands

High-performance real-time digital signal processing pipeline supporting speed, pitch, bassboost, nightcore, vaporwave, and karaoke with strict per-guild audio state isolation.

Democratic Voice Skip Voting
musiccommands

Voice-channel track skipping using ceil(listeners * 0.5) threshold, automatically filtering deafened members and bots with dynamic threshold updates when listeners leave.

Official Support Server Rebuild Subsystem
setupgeneralcommands

Automated server provisioning engine that builds the official 8-tier role hierarchy, 7 lowercase categories, 27 channels, and native Discord AutoMod rules with explicit confirmation.

Dynamic JDA Command Documentation Engine
commandsgeneral

Automated introspection of registered JDA CommandData runtime definitions to generate categorized embeds for #commands and export synchronized web metadata.

Security & Stability

Centralized Embed Action Row Security
musicgeneral

Interactive player UI buttons (pause, skip, loop, shuffle, stop) now route through centralized permission, cooldown, and voice validation pipelines with DJ and moderator overrides.

Improvements & Optimizations

Intelligent Anti-Spam Rate Limiting
musicgeneral

Enforces granular per-user cooldowns (10s filter, 3s play, 1.5s volume) to prevent Discord API spam and resource exhaustion while allowing trusted DJ overrides.

Bug Fixes & Hardening

Atomic Vote Tracking via Concurrent Collections
musicstatus

Eliminates race conditions during concurrent voice voting using thread-safe ConcurrentHashMap key sets and volatile state visibility across JDA event dispatchers.

FEATURE
v2.3.0 RELEASE

AniList GraphQL Integration & Redis Multi-Tier Caching

Deep integration with AniList GraphQL and Kitsu APIs providing real-time seasonal anime discovery, airing countdowns, and distributed Redis response caching.

2026-08-01

Key Highlights

  • AniList GraphQL API Integration: High-speed metadata retrieval for search, trending, popular, and seasonal anime.
  • Real-Time Airing Schedule Engine: Live weekly airing calendar and countdown tracking for upcoming episodes.
  • Interactive Community Anime Games: character matchups and server ranking polls.
  • Distributed Redis Caching Layer: High-efficiency cache for GraphQL responses, minimizing external API latency and rate limits.

New Features & Additions

AniList GraphQL Media Discovery Suite
animecommands

Implemented comprehensive /anime search, trending, popular, and seasonal discovery powered by AniList GraphQL API v2.

Airing Schedule & Episode Countdowns
animecommands

Added /anime schedule, /anime today, and /anime next commands with localized Discord relative timestamp formats.

Interactive Anime Character Matchups
animecommands

Added community-driven /anime matchup features with ephemeral button interactions and scoring.

Improvements & Optimizations

Multi-Tier Redis Caching Engine
animestatus

Integrated Redis caching for frequent AniList GraphQL queries and seasonal data, drastically reducing latency and external API consumption.

Bug Fixes & Hardening

Unicode Character Formatting in Anime Synopses
anime

Fixed HTML entity decoding and markdown escaping bugs in long anime descriptions and character biographies.

FEATURE
v2.2.0 RELEASE

Live International Radio Directory & Supabase Playlist Cloud

Introduced international live radio station streaming via open community directories and synchronized user cloud playlists backed by Supabase PostgreSQL.

2026-07-15

Key Highlights

  • Live Radio Streaming: Instant playback of thousands of global shoutcast and icecast radio stations.
  • Supabase Cloud Playlist Persistence: Save, load, and manage custom playlists across multiple servers.
  • Automatic Voice Session Recovery: Resilient reconnection to voice channels upon Discord gateway reconnections.

New Features & Additions

Live Radio Streaming Subsystem
musiccommands

Added /radio command supporting real-time search and streaming across international radio station directories.

Supabase Cloud Playlist Engine
musiccommands

Integrated Supabase PostgreSQL database persistence for per-user custom playlists with /playlist save, load, and list.

Improvements & Optimizations

Voice Gateway Session Recovery
musicstatus

Implemented automatic voice channel reconnection and playback resumption after Discord gateway disconnections.

Bug Fixes & Hardening

Track Desynchronization on Abrupt Disconnects
music

Resolved state desynchronization issues in PlayerManager when members force-disconnect the bot during active playback.

MINOR
v2.1.0 RELEASE

Synchronized Lyrics Engine & Equalizer Presets

Added real-time synchronized LRC lyrics stream ingestion via LRCLIB, 15-band parametric equalizer presets, and server-level DJ role configuration.

2026-06-25

Key Highlights

  • Real-Time Synchronized Lyrics: Automatic LRC timestamp tracking with live-updating Discord embeds.
  • Parametric Equalizer Presets: Acoustic profiles for flat, bass, treble, electronic, and vocal enhancement.
  • Configurable Server Preferences: DJ role enforcement and 24/7 voice channel persistence mode.

New Features & Additions

LRCLIB Synchronized Lyrics Integration
musiccommands

Added /lyrics command fetching synchronized LRC lyrics with real-time highlighted playback position.

15-Band Equalizer Acoustic Presets
musiccommands

Introduced fine-tuned equalizer profiles for bass boost, vocal clarity, electronic, and rock acoustic balancing.

Improvements & Optimizations

Server DJ Role & 24/7 Playback Settings
commandsgeneral

Added /settings dj-role and /settings 247 configuration subcommands stored in local guild configuration repositories.

Bug Fixes & Hardening

LRC Timestamp Parsing Drift
music

Fixed millisecond offset calculations for variable bitrate audio tracks in LRC lyrics parsers.

MAJOR
v2.0.0 RELEASE

Kairoku 2.0 Core Architecture Overhaul

Complete ground-up rewrite of Kairoku on Java 21 LTS, Spring Boot 4.1.0, and JDA 6.5.0 featuring Lavalink v4 audio pipeline, Dave voice encryption, and neo-brutalist web platform.

2026-06-01

Key Highlights

  • Java 21 & Spring Boot 4 Architecture: Modern virtual-thread-ready backend with high-throughput event processing.
  • Lavalink v4 Audio Engine: Next-generation audio routing with Discord Dave voice session encryption support.
  • Modern Neo-Brutalist Web Platform: Next.js 16 web application with interactive documentation and status telemetry.
  • Comprehensive Slash Command Suite: Migrated all legacy prefix commands to Discord Slash Commands.

New Features & Additions

Java 21 & Spring Boot 4 Microservice Core
generalstatus

Rebuilt backend architecture leveraging Java 21 virtual threads, Spring Boot 4, and JDA 6 for high-concurrency event processing.

Lavalink v4 Audio Routing Subsystem
music

Integrated Lavalink v4 audio server supporting Discord Dave end-to-end voice encryption protocols.

Official Neo-Brutalist Web Platform
generalstatus

Launched official neo-brutalist website platform with real-time status telemetry and web changelog.

Improvements & Optimizations

Discord Slash Command Migration
commandsgeneral

Deprecated legacy prefix-based command handling in favor of native Discord Slash Commands with rich auto-completion.