Updates
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.
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
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
Fixed client secret whitespace trimming and interval session verification queries so /anilist connect and list sync complete instantly without errors.
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...'.
Key Highlights
- Added interaction deferrals to setup processing to gracefully handle execution duration.
Bug Fixes & Hardening
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.
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.
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
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.
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.
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
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
Updated interaction replies across all commands to use MessageFlags.Ephemeral instead of deprecated options parameters, eliminating deprecation warnings in logs.
Bug Fixes & Hardening
Silenced unhandled button warnings for ephemeral command collectors (such as /report confirmation buttons) in the central interaction button router.
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.
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
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
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
The command pipeline now properly intercepts strict AniList 429 limits and gracefully notifies the Discord user directly instead of swallowing the exception.
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.
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
Anime results sourced from the Kitsu fallback provider are now blocked from being written to subscription or episode notification databases, preventing AniList ID collisions.
Search queries that are purely numeric (AniList IDs) now always go to AniList directly, preventing the Kitsu fallback from misinterpreting AniList IDs.
Non-numeric, non-positive, and overflow Kitsu IDs are dropped instead of being coerced to 0 or NaN, preventing phantom entries in search results.
Responses missing the required JSON:API data field or containing non-anime records are now rejected as malformed instead of producing empty anime objects.
Season derivation now uses standard month boundaries (Jan-Mar = Winter, etc.) instead of the previous incorrect ranges.
Kitsu subtypes are now case-insensitively matched (e.g. 'movie' maps to MOVIE), preventing unmapped lowercase variants from returning null.
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 stats and /user recommend now defer their reply before calling remote services, preventing Discord interaction timeouts.
The Favorite and Watchlist buttons defer immediately and handle database failures privately instead of showing Discord timeout errors.
New Features & Additions
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.
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.
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
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.
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
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.
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.
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
The /anime quiz trivia feature was removed. The quiz subcommand no longer appears in the command tree and its button interactions are gone.
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.
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.
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
New /anilist commands let users connect their AniList account: connect, disconnect, sync, and watchlist-status. Linked accounts sync watchlist and favorites in both directions.
Once linking finishes on the website callback page, the bot sends a green confirmation embed to your Discord DMs.
Improvements & Optimizations
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.
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
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
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.
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.
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
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.
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
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
Startup re-registration now covers all cached guilds and clears stale global commands, removing legacy commands (such as /music) from every server.
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.
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.
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
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.
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.
The first episode-availability check runs only after the bot is online, eliminating wasted pre-login work.
The AniList response cache is now capped with expiry- and oldest-first eviction to prevent unbounded memory growth over long uptime.
Bug Fixes & Hardening
Interaction handlers and promise rejections are caught and logged, so transient Discord/API failures can no longer crash the bot process.
/anime subscriptions and /kairoku subscriptions now resolve anime details concurrently instead of serially, cutting multi-subscription latency.
New Features & Additions
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
All database access is parameterized, .env stays gitignored, the bot uses no privileged Discord intents, and npm audit reports zero vulnerabilities.
Removed
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.
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).
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
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.
/anime watchlist and /anime favorites render the user's saved anime from the database as clean numbered embeds.
/kairoku setupserver (Manage Server) scaffolds the ANIME category, channels, role, and permission overwrites idempotently.
Removed
/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
kairoku_anime_news now has row-level security enabled (V12), consistent with other bot-internal tables.
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.
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
Skipped tracks were not recorded in autoplay history, allowing them to be reselected as candidates immediately after being skipped.
Autoplay search queries could collapse to identical strings across successive picks, causing repeated track suggestions.
Tracks with empty or blank titles bypassed the deduplication normaliser and were incorrectly allowed as candidates.
/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
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
The /playlist and /lyrics commands have been removed entirely along with all associated infrastructure.
Security & Stability
Resolved priority P0 through P3 security and stability findings identified in the latest audit pass.
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.
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
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.
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.
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.
Added instant autocomplete suggestions for popular radio streams and live radio-browser directory station search under /radio play.
Improvements & Optimizations
Updated /anime subscriptions and /kairoku subscriptions to dynamically resolve subscribed anime details from AniList, rendering clickable title links, anime IDs, and cover artwork.
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.
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
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.
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.
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.
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
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.
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.
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
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 is completely removed from the audio resolution chain. No YouTube searches, fallbacks, or direct URL loading exist anywhere in the codebase.
New Features & Additions
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
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 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
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.
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 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.
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.
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
High-performance real-time digital signal processing pipeline supporting speed, pitch, bassboost, nightcore, vaporwave, and karaoke with strict per-guild audio state isolation.
Voice-channel track skipping using ceil(listeners * 0.5) threshold, automatically filtering deafened members and bots with dynamic threshold updates when listeners leave.
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.
Automated introspection of registered JDA CommandData runtime definitions to generate categorized embeds for #commands and export synchronized web metadata.
Security & Stability
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
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
Eliminates race conditions during concurrent voice voting using thread-safe ConcurrentHashMap key sets and volatile state visibility across JDA event dispatchers.
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.
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
Implemented comprehensive /anime search, trending, popular, and seasonal discovery powered by AniList GraphQL API v2.
Added /anime schedule, /anime today, and /anime next commands with localized Discord relative timestamp formats.
Added community-driven /anime matchup features with ephemeral button interactions and scoring.
Improvements & Optimizations
Integrated Redis caching for frequent AniList GraphQL queries and seasonal data, drastically reducing latency and external API consumption.
Bug Fixes & Hardening
Fixed HTML entity decoding and markdown escaping bugs in long anime descriptions and character biographies.
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.
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
Added /radio command supporting real-time search and streaming across international radio station directories.
Integrated Supabase PostgreSQL database persistence for per-user custom playlists with /playlist save, load, and list.
Improvements & Optimizations
Implemented automatic voice channel reconnection and playback resumption after Discord gateway disconnections.
Bug Fixes & Hardening
Resolved state desynchronization issues in PlayerManager when members force-disconnect the bot during active playback.
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.
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
Added /lyrics command fetching synchronized LRC lyrics with real-time highlighted playback position.
Introduced fine-tuned equalizer profiles for bass boost, vocal clarity, electronic, and rock acoustic balancing.
Improvements & Optimizations
Added /settings dj-role and /settings 247 configuration subcommands stored in local guild configuration repositories.
Bug Fixes & Hardening
Fixed millisecond offset calculations for variable bitrate audio tracks in LRC lyrics parsers.
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.
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
Rebuilt backend architecture leveraging Java 21 virtual threads, Spring Boot 4, and JDA 6 for high-concurrency event processing.
Integrated Lavalink v4 audio server supporting Discord Dave end-to-end voice encryption protocols.
Launched official neo-brutalist website platform with real-time status telemetry and web changelog.
Improvements & Optimizations
Deprecated legacy prefix-based command handling in favor of native Discord Slash Commands with rich auto-completion.