Changelog

All notable changes to ISEKAID Helper.

v2.6.2

Fixed

  • [FE] Mobile nav links overflow on landing page — hidden behind CTA on small screens
  • [FE] Sidebar dropdown doesn't close on outside click — now properly dismisses
  • [FE] Page header shows wrong title for sub-routes — fixed matching logic
  • [FE] Session stats grid unreadable on mobile — 2-column fallback
  • [FE] Dashboard loading skeleton instead of plain text
  • [FE] Login page now shows logo icon like landing page
  • [FE] Duplicate CSS declarations removed, disabled button styles added

v2.6.1

Fixed

  • [BE] CRITICAL — Suspended account keeps sending $map. Runtime suspension detection now stops automation immediately when Isekaid returns 'Suspended' embed mid-fight.
  • [BE] CRITICAL — Gold/EXP/Meat not tracked from fight results. Combat parser now strips Discord markdown (**bold**) before regex matching.
  • [BE] Sell gold regex broken by markdown — sell_f_rank_items() now strips **bold** before parsing gold amount.

v2.6.0

Fixed

  • [BE] Suspension bypass on bot start — start_bot() now checks both in-memory state and DB bot_status for suspension before allowing a new bot to start.
  • [BE] Auto-sell setting lost on restart — is_auto_selling now persisted to game_accounts and restored from DB on bot startup.
  • [BE] Session stats lost on Heroku restart — _run_bot() restores fight count, gold, meat, and exp from un-ended bot_sessions on reconnect.
  • [BE] Settings data_type not handled — _on_data_update() now routes 'settings' data to direct column writes (is_auto_selling).
  • [BE] Suspended session not ended — bot_sessions now properly end when state transitions to SUSPENDED.

Added

  • [FE] WebSocket real-time hook (useWebSocket.ts) — Reusable React hook with JWT auth, auto-reconnect with exponential backoff, and cleanup on unmount.
  • [FE] WebSocket integration in Dashboard — Overview page now receives instant state_change and data_update events via WebSocket.
  • [FE] WebSocket integration in Accounts — Accounts page now receives instant bot status updates and data merges via WebSocket.
  • [BE] Profession sync in periodic loop — do_mine() now runs every 5 minutes to populate mining/profession data for the Profession pages.

v2.5.0

Fixed

  • [BE] Periodic sync task leak — _periodic_sync_loop and _activity_watchdog tasks are now properly cancelled when bot.stop() is called. Previously they kept running after disconnect.
  • [BE] asyncio deprecation — Replaced deprecated asyncio.get_event_loop() with asyncio.get_running_loop() inside the CAPTCHA solver.
  • [BE] Material pagination — Page count now based on actual items on page 1 instead of hardcoded 10; correct for all server configurations.
  • [BE] Init sync errors swallowed — Each of the 4 init sync steps is now individually wrapped in try/except so a single failure no longer aborts the entire initialization.
  • [BE] BotManager DI consistency — All BotManager() singleton calls in the bot router replaced with request.app.state.bot_manager for proper dependency injection.
  • [BE] captcha_warning polluting game_logs — _on_log now only inserts fight events to game_logs; captcha warnings are WebSocket-only.
  • [BE] Dead import removed — Removed unused discord.ext.tasks import from selfbot.py.
  • [BE] Duplicate manual_refresh method removed — Cleaned up duplicate stub at the bottom of selfbot.py.
  • [BE] CAPTCHA flash detection threshold lowered — Threshold 0.05 → 0.02; falls back to random slot selection instead of ERROR on low-contrast CAPTCHAs.
  • [FE] Frozen button on expired session — botAction() now clears actionLoading before returning when session is null.
  • [FE] runningBots count — Header 'N active' now includes 'ready' bots, not just 'running'.
  • [FE] Overlapping setInterval on mapping page — Uses stable isAnyRunning boolean to prevent multiple polling intervals stacking up.
  • [FE] Excessive DB refetches from realtime — Mapping page only re-fetches on bot_status/profile_name changes, not every combat_data update.
  • [FE] createClient() inside health check loop — Supabase client created once, not on every interval tick.
  • [FE] Dropdown accessibility — Sign-out dropdown uses conditional rendering instead of display:none.
  • [FE] Sync button UX — Shows 'Syncing...' during API call; tooltip explains propagation delay.

Added

  • [BE] Activity watchdog now running — _activity_watchdog re-engages $map after 15s of inactivity, properly started alongside periodic sync at bot READY state.

