Latest: v1.4.0
Changelog
Every update, improvement, and fix in the NULLWAVE platform.
v1.4.0Current
September 20, 2026Guild Logging (/logging) — one channel, 14 event toggles, test button.New
Sticky (/sticky) — panel setup, embed/plain toggle, custom header per channel.New
Kick + warn included in guild logs.New
Sticky delay on busy channels.Fix
/sticky set option order error.Fix
Double emoji in logging panel.Fix
v1.3.7Patch
September 14, 2026Trap Channel (/trap) — Components V2 panel with accent color and 120s expiry. Settings modal uses LabelBuilder + ChannelSelectMenu + RadioGroup (softban / ban / kick / timeout / disabled) + Checkbox for reinvite. Auto-creates #dont-message if missing; fully localized.New
Trap Handler — Deletes trigger message, applies punishment (softban = ban+unban 24h, kick, ban, timeout 10m), sends DM with 1-use reinvite, posts log embed (created/joined/punishment/preview). 10s trapBanLock + ManageMessages bypass.New
Trap Intro Counter — ComponentsV2 warning message with disabled button 🪤 X caught (non-interactable), trapCount in TrapConfig, auto-increment + edit on each trigger (TrapIntroBuilder.js).New
Trap Schema & Panel — TrapConfig (trapChannelId, trapLogChannelId, punishment, timeoutDuration, reinvite, trapCount) + buildTrapPanel(guild, config, lng) with 4 buttons.New
CommandLog Analytics — CommandLog (TTL 30d) + CommandLogConfig (enabled, channelId, schedule, nextReportAt). Tracking in InteractionCreate.js (latency + error). Scheduler CommandLogScheduler.js (weekly/monthly/interval). Report CommandLogReport.js (7d vs prev 7d, ContainerBuilder).New
Dev Panel — /dev commandlog with buttons DevClSchedule / Toggle / View / Status / Test / SetChannel, modals Weekly / Monthly / Interval / Time, selects Mode / Tz / Channel. Initialized in Ready.js.New
Leaderboard Background — LevelLbBgModal + LevelEditLbBg (hex/URL), displayed in LevelPanelBuilder, rendered via Leaderboard.js.New
Locale — New command:trap.* namespace (40+ keys) in en + id: panel, buttons, modals, actions, warnings, log, DM, expired. All Trap code now uses t("command:trap.*", { lng }).Change
Trap DM — Reworded to original non-honeypot copy: short restricted-channel notice + rejoin, no malware/security lecture (dmTitle/Desc/Rejoin).Change
TrapSettings.js — TypeError: setLabel is not a function on CheckboxBuilder → use setDefault() (label is on LabelBuilder).Fix
TrapSettings.js — Channel selects required → setMinValues(0) + setRequired(false) + Label.data.required=false so submit without picking channel works.Fix
TrapHandler.js — dmRejoin missing guild param → {{guild}} raw fixed.Fix
CommandLog.js — Duplicate index on timestamp (index:true + TTL index) → remove index:true, keep TTL.Fix
DevCl* modals — → corrupted to � by PowerShell encoding → replaced with → / --.Fix
v1.3.6Patch
September 13, 2026Config cache `getLevelConfig()` — LevelingHandler.js cache per-guild TTL 30 detik untuk jalur pesan. 25 pesan = 1 query `levelConfigs` (sebelumnya 25 query). Panel & components tetap baca DB langsung — fresh ≤30s.Improvement
Voice XP system — interval-based (30s tick, per-guild throttle `voiceXpTicks`), skip bot & AFK channel, XP random `voiceXpMin`–`voiceXpMax`, `awardXp()` shared dengan chat. Toggle `voiceXpEnabled` terpisah dari `enabled`.New
Components V2 panel redesign — `/level` panel rebuilt dengan `ContainerBuilder` + `MessageFlags.IsComponentsV2`, 4 tabs (home/settings/rewards/danger), `LevelNav.js` select menu.New
Panel timer — Level.js + LevelDone.js simpan di `client.levelPanelTimers` (key userId, pola `robloxPanelTimers`), clear timer lama saat `/level` re-run.New
LevelTest background (image URL) — LevelTest.js hanya pass hex (`startsWith("#") ? ... : undefined`) → URL image dibuang. Sekarang mirror logic LevelingHandler.js via `getValidImage()`.Fix
LevelTest param & flags — `backgroundColor` → `background` (param benar `createLevelUpCard`), `ephemeral: true` → `flags: MessageFlags.Ephemeral` (5 lokasi).Fix
LevelResetUserModal — `ephemeral: true` → `flags: MessageFlags.Ephemeral`.Fix
Validasi XP bounds — LevelXpRateModal.js + LevelVoiceXpRateModal.js: `xpMin`/`xpMax` 1–500, `xpCooldown` 1–600 (tolak 0), `voiceXpInterval` 30–3600, `xpMin > xpMax` ditolak, NaN/range → ephemeral error. `xpMax` dikembalikan 500, `xpCooldown` max 600.Fix
Locale — `xpInvalid`/`xpCooldownInvalid`/`voiceXp*` keys di en & id command.json.Fix
v1.3.5Patch
August 27, 2026buildRobloxPanel is not a function` crash** — 4 files (`RobloxRemoveKey.js`, `RobloxToggleMode.js`, `RobloxSetKeyModal.js`, `RobloxDeleteHistory.js`) were still calling the old `buildRobloxPanel` function name, which no longer exists after the V2 panel refactor (`RobloxPanelBuilder.js` only exports `buildRobloxPanelV2`). This also caused a cascading `MESSAGE_CANNOT_REMOVE_COMPONENTS_V2_FLAG` error whenever the crash triggered a fallback plain-text reply on an already-V2 message.Fix
RobloxUploadModal.js` infinite retry duplication** — success path was missing a `return`, causing the upload loop to re-run (re-download, re-upload, duplicate DB entries, duplicate moderation polling) even after a successful upload.Fix
RobloxUploadModal.js` wasted retries on permanent errors** — added `FINAL_ERROR_CODES` so unsupported format / too large / invalid API key errors fail immediately instead of retrying 3x for no reason.Fix
RobloxUploadOpen.js` missing ownership check** — any user could trigger another user's upload modal and clear their panel timer; ownership check now runs before any side effects.Fix
RobloxApi.js` panel timer overwrite** — re-running `/roblox` before the previous panel expired silently orphaned the old timeout instead of clearing it, risking a stray "panel expired" edit on the wrong message.Fix
ModalCreate.js` invalid error reply on V2 messages** — error fallback was sending `content` alongside `MessageFlags.IsComponentsV2`, which Discord rejects; now sends a proper `ContainerBuilder` for Roblox modals and keeps the original Ephemeral behavior for all other modals.Fix
RobloxSetKeyModal.js` wrong flag value** — `flags: [4096]` (`SuppressNotifications`) was used instead of `MessageFlags.Ephemeral` (`64`), making the follow-up message public instead of private.Fix
RobloxDeleteHistory.js` late `deferUpdate()`** — moved to the very start of the handler, before DB calls, to avoid "Unknown interaction" errors on slow deletes.Fix
RobloxUploadModal.js` moderation status stuck on "Under review"** — the background recheck loop only updated the database record when the moderation status changed, but never edited the Discord embed itself. Users kept seeing a stale "Under review" state in the panel long after Roblox had actually finished reviewing (or removed) the asset. The loop now rebuilds the embed and edits the original message on every status change, falling back to a direct `message.edit()` if the interaction's webhook token has expired (~15 min).Fix
Added missing `event.modal.fail` and `event.button.notYourPanel` keys (EN & ID) — previously rendered as literal untranslated key names when triggered.New
v1.3.4Patch
August 23, 2026Native File Upload in Roblox Panel — /robloxv2 panel now supports direct file upload via Discord.js v14.27.0 FileUploadBuilder + LabelBuilder. Upload decal/audio directly from modal without external URL.New
Unified Roblox Panel — All upload workflows (decal/audio) moved inside /robloxv2 panel navigation.New
Legacy Upload Subcommands — Removed /roblox upload-decal and /roblox upload-audio standalone subcommands. Use /robloxv2 panel → Upload Decal/Audio pages.Removed
v1.3.3Patch
August 22, 2026Panel Auto-Close — Monitor panels are now automatically deleted after 2 minutes of inactivity; expired notifications also clean themselves upNew
Monitor Channel Routing — The 'Add' modal now follows the channel selected in the dropdownImprovement
Panel Expiry Edit — Fixed a V2 flag bug that silently prevented monitor panels from auto-closingFix
v1.3.2Update
August 22, 2026Unified Monitor Panel — /monitor command replaced separate /monitor-server + /monitor-roblox. Single ContainerBuilder with category dropdown (Server/Roblox).New
Channel Select Per Category — Server monitors output to channel A, Roblox monitors to channel B. Separate channel state per category.New
Panel Auto-Close — Monitor panel disables components after 2min inactivity. Timeout resets on interaction (channel/category select).New
Embed Cleanup on Stop — Monitor stop deletes embed message via messageId + channelId before DB deletion.Fix
Legacy Monitor Commands — Removed /monitor-server + /monitor-roblox. All functionality unified in /monitor panel.Removed
v1.3.1Update
August 19, 2026Custom Poppins Level-Up Card — Modern pill card rendered via @napi-rs/canvas with Poppins typographyNew
Robust Audio Detection — Multi-layer file-type-checker signature validation eliminates false 'unsupported format' errorsNew
Monitor Duplicate Sends — Fixed race conditions & author check in SA-MP & Roblox monitorsFix
Canvafy dependency removed — replaced with @napi-rs/canvas to prevent native canvas.node crashes on hostFix
v1.3.0Update
August 18, 2026Complete rebrand Qroxs → NULLWAVE — 33 files updated, new logo & bannerNew
Audio upload pitch fix — true 44.1kHz MP3 via ffmpeg pipeline + asetrate resample for speedNew
Speed workflow — upload at 2x, set Sound.PlaybackSpeed = 0.5 in Roblox to restore original pitchNew
Changelog channel separation — auto-post changelog to dedicated changelogChannelNew
lamejs sample-rate bug — all audio uploads were pitch-shifted ~1.38x; fixed via ffmpeg encodeFix
Goodbye/Welcome card crash — bannerURL() null on non-boosted guilds now falls back to defaultFix
Level Test button — now actually renders & sends the level-up card previewFix
v1.2.3Update
July 29, 2026Roblox Monitor likes detection — live upVotes/downVotes from games.roblox.com/v1/games/votesNew
Group Upload support — toggle between Personal and Group upload modeNew
Upload History: Moderation status (Clean / Pending / Blocked) with live DB updatesNew
Upload History: Speed info — Speed Multiplier + Playback Speed (Sound.PlaybackSpeed = 0.xxxx)New
Speed upload now pitch-preserved (time-stretch via ffmpeg atempo) — no more chipmunk pitch shiftFix
Upload History: Manual delete via dropdown selectNew
Upload History: Immediate moderation check on uploadNew
Custom emoji system — all emojis now config-driven (home, keyy, guidee, clipboard, links, cdmusic, timer)New
Fixed youtube locale keys nested inside roblox object causing placeholder text to failFix
Fixed missing modeGroup/modePersonal locale keys accidentally deleted during cleanupFix
Fixed uploads falsely showing as Clean — changed default status from approved to pendingFix
Roblox Panel now uses local emoji fallback object for reliabilityFix
YouTube system removed (YouTubeUtils.js, YouTube.js, @vreden/youtube_scraper)Change
v1.2.2Update
July 27, 2026Roblox Monitor panel upgraded to Components V2 (ContainerBuilder) with cleaner per-section layoutNew
/monitor-roblox list upgraded to ContainerBuilder + StringSelectMenu (dropdown navigation)New
/game command — 14 subgames (Connect4, TicTacToe, RPS, Flood, Minesweeper, Memory, Snake, Slots, 8Ball, Trivia, Wordle, Hangman, GuessThePokemon, TypeRace)New
AutoRoleExecutor.js — auto-role assign logic separated from GuildMemberAddNew
Custom emojis — levelup, user, bot, search, game, yellowtile, yellowplayer, redtile, redplayer, emptytileNew
Emoji System — unicode emojis replaced with custom emoji across 11+ filesImprovement
Fixed client is not defined in panel buildersFix
Fixed template literals not evaluating in double-quoted stringsFix
Fixed BaseCommand require pathFix
Fixed trailing spaces in emoji stringsFix
Deleted ImageScanner.js / ScanImage.js (image scan system removed)Change
Refactored GuildMemberAdd and GuildMemberRemove handlersChange
AI comments cleaned from multiple filesChange
v1.2.0Update
July 19, 2026New Roblox command category with dedicated folder structureNew
Roblox panel guide — step-by-step API Key & User ID setupNew
Auto-save upload history with 7-day retention (MongoDB TTL)New
Upload History page in Roblox panel — view recent decal/audio uploadsNew
/samp-server command — query SA-MP server detailsNew
/samp-players command — list players with score & pingNew
Rebranded Vertex to NULLWAVE across all files, locales, and pagesImprovement
Roblox User ID is now required in setup modalImprovement
Better help menu with category colors and select menu highlightingImprovement
Fixed Roblox API key URL in setup guide (create.roblox.com/dashboard/credentials)Fix
v1.1.6Update
July 19, 2026Multi-format audio upload — MP3, OGG, FLAC, and WAV supported with @audio/decodeNew
Playback speed control (0.25x - 3.0x) — pitch-preserved time-stretch via ffmpeg atempoNew
FFmpeg fallback pipeline — handles non-standard audio files seamlesslyNew
Live moderation status updates — polls Roblox API, auto-updates embed when approved/blockedNew
Direct multipart upload to Roblox Assets API — skip unnecessary proxyImprovement
Instant slash command refresh via dev guild registrationImprovement
Audio duration validation now accurate for all formats using actual decoded samplesFix
Moderation embed now correctly shows Blocked status (no longer overridden by description)Fix
v1.1.5Update
June 25, 2026Refactored MessageCreate — 374 lines split into 3 focused handlers (Leveling, AntiSpam, AntiLink)Improvement
Per-user slash command cooldown with live countdown (3s → 2s → 1s)New
Cooldown messages now support 5 languages (EN, ID, BN, FR, PT-BR) via i18nNew
Rate limiting on Express API — 60 requests per minute per IPNew
MongoDB auto-reconnect with periodic health checks (10s retry, 60s interval)New
Graceful shutdown handlers (SIGTERM/SIGINT) with process cleanupNew
Fixed /api/health to return real DB status via broadcastEvalNew
Activity history now uses real command data instead of simulated random valuesFix
Removed dead StatsWriter module — replaced with in-memory tracking on client objectChange
v1.1.4Update
June 23, 2026Redesigned Monitoring Page cards with premium glassmorphism UIImprovement
Added real-time player counts to monitoring cards for SA:MP & RobloxNew
Fixed SA:MP monitor backend schema to properly save active player dataFix
Applied dynamic starry animated background to the Landing PageNew
v1.1.3Update
June 20, 2026AntiLink module — auto-delete suspicious links with configurable panelNew
Brand new Next.js landing page with premium tech designNew
Real-time status page with animated SVG chartsNew
Full command reference page with search & category filtersNew
Changelog page with version timelineNew
Monitoring dashboard with live SA:MP & Roblox monitor detailsNew
MonitorServer — updated query logic and parameter handlingImprovement
Welcome panel — improved template renderingImprovement
Help command — updated command listingImprovement
Live activity graph on hero dashboardImprovement
Updated EN & ID locales with new command translationsChange
Converted web server to pure API with CORSChange
v1.1.0Update
June 15, 2026Full README documentation with NULLWAVE platform overviewImprovement
Refreshed web dashboard stats and metricsImprovement
v1.0.0Initial Release
June 15, 2026Complete moderation system (ban, kick, warn, timeout)New
Auto-role and welcome message systemNew
Reaction role configurationNew
Leveling and XP tracking systemNew
SA:MP & Roblox server monitoringNew
Multi-language support (EN, ID)New
Hybrid sharding for scalabilityNew
Express web dashboard with live statsNew
Suggestion system with approval/rejectionNew
Review/rating systemNew
Free game trackingNew