Latest: v1.4.0

Changelog

Every update, improvement, and fix in the NULLWAVE platform.

v1.4.0Current
September 20, 2026
Guild Logging (/logging) — one channel, 14 event toggles, test button.
Sticky (/sticky) — panel setup, embed/plain toggle, custom header per channel.
Kick + warn included in guild logs.
Sticky delay on busy channels.
/sticky set option order error.
Double emoji in logging panel.
v1.3.7Patch
September 14, 2026
Trap 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.
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.
Trap Intro Counter — ComponentsV2 warning message with disabled button 🪤 X caught (non-interactable), trapCount in TrapConfig, auto-increment + edit on each trigger (TrapIntroBuilder.js).
Trap Schema & Panel — TrapConfig (trapChannelId, trapLogChannelId, punishment, timeoutDuration, reinvite, trapCount) + buildTrapPanel(guild, config, lng) with 4 buttons.
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).
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.
Leaderboard Background — LevelLbBgModal + LevelEditLbBg (hex/URL), displayed in LevelPanelBuilder, rendered via Leaderboard.js.
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 }).
Trap DM — Reworded to original non-honeypot copy: short restricted-channel notice + rejoin, no malware/security lecture (dmTitle/Desc/Rejoin).
TrapSettings.js — TypeError: setLabel is not a function on CheckboxBuilder → use setDefault() (label is on LabelBuilder).
TrapSettings.js — Channel selects required → setMinValues(0) + setRequired(false) + Label.data.required=false so submit without picking channel works.
TrapHandler.js — dmRejoin missing guild param → {{guild}} raw fixed.
CommandLog.js — Duplicate index on timestamp (index:true + TTL index) → remove index:true, keep TTL.
DevCl* modals — → corrupted to � by PowerShell encoding → replaced with → / --.
v1.3.6Patch
September 13, 2026
Config 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.
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`.
Components V2 panel redesign — `/level` panel rebuilt dengan `ContainerBuilder` + `MessageFlags.IsComponentsV2`, 4 tabs (home/settings/rewards/danger), `LevelNav.js` select menu.
Panel timer — Level.js + LevelDone.js simpan di `client.levelPanelTimers` (key userId, pola `robloxPanelTimers`), clear timer lama saat `/level` re-run.
LevelTest background (image URL) — LevelTest.js hanya pass hex (`startsWith("#") ? ... : undefined`) → URL image dibuang. Sekarang mirror logic LevelingHandler.js via `getValidImage()`.
LevelTest param & flags — `backgroundColor` → `background` (param benar `createLevelUpCard`), `ephemeral: true` → `flags: MessageFlags.Ephemeral` (5 lokasi).
LevelResetUserModal — `ephemeral: true` → `flags: MessageFlags.Ephemeral`.
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.
Locale — `xpInvalid`/`xpCooldownInvalid`/`voiceXp*` keys di en & id command.json.
v1.3.5Patch
August 27, 2026
buildRobloxPanel 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.
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.
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.
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.
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.
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.
RobloxSetKeyModal.js` wrong flag value** — `flags: [4096]` (`SuppressNotifications`) was used instead of `MessageFlags.Ephemeral` (`64`), making the follow-up message public instead of private.
RobloxDeleteHistory.js` late `deferUpdate()`** — moved to the very start of the handler, before DB calls, to avoid "Unknown interaction" errors on slow deletes.
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).
Added missing `event.modal.fail` and `event.button.notYourPanel` keys (EN & ID) — previously rendered as literal untranslated key names when triggered.
v1.3.4Patch
August 23, 2026
Native 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.
Unified Roblox Panel — All upload workflows (decal/audio) moved inside /robloxv2 panel navigation.
Legacy Upload Subcommands — Removed /roblox upload-decal and /roblox upload-audio standalone subcommands. Use /robloxv2 panel → Upload Decal/Audio pages.
v1.3.3Patch
August 22, 2026
Panel Auto-Close — Monitor panels are now automatically deleted after 2 minutes of inactivity; expired notifications also clean themselves up
Monitor Channel Routing — The 'Add' modal now follows the channel selected in the dropdown
Panel Expiry Edit — Fixed a V2 flag bug that silently prevented monitor panels from auto-closing
v1.3.2Update
August 22, 2026
Unified Monitor Panel — /monitor command replaced separate /monitor-server + /monitor-roblox. Single ContainerBuilder with category dropdown (Server/Roblox).
Channel Select Per Category — Server monitors output to channel A, Roblox monitors to channel B. Separate channel state per category.
Panel Auto-Close — Monitor panel disables components after 2min inactivity. Timeout resets on interaction (channel/category select).
Embed Cleanup on Stop — Monitor stop deletes embed message via messageId + channelId before DB deletion.
Legacy Monitor Commands — Removed /monitor-server + /monitor-roblox. All functionality unified in /monitor panel.
v1.3.1Update
August 19, 2026
Custom Poppins Level-Up Card — Modern pill card rendered via @napi-rs/canvas with Poppins typography
Robust Audio Detection — Multi-layer file-type-checker signature validation eliminates false 'unsupported format' errors
Monitor Duplicate Sends — Fixed race conditions & author check in SA-MP & Roblox monitors
Canvafy dependency removed — replaced with @napi-rs/canvas to prevent native canvas.node crashes on host
v1.3.0Update
August 18, 2026
Complete rebrand Qroxs → NULLWAVE — 33 files updated, new logo & banner
Audio upload pitch fix — true 44.1kHz MP3 via ffmpeg pipeline + asetrate resample for speed
Speed workflow — upload at 2x, set Sound.PlaybackSpeed = 0.5 in Roblox to restore original pitch
Changelog channel separation — auto-post changelog to dedicated changelogChannel
lamejs sample-rate bug — all audio uploads were pitch-shifted ~1.38x; fixed via ffmpeg encode
Goodbye/Welcome card crash — bannerURL() null on non-boosted guilds now falls back to default
Level Test button — now actually renders & sends the level-up card preview
v1.2.3Update
July 29, 2026
Roblox Monitor likes detection — live upVotes/downVotes from games.roblox.com/v1/games/votes
Group Upload support — toggle between Personal and Group upload mode
Upload History: Moderation status (Clean / Pending / Blocked) with live DB updates
Upload History: Speed info — Speed Multiplier + Playback Speed (Sound.PlaybackSpeed = 0.xxxx)
Speed upload now pitch-preserved (time-stretch via ffmpeg atempo) — no more chipmunk pitch shift
Upload History: Manual delete via dropdown select
Upload History: Immediate moderation check on upload
Custom emoji system — all emojis now config-driven (home, keyy, guidee, clipboard, links, cdmusic, timer)
Fixed youtube locale keys nested inside roblox object causing placeholder text to fail
Fixed missing modeGroup/modePersonal locale keys accidentally deleted during cleanup
Fixed uploads falsely showing as Clean — changed default status from approved to pending
Roblox Panel now uses local emoji fallback object for reliability
YouTube system removed (YouTubeUtils.js, YouTube.js, @vreden/youtube_scraper)
v1.2.2Update
July 27, 2026
Roblox Monitor panel upgraded to Components V2 (ContainerBuilder) with cleaner per-section layout
/monitor-roblox list upgraded to ContainerBuilder + StringSelectMenu (dropdown navigation)
/game command — 14 subgames (Connect4, TicTacToe, RPS, Flood, Minesweeper, Memory, Snake, Slots, 8Ball, Trivia, Wordle, Hangman, GuessThePokemon, TypeRace)
AutoRoleExecutor.js — auto-role assign logic separated from GuildMemberAdd
Custom emojis — levelup, user, bot, search, game, yellowtile, yellowplayer, redtile, redplayer, emptytile
Emoji System — unicode emojis replaced with custom emoji across 11+ files
Fixed client is not defined in panel builders
Fixed template literals not evaluating in double-quoted strings
Fixed BaseCommand require path
Fixed trailing spaces in emoji strings
Deleted ImageScanner.js / ScanImage.js (image scan system removed)
Refactored GuildMemberAdd and GuildMemberRemove handlers
AI comments cleaned from multiple files
v1.2.0Update
July 19, 2026
New Roblox command category with dedicated folder structure
Roblox panel guide — step-by-step API Key & User ID setup
Auto-save upload history with 7-day retention (MongoDB TTL)
Upload History page in Roblox panel — view recent decal/audio uploads
/samp-server command — query SA-MP server details
/samp-players command — list players with score & ping
Rebranded Vertex to NULLWAVE across all files, locales, and pages
Roblox User ID is now required in setup modal
Better help menu with category colors and select menu highlighting
Fixed Roblox API key URL in setup guide (create.roblox.com/dashboard/credentials)
v1.1.6Update
July 19, 2026
Multi-format audio upload — MP3, OGG, FLAC, and WAV supported with @audio/decode
Playback speed control (0.25x - 3.0x) — pitch-preserved time-stretch via ffmpeg atempo
FFmpeg fallback pipeline — handles non-standard audio files seamlessly
Live moderation status updates — polls Roblox API, auto-updates embed when approved/blocked
Direct multipart upload to Roblox Assets API — skip unnecessary proxy
Instant slash command refresh via dev guild registration
Audio duration validation now accurate for all formats using actual decoded samples
Moderation embed now correctly shows Blocked status (no longer overridden by description)
v1.1.5Update
June 25, 2026
Refactored MessageCreate — 374 lines split into 3 focused handlers (Leveling, AntiSpam, AntiLink)
Per-user slash command cooldown with live countdown (3s → 2s → 1s)
Cooldown messages now support 5 languages (EN, ID, BN, FR, PT-BR) via i18n
Rate limiting on Express API — 60 requests per minute per IP
MongoDB auto-reconnect with periodic health checks (10s retry, 60s interval)
Graceful shutdown handlers (SIGTERM/SIGINT) with process cleanup
Fixed /api/health to return real DB status via broadcastEval
Activity history now uses real command data instead of simulated random values
Removed dead StatsWriter module — replaced with in-memory tracking on client object
v1.1.4Update
June 23, 2026
Redesigned Monitoring Page cards with premium glassmorphism UI
Added real-time player counts to monitoring cards for SA:MP & Roblox
Fixed SA:MP monitor backend schema to properly save active player data
Applied dynamic starry animated background to the Landing Page
v1.1.3Update
June 20, 2026
AntiLink module — auto-delete suspicious links with configurable panel
Brand new Next.js landing page with premium tech design
Real-time status page with animated SVG charts
Full command reference page with search & category filters
Changelog page with version timeline
Monitoring dashboard with live SA:MP & Roblox monitor details
MonitorServer — updated query logic and parameter handling
Welcome panel — improved template rendering
Help command — updated command listing
Live activity graph on hero dashboard
Updated EN & ID locales with new command translations
Converted web server to pure API with CORS
v1.1.0Update
June 15, 2026
Full README documentation with NULLWAVE platform overview
Refreshed web dashboard stats and metrics
v1.0.0Initial Release
June 15, 2026
Complete moderation system (ban, kick, warn, timeout)
Auto-role and welcome message system
Reaction role configuration
Leveling and XP tracking system
SA:MP & Roblox server monitoring
Multi-language support (EN, ID)
Hybrid sharding for scalability
Express web dashboard with live stats
Suggestion system with approval/rejection
Review/rating system
Free game tracking