v2.4.7

Added

  • Global Glow Loading Bar — Integrated nextjs-toploader to all pages for a beautiful, amber glowing progress bar that animates during route transitions and heavy loads.

v2.4.6

Added

  • Top Loading Progress Bar — Added an animated glowing linear progress bar at the very top of both Overview and Accounts pages that activates during initial data load and background control operations.

Fixed

  • Expired Discord CDN Images on Accounts Page — Applied the isDiscordUrlExpired verification to the Accounts page to prevent any 404 images from displaying on that screen, replacing them with fallback placeholders.

v2.4.5

Fixed

  • Expired Discord CDN Profile Images — Implemented a utility helper isDiscordUrlExpired to parse hex expiration (ex) parameter from Discord attachment URLs. Avoids browser 404 console errors.
  • Stale Profile Image Placeholders — Renders a dashed card prompting the user to start their bot to sync/refresh the image rather than leaving a broken image icon on expiration.

v2.4.4

Changed

  • Changelog Sync — Synchronized missing changelog entries for v2.4.1, v2.4.2, and v2.4.3.

v2.4.3

Added

  • vercel.json — Vercel deployment config for web/ subdirectory. Enables correct Next.js deployment from monorepo root via GitHub import.

v2.4.2

Fixed

  • Fight Button Exact Match — Replaced 'fight' in label substring search with exact match (b.label.strip().lower() === 'fight') to prevent accidentally clicking 'Battle All' or similar buttons.
  • Post-Victory Loop Missing — After winning a fight, bot now automatically sends $map after 2.5s delay (V1 pattern). Previously relied on 15s watchdog, leaving bot idle between fights.
  • Fight Button Helper Centralized — Extracted _find_fight_button() method used across _send_map_command and _handle_message, removing duplicated logic.

Changed

  • Mapping Page Redesigned — Removed HP/Energy/EXP bars (data unparseable since $p now returns an image). Replaced with live session stats: fight count, session time, gold earned, gold/hr, meat earned, meat/hr. Refreshes every 5 seconds.
  • Floor/Location Display — Current floor and monster level now shown from combat_data in account card header.

v2.4.1

Fixed

  • Fight Button Race Condition — discord.py-self dispatches on_message BEFORE wait_for() returns. This caused _handle_message() to always see _pending_fight_message_id as None, skipping the fight click entirely. Fixed by clicking the button directly on the response object in _send_map_command() after send_command() returns.

v2.4.0

Fixed

  • Mapping Page Broken — Status comparisons used uppercase strings ("RUNNING") while the database stores lowercase ("running"), making the entire Mapping page non-functional.
  • Silent Bot Action Failures — Start/Stop/Sell failures were silently swallowed; errors are now shown to the user.
  • sync_profile NameError Crash — Undefined dump_path variable crashed every profile sync. Replaced with clean logger debug calls.
  • supabase Variable Scope Bug — In _on_state_change, the supabase client was acquired inside the try block but used after the except block, causing NameError on failure.
  • Concurrent Bot Limit Bypassable on Restart — Active bot count now queries the database instead of the in-memory dict, which resets on server restart.
  • Start Mapping Resets Session Stats — resume_fight_loop() added to preserve fight_count, gold, exp across pause/resume cycles.
  • Fight Count Always Zero on Dashboard — session_fights key mismatch with frontend fight_count type. Both keys now returned.
  • Account Delete Orphaned Discord Channels — Channel is now cleaned up via manager_bot.delete_account_channel() on account deletion.
  • Admin Sub Update Didn't Sync Discord Role — update_user_role() now called automatically after admin tier changes.
  • AccountsPage Supabase Client Memory Leak — createClient() wrapped in useMemo to prevent new instances on every render.
  • Missing Rate Limiting on Bot Endpoints — /sell, /eat, /auto-sell, /battle-mode, /refresh, /sync now rate-limited.
  • Session Stats Interval Missed 'ready' Status — Polling now starts when any bot is 'running' or 'ready'.
  • Invalid :hover in Inline Style — React silently ignores pseudo-selectors in inline styles; removed.
  • alert() Replaced with Inline Errors — All native alert() calls in accounts page and mapping page replaced with inline error state.

Added

  • Battle Mode Toggle on Mapping Page — Auto/Manual badge on each account card, wired to POST /api/bot/battle-mode.

