Skip to content

feat: add Microbot Dashboard Plus plugin#479

Merged
chsami merged 3 commits into
chsami:developmentfrom
pjmarz:feat/microbotdashboardplus-plugin
Jun 16, 2026
Merged

feat: add Microbot Dashboard Plus plugin#479
chsami merged 3 commits into
chsami:developmentfrom
pjmarz:feat/microbotdashboardplus-plugin

Conversation

@pjmarz

@pjmarz pjmarz commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

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:

  • Player: combat, login state, world, session time, position, animation
  • Active Scripts: every enabled user-facing Microbot plugin with runtime and a per-row Stop button
  • Skills: all 23 skills with level, total XP, session gain, rolling 5-minute XP/hr, and ETA to a per-skill target level
  • XP over time: line chart with skill picker and a 5-minute to 24-hour window
  • Inventory: live item grid (noted items styled distinctly)
  • Nearby NPCs: sorted by distance with a max-distance filter; random-event NPCs highlighted
  • Antiban State: distinguishes a genuine stall from an intentional antiban pause (action cooldown, micro break, global pause, blocking events)
  • Event Log: rolling login, logout, and world-hop history
  • Guide: in-window panel reference, hideable once learned

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 build green on JDK 11 (Temurin), matching CI; generatePluginsJson metadata correct.
  • Manual: opened the dashboard during a live session; all panels populate (skills ETA, XP chart, inventory, NPC list, antiban state); per-row script Stop works; panel toggles hide/show sections; Discord alert fires on a test webhook; closing the window and disabling the plugin shuts the poller down cleanly.

🤖 Generated with Claude Code

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings June 9, 2026 23:03

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 GameStatePoller producing immutable PollSnapshot data for UI panels.
  • Adds multiple Swing UI sections (Player, Scripts, Inventory, Skills, Nearby NPCs, Antiban State, XP Chart, Event Log, Guide) plus a new DashboardWindow container.
  • 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.

Comment on lines +11 to +13
| Feature | Description |
|---------|-------------|
| **Floating dashboard window** | A native Swing window that opens outside the game, keeping your canvas clear of stacked overlays |
Comment on lines +55 to +57
* <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);
Comment on lines +247 to +250
if (alertManager != null && alertManager.checkCrossing(skill, to)) {
alertFired = true;
Integer threshold = alertManager.thresholdFor(skill);
String alertMsg = skillName + " reached level " + threshold + "!";
Comment on lines +192 to +196
public void refreshNow() {
if (executor != null && !executor.isShutdown()) {
executor.submit(this::tickSafely);
}
}
Comment on lines +27 to +28
/** 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
Comment on lines +41 to +43
long now = System.currentTimeMillis();
Deque<Sample> samples = samplesBySkill.computeIfAbsent(skill, k -> new ArrayDeque<>());
samples.addLast(new Sample(now, currentXp));
Comment on lines +146 to +149
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>
@pjmarz

pjmarz commented Jun 9, 2026

Copy link
Copy Markdown
Contributor Author

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 chsami left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed for critical/security issues, malicious code, and plugin version bump. No blocking issues found.

@chsami chsami merged commit e9b7be9 into chsami:development Jun 16, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants