feat: add Microbot Dashboard Plus plugin#479
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adds the Microbot Dashboard Plus monitoring plugin, providing a floating Swing dashboard window and a right-sidebar panel to view Microbot session state and optionally send Discord webhook notifications.
Changes:
- Introduces a background
GameStatePollerproducing immutablePollSnapshotdata for UI panels. - Adds multiple Swing UI sections (Player, Scripts, Inventory, Skills, Nearby NPCs, Antiban State, XP Chart, Event Log, Guide) plus a new
DashboardWindowcontainer. - Adds configuration + optional Discord webhook notifications and alert-threshold banner support.
Reviewed changes
Copilot reviewed 20 out of 25 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| src/main/resources/net/runelite/client/plugins/microbot/microbotdashboardplus/docs/README.md | New plugin documentation and feature list/screenshots. |
| src/main/java/net/runelite/client/plugins/microbot/microbotdashboardplus/MicrobotDashboardPlusPlugin.java | Plugin lifecycle wiring (poller, window, sidebar button, config change handling). |
| src/main/java/net/runelite/client/plugins/microbot/microbotdashboardplus/MicrobotDashboardPlusConfig.java | New config group/sections for behavior, layout, notifications, alerts. |
| src/main/java/net/runelite/client/plugins/microbot/microbotdashboardplus/poller/GameStatePoller.java | Poll loop building snapshots + notifications/alert callbacks. |
| src/main/java/net/runelite/client/plugins/microbot/microbotdashboardplus/data/PollSnapshot.java | Immutable data model passed from poller to UI. |
| src/main/java/net/runelite/client/plugins/microbot/microbotdashboardplus/data/XpHistory.java | XP sampling for deltas, rolling XP/hr, and chart history. |
| src/main/java/net/runelite/client/plugins/microbot/microbotdashboardplus/window/DashboardWindow.java | Floating Swing window layout, section visibility toggles, alert banner, bounds persistence. |
| src/main/java/net/runelite/client/plugins/microbot/microbotdashboardplus/DashboardPanel.java | Sidebar panel with summary stats, open/refresh actions. |
| src/main/java/net/runelite/client/plugins/microbot/microbotdashboardplus/panels/*.java | New dashboard sections (Scripts/Skills/Chart/etc.) rendering snapshot state. |
| src/main/java/net/runelite/client/plugins/microbot/microbotdashboardplus/notify/DiscordNotifier.java | Async Discord webhook sender with basic URL validation. |
| src/main/java/net/runelite/client/plugins/microbot/microbotdashboardplus/notify/AlertManager.java | Parses per-skill thresholds and dedupes threshold crossings. |
| | Feature | Description | | ||
| |---------|-------------| | ||
| | **Floating dashboard window** | A native Swing window that opens outside the game, keeping your canvas clear of stacked overlays | |
| * <p>Layout: 2-column GridBagLayout for the section grid, plus 3 full-width | ||
| * sections (Plus Plugins, Event Dismiss Stats, Event Log) that span both | ||
| * columns. |
| c.gridy = 6; | ||
| c.gridwidth = 2; | ||
| c.weighty = 1.0; | ||
| sectionGrid.add(new JPanel() {{ setOpaque(false); }}, c); |
| if (alertManager != null && alertManager.checkCrossing(skill, to)) { | ||
| alertFired = true; | ||
| Integer threshold = alertManager.thresholdFor(skill); | ||
| String alertMsg = skillName + " reached level " + threshold + "!"; |
| public void refreshNow() { | ||
| if (executor != null && !executor.isShutdown()) { | ||
| executor.submit(this::tickSafely); | ||
| } | ||
| } |
| /** Retention window for the sample deque. Long enough to feed the 24h chart. */ | ||
| public static final long RETENTION_WINDOW_MS = 24 * 60 * 60 * 1000L; // 24 h |
| long now = System.currentTimeMillis(); | ||
| Deque<Sample> samples = samplesBySkill.computeIfAbsent(skill, k -> new ArrayDeque<>()); | ||
| samples.addLast(new Sample(now, currentXp)); |
| playerValue.setText(snapshot.getPlayerName()); | ||
| worldValue.setText(String.valueOf(snapshot.getWorldId())); | ||
| scriptsValue.setText(snapshot.getActiveScripts() == null ? "0" | ||
| : Integer.toString(snapshot.getActiveScripts().size())); |
| public void showAlertBanner(String message) { | ||
| SwingUtilities.invokeLater(() -> { | ||
| if (alertBanner == null || alertBannerText == null) return; | ||
| alertBannerText.setText("🎯 " + (message == null ? "Threshold reached" : message)); |
…ale javadoc Caps XP samples per skill, captures the executor locally in refreshNow, falls back when the alert threshold changes mid-crossing, fixes the full-width-sections javadoc, replaces double-brace init and the banner emoji, and shows -- for the world before login. Addresses Copilot review feedback on chsami#479. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Addressed: XP history now has a hard per-skill sample cap so memory stays bounded at any poll rate, refreshNow captures the executor locally, the alert message falls back to the crossing level if the threshold changes mid-flight, the stale full-width-sections javadoc is corrected, double-brace initialization is replaced, the banner emoji is replaced with plain text, and the sidebar shows -- for the world before login. On the README comment: the table is standard single-pipe Markdown (no double pipes in the file). |
…community feedback (v1.2.1) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
chsami
left a comment
There was a problem hiding this comment.
Reviewed for critical/security issues, malicious code, and plugin version bump. No blocking issues found.
Summary
New plugin: Microbot Dashboard Plus, a floating session-monitor window that polls game state in-process (no agent server or external setup) and renders live panels:
Optional Discord webhook alerts (user-supplied webhook URL, off by default) for level-ups, deaths, logouts, and idle warnings. Every panel has a show/hide toggle. All client reads happen on the client thread; UI updates on the EDT.
This is the suite-trimmed edition (v1.2.0): panels that depended on my local tooling were removed so everything in the window populates for any user out of the box.
Contents
microbotdashboardplus/(Plugin, Config, DashboardPanel + window, poller, data model, notify, 9 panels)resources/.../microbotdashboardplus/docs/README.md+assets/(icon, card, screenshots)Testing
./gradlew clean buildgreen on JDK 11 (Temurin), matching CI;generatePluginsJsonmetadata correct.🤖 Generated with Claude Code