Changed

  • fetchSessionStats Parallelized — Sequential for-await loop changed to Promise.all for simultaneous bot stat fetches.
  • Subscription Type — Replaced any type in settings/page.tsx with a proper Subscription interface.

v2.3.0

Added

  • Auto-Join System: Selfbots now automatically start and join the designated Discord server immediately upon being added via the dashboard.
  • Dual Channel Architecture: The Manager Bot now automatically creates both a Private Dedicated Channel (for grinding) and assigns the bot to a Shared Trading Channel (for inter-account transfers) for every newly added account, regardless of subscription tier.

v2.2.4

Fixed

  • Dependency Architecture: Eliminated namespace conflicts by migrating fully to discord.py-self and removing generic discord.py dependencies.
  • State Integrity: Prevented potential session data corruption by resolving duplicated method signatures in the selfbot engine.
  • Security: Patched information leakage vulnerabilities in the authentication layer by suppressing unhandled exception stack traces.
  • Real-Time Scoping: Hardened WebSocket architecture by properly mapping broadcast events exclusively to authorized user IDs.
  • Rendering Performance: Eliminated infinite React re-renders across the dashboard components by memoizing Supabase client connections.
  • Administrative Tooling: Rewrote user deletion logic to utilize the Supabase Auth Admin API.

Changed

  • Rate Limiting: Implemented zero-dependency, sliding-window rate limiters across all critical bot control endpoints.
  • Path Resolution: Removed hardcoded local Windows system paths and replaced them with dynamic cross-environment references.
  • Session Middleware: Replaced legacy proxy implementations with strict Next.js middleware for reliable server-side JWT session token refresh.
  • DOM Hydration: Migrated remaining direct DOM manipulation components to use pure React state.
  • Database Schema: Upgraded bot session metrics columns to BIGINT to prevent integer overflow limits.

v2.2.3

Fixed

  • Endpoint Authentication: Secured the inter-account trading endpoints (`/api/trade/initiate` and `/api/trade/history`) with Supabase JWT bearer token verification to prevent unauthorized access.
  • Database Column Mismatch: Corrected trade history record mappings from backend keys `sender_account_id` / `receiver_account_id` to database physical columns `sender_id` / `receiver_id`, resolving database crashes on transfers.
  • Frontend JWT Authorization: Added missing `Authorization` bearer token header in the frontend trade request fetch, ensuring authorized communication with the secured API.
  • Config Hardcoding Cleanup: Removed the hardcoded Superadmin Discord ID string inside the admin router, converting the validation and auto-promotion checks to use settings configuration dynamically.

v2.2.2

Added

  • Manual Role Configuration: Added custom environment variables `DISCORD_ROLE_FREE_ID`, `DISCORD_ROLE_STARTER_ID`, etc., to allow manual mapping of Discord roles by ID.
  • Customizable Subscription Duration: Added custom subscription plan duration in days input to the Admin panel (defaulting to 30) and implemented exact UTC time calculations for the `expires_at` column.
  • Highly Detailed Expiry Display: Rendered localized expiry date and time details with seconds precision on both the Admin user lists and the Settings subscription display cards.

Changed

  • Removed Auto-Role Creation: Fully disabled automatic role creation by the manager bot. Subscription tier roles are now managed manually by the administrator.

v2.2.1

Fixed

  • Gateway Stability: Patched the `discord.py-self` gateway hook to drop user-only `GUILD_SUBSCRIBE` (OP 14) and `BULK_GUILD_SUBSCRIBE` (OP 37) packets for Bot account connections, resolving the issue where the manager bot frequently disconnected with close code 4001 (Unknown opcode).

v2.2.0

Added

  • Implemented Server-Based Architecture: Selfbots now operate in a dedicated Discord server rather than through Direct Messages.
  • Auto-Join System: Selfbots automatically join the official server upon starting up if they are not already members.
  • Manager Bot Verification: Manager Bot securely verifies incoming selfbots against the database and kicks unauthorized users automatically.
  • Shared Trading Channels: Pro Plan users now have all their game accounts automatically placed into a single shared Discord channel to facilitate automated inter-account trading.
  • Detailed Subscription Section: Created a premium detailed view in Settings for billing cycles (Monthly/Per Bulan), account slots, next invoice dates, and active feature matrix checklists.
  • Transfer Page Locks: Enforced subscription limits on the Transfer page, introducing a beautiful locked screen with direct upgrade paths for Free/Starter plans.
  • Dynamic Landing CTA: Automatically changes all landing page Sign In/Launch buttons to a primary solid filled 'Dashboard' button if the user is logged in.
  • Logo viewBox Tuning: Adjusted bounds from 120x120 to 140x140 in `logo.svg` to fix top and bottom clipping of the sword and star.
  • Footer Centralization: Integrated the honest disclaimer into a single cohesive, beautifully centered footer.

v2.1.15

Changed

  • Updated 'Account Contribution' table in Overview to explicitly break down values into 'Gold' and 'Meat' columns
  • Changed the font for table numbers from the display font to the standard sans-serif font for better readability

v2.1.14

Fixed

  • Forced a Next.js cache bypass to ensure the 3-column account layout applies properly for all users

v2.1.13

Changed

  • Locked the account card grid to exactly 3 columns on large desktop screens to prevent it from dividing into 4 columns on ultrawide monitors

v2.1.12

Changed

  • Updated layout of account cards to display in a responsive auto-filling grid (up to 3 columns) on desktop, making better use of wide screens

Fixed

  • Fixed Accounts page layout where action buttons squished the content on narrow grid columns
  • Updated Image Modal to be truly full-screen without padding, with a stronger blur and prominent close button

v2.1.11

Changed

  • Reverted the desktop layout of the game profile card back to a vertical stack (matching the mobile layout) for better proportions

v2.1.10

Added

  • Added a lightbox modal to zoom in on game character profile cards in the dashboard when clicked

v2.1.9

Added

  • Display the full game character profile card image (from $p) directly inside the dashboard overview and accounts list, eliminating the need to click 'Stats' to view it

v2.1.8

Added

  • Dashboard and Accounts list now display both the original Discord profile avatar and the in-game character avatar side-by-side (stacked style) so you don't have to open stats to see them

v2.1.7

Changed

  • Dashboard overview now prioritizes displaying the original Discord profile avatar over the in-game character avatar

v2.1.6

Changed

  • Adjusted the Total Value calculation formula. The conversion rate for Meat to Gold is now 1:1 (previously 1:10) to accurately reflect player economy logic

v2.1.5

Fixed

  • Fixed Global Balance incorrectly calculating Total Meat and Total Value due to Supabase 1000-row pagination limits when fetching materials
  • Upgraded multiple INTEGER columns to BIGINT in the database schema to prevent crashing on extremely wealthy accounts (whales)

v2.1.4

Fixed

  • Fixed Delete Account modal being constrained to the dashboard container by using React Portals to ensure it covers the entire screen

v2.1.3

Changed

  • Added a confirmation modal for account deletion requiring the user to type their Discord username to prevent accidental deletion

v2.1.2

Fixed

  • Fixed bot state synchronization issue where bots appeared running after a server restart
  • Gracefully handled unimplemented multi-bot trade logic by properly failing the requests
  • Added working cascade account deletion functionality in Settings page
  • Fixed React 18 strict-mode duplicate variable definitions causing random crashes

v2.1.1

Fixed

  • Fixed mobile layout squishing issues on the dashboard sidebar and account cards
  • Fixed TypeScript any linting errors and cascaded render warnings across dashboard pages
  • Standardized action buttons across the app

v2.1.0

Added

  • Global Stats Sidebar: Real-time aggregated view of Total Gold, Meat, and Value across all linked accounts

Fixed

  • Replaced bare exceptions in backend WebSocket logic with structured logger outputs

v2.0.1

Fixed

  • Unclickable Delete action button on smaller viewports by redesigning account cards container layout

Added

  • Premium glassmorphic confirmation modals for all bot actions (Start, Pause, Stop, Delete)
  • Interactive spinner and loading indicators during bot control requests

v2.0.0

Added

  • Complete platform rebuild from scratch
  • Next.js 16 frontend with TypeScript + Tailwind
  • FastAPI backend with async Supabase client
  • Discord OAuth authentication via Supabase
  • Fernet encryption for stored Discord tokens
  • Real-time dashboard with Supabase Realtime
  • Multi-account management with bot controls
  • Inventory tracking with material sync
  • Inter-account trading system
  • Mining & profession tracking
  • 4-tier subscription system (Free/Starter/Pro/Enterprise)
  • Design system following Huashu Design anti-slop principles

v1.0.0

Added

  • Initial release — single-account selfbot automation
  • Basic fight loop and inventory tracking