Skip to content

Releases: nextgearslab/DashCord

v1.8.0 - Dynamic Response Templating & 3rd-Party API Mapping

Choose a tag to compare

@nextgearslab nextgearslab released this 02 Jul 22:00

Dynamic Response Templating & 3rd-Party API Mapping (v1.8.0)

DashCord v1.8.0 introduces the ability to map raw JSON responses from 3rd-party APIs directly into Discord-ready formatting. This release expands DashCord beyond webhook triggering, allowing it to act as a direct, headless API-to-Discord translation gateway. You can now build rich Discord UIs from external servers and APIs without writing custom middleware or Discord bot code.

🚀 New Features & Enhancements

  • 🪝 Dynamic Response Templating (response_template): Define a translation schema on any command. If a 3rd-party API (like OpenAI, GitHub, or a local REST endpoint) returns arbitrary JSON, DashCord parses the incoming keys using dot-notation ({{json.params.message}}) and formats them cleanly for the chat.
  • 🎨 Dynamic Discord Embed Generation: Construct rich Discord embeds natively using raw JSON values returned from your endpoints. Perfect for querying status APIs and instantly generating formatted server status cards or system vitals embeds.
  • 📚 Array/List Index Parsing: Access specific elements in JSON arrays returned by APIs using numeric index lookups (e.g., {{results.0.name}}).
  • 🥷 Dynamic Privacy Toggling: Determine message privacy on the fly by mapping the ephemeral boolean flag directly to keys inside the incoming API response (e.g., "ephemeral": "{{is_sensitive_data}}").
  • ⚙️ Unified Templating Engine: Refactored the outbound body formatter into a unified, recursive _render_template utility. This core helper now handles both outbound request building and inbound response mapping safely and recursively.

🧹 Documentation & Examples Overhaul

  • 📖 Step-by-Step Response Mapping Guide: Added an exhaustive walkthrough in the README that demonstrates capturing raw console responses from httpbin.org, tracing JSON key paths, and configuring the template schema.
  • ⚡ Sandbox Examples in routes.example.json: Overhauled the example configuration file with two distinct mapping templates:
    • ping: Demonstrates a text-based, self-contained echo test hitting httpbin.org.
    • uptime: Demonstrates mapping nested properties from an external system API directly into a multi-field Discord Embed.

v1.7.0 - Max Configuration, Live Timers & Stealth Routing

Choose a tag to compare

@nextgearslab nextgearslab released this 02 Jul 20:08

Max Configuration, Live Timers & Stealth Routing (v1.7.0)

DashCord v1.7.0 introduces unprecedented granularity to your headless Discord configuration. Every timing event, visual transition, emoji, and privacy state can now be overriden at the microscopic level - allowing minimalist, silent commands to live side-by-side with heavy, live-animating server dashboards.

🚀 New Features

  • ⏱️ Live Ticking Timers: Enabled via PANEL_STATUS_ANIMATE_ELAPSED on the panel or globally. Users can now watch a live execution counter tick up (1.5s -> 3.0s -> 4.5s) in the status line while waiting for long-running workflows to complete.
  • 🚧 API Maintenance Mode: Disable interactive panels on the fly by updating panel configurations with "disabled": true. DashCord will grey out and lock all buttons and dropdown menus on the message without altering your embed cards or content text.
  • 🥷 Stealth Commands: Suppress default chat reactions () per command with "reactions_enabled": false inside routes.json for stealthy or silent background pipeline triggers.
  • 🎨 Custom Panel Emojis: You are no longer restricted to global emojis. Define a custom emojis block inside any panel's status block to use custom Discord or unicode emojis (🟢/🔴 vs /) for distinct UI aesthetics.

⚡ Configuration & Webhook Upgrades

  • ⏳ Per-Command Webhook Timeouts: Webhooks executing heavy AI tasks or multi-stage compilations can now set custom limits using "timeout": 300 directly inside their command config, overriding the global HTTP_TIMEOUT_SECONDS fallback.
  • 🛡️ Ephemeral Slash Command Replies: Native Discord Slash Commands now natively respect the "ephemeral_replies": true command flag, allowing slash callbacks to execute and respond privately to the triggering user.
  • 📝 Expanded Metadata Placeholders: Webhook payloads and body templates can now reference {{timestamp}}, {{source}}, {{event_type}}, {{meta.timezone}}, and highly specific tracking IDs ({{discord.user_name}}, {{discord.guild_id}}, {{discord.guild_name}}, {{discord.message_id}}, {{discord.interaction_id}}).

🧹 Documentation & Examples Overhaul

  • 📖 Ultimate Master Config Reference: Upgraded routes.json.example with a beautifully organized, syntactically verified master reference showing both basic configs (ping, uptime, Simple_Alert, Quick_Actions) and hyper-advanced automation panels.
  • 📚 Hidden Feature Documentation: Thoroughly documented the hidden wildcard file extension behavior ("extensions": []), Concatenated JSON stream validation, slash command argument split parity, standard Authorization header support, and native webhook response unwrapping.

v1.6.0 - Slash Commands & Async Performance Overhaul

Choose a tag to compare

@nextgearslab nextgearslab released this 01 Jul 23:34

v1.6.0 - Slash Commands & Async Performance Overhaul

Slash Commands & Async Performance Overhaul (v1.6.0)

🚀 New Features

  • Native Slash Commands: Every command defined in routes.json is now automatically registered as a global Discord Application Slash Command (e.g., /weather, /ping). It includes an optional arguments input box for variables, allowing for a fully modern Discord UI experience.

⚡ Performance Overhaul

  • Fully Asynchronous Webhooks: Replaced the blocking requests library with native aiohttp.ClientSession. The bot now utilizes a single persistent connection pool, eliminating thread-blocking delays and speeding up HTTP triggers to external automation tools like n8n and Make.
  • Silenced SSL Warnings: The VERIFY_TLS=false flag now acts natively at the socket level, removing the annoying urllib3 terminal spam when hitting local IP addresses.

🐛 Bug Fixes

  • UI Persistence Fix: Fixed an issue where the panel_persist_loop and post_panels() routines were not securely attached to the bot's background event loop hook, causing sticky UI panels to fail to jump to the bottom of the chat.
  • Duplicate Panel Race Condition: Resolved an async race condition where post_panels() and panel_persist_loop concurrently ran at startup. The loop now explicitly waits for initialization to finish before starting, preventing the bot from spawning duplicate panels.
  • Persistent Memory Safety Net: Upgraded _persist_panel_once to actively scan channel history if its active panel memory is empty, ensuring it attaches to existing panels on reboot instead of spawning duplicates.
  • Unified Diagnostic Logs: Standardized the startup logging output so both text matching and component matching clearly report their channel location and connection state.
  • Enhanced Visibility Logging: Added explicit console logging for multi-file upload fan-outs, missing dynamic configurations, invalid JSON webhook responses, delayed persistence tracking, and slash command triggers.
  • Task Creation: Migrated legacy bot.loop.create_task calls to modern asyncio.create_task standards.

v1.5.0 - Dynamic REST API, Visual Status Indicators & Sticky UI Improvements

Choose a tag to compare

@nextgearslab nextgearslab released this 01 Jul 00:48

v1.5.0 - Dynamic REST API, Visual Status Indicators & Sticky UI Improvements

DashCord Dynamic REST API & Sticky UI Improvements (v1.5.0)

This release introduces programmatic UI management through a new REST API, provides real-time visual feedback for panel interactions via dynamic status emojis, provides greater control over panel headers, and adds configurable persistence delays for asynchronous external workflows.


🚀 New Features

📡 Programmatic REST API (Dynamic Routing)

You can now create, read, update, and delete Discord panels and commands at runtime via an inbound HTTP API.

  • Changes are processed in memory and persistently saved to a separate config/dynamic_routes.json file, allowing dynamic elements to survive bot restarts.
  • Supports Deep Merging (upsert) to partially update nested configurations.
  • Supports instant Discord edits (refresh) to update active panel text/embeds on the fly.
  • Secure token authentication enforced via the X-DashCord-Token HTTP header.

🎨 Real-Time Visual Status Indicators

Panel interactions now feature live visual feedback! When a button or dropdown is clicked, the UI dynamically updates to show progress and results.

  • Pending (⏳): The panel title and status line update immediately to show the action is processing.
  • Success/Fail (✅/❌): Once the webhook responds, the UI transitions to reflect the final status.
  • Toggles allow you to choose whether these emojis appear in the Embed Title, the top-left status line, or both.

🛡️ Per-Route API Access Controls

Added configuration flags inside routes.json to define API permissions for static, hardcoded routes:

  • "api_protected": true — Hides the route from API retrieval (get) and blocks any modifications.
  • "api_writable": true — Explicitly permits the API to overwrite or refresh a hardcoded static route.

🎛️ Header Toggles & Custom Text Keys on Panels

  • Added "show_title" configuration (and a global .env fallback PANEL_SHOW_TITLE_DEFAULT) to easily hide the default 🧩 DashCord Panel header.
  • Added support for the "content" key directly inside panel definitions to insert raw, un-embedded markdown text above your panel components.

⏳ Persistence Delays for Async Workflows

  • Added panel_persist_delay on commands (and a global .env fallback PANEL_PERSIST_ON_RESPONSE_DELAY).
  • This tells the bot to wait $X$ seconds before jumping the panel to the bottom of the channel. Highly useful if your automation platform (such as n8n or Make) sends secondary, delayed follow-up messages.

🔧 Configuration & Environment Updates

The following environment variables have been introduced in .env.example:

Environment Variable Default Value Description
API_ENABLED false Turns on the programmatic REST API server.
API_PORT 8080 Port bound by the local API server.
API_ALLOW_STATIC_OVERWRITE false Global fallback toggle allowing API edits to overwrite static routes.
PANEL_STATUS_EMOJI_TITLE true Show status emojis (✅/❌) in the text line above the embed.
PANEL_STATUS_EMOJI_IN_EMBED true Show status emojis (✅/❌) in the Embed Title.
PANEL_SHOW_TITLE_DEFAULT true Determines whether panels automatically display the default header.
PANEL_PERSIST_ON_RESPONSE true If true, active panels immediately jump to bottom after response.
PANEL_PERSIST_ON_RESPONSE_DELAY 0 Default seconds to wait before moving active panels to chat bottom.

⚙️ Optimizations & Enhancements

  • Syntax and Placeholder Parsing: Added explicit support for accessing list argument indices inside body templates (e.g., {{args.0}}).
  • UI Reliability: Fixed a bug where Discord's truncation of leading newlines caused status indicators to get "stuck" on the loading emoji.
  • Component Tracking: Optimized the historical message scanner to reliably identify active panels by parsing dynamic button/select custom IDs, preventing duplicate active panels.

📋 Migration & Upgrade Steps

API Activation: If utilizing the Dynamic API, enable API_ENABLED=true in your .env and configure appropriate ingress rules for port 8080.

v1.4.0 - Dashboard Overhaul: Embeds, Dropdowns, and Modals

Choose a tag to compare

@nextgearslab nextgearslab released this 18 Jun 22:56

Dashboard Overhaul: Embeds, Dropdowns, and Modals (v1.4.0)

This major release completely transforms DashCord from a simple button-forwarder into a full-stack, configuration-driven UI framework. You can now build highly polished, application-grade dashboards directly inside your Discord channels.


🚀 New Features

  • 🎛️ Select Dropdowns (selects): You are no longer restricted to Discord's 25-button clutter limit. You can now organize your workflows into clean, category-themed dropdown menus. Each select menu can host up to 25 items.
  • 📋 Interactive Form Modals (modal): Turn any button into a pop-up input form. Prompt users to submit text entries (short or paragraph format), which are seamlessly forwarded to your n8n, Make, or custom API endpoints under the new modal_inputs payload key.
  • 🎨 Custom Panel Embeds (embed): Give your dashboards professional branding. Panels can now be wrapped inside rich embeds with custom titles, descriptions, hex colors, and thumbnails.
  • ✨ Emoji Support: Buttons and dropdown menu options now natively support custom emojis to make your dashboard easy to read at a glance.

⚙️ Example Panel Config

Upgrading your panels is completely configuration-driven. Here is a look at a modern, high-density panel layout leveraging custom embeds, dropdowns, and modals:

"Home_Automation": {
  "channels": ["112233445566778899"],
  "embed": {
    "title": "🏠 Smart Home Hub",
    "color": "#3498db"
  },
  "selects": [
    {
      "placeholder": "🌤️ Weather & Environment...",
      "options": [
        { "label": "Get Local Weather", "command": "weather", "args": ["now"], "emoji": "🌤️" },
        { "label": "Check Indoor Temp", "command": "weather", "args": ["indoor"], "emoji": "🌡️" }
      ]
    }
  ],
  "buttons": [
    {
      "label": "Run AI Task",
      "command": "advanced-ai",
      "args": ["force"],
      "style": "success",
      "emoji": "🧠"
    },
    { 
      "label": "Log Weight", 
      "command": "googlehealth", 
      "args": ["log_weight"], 
      "style": "primary", 
      "emoji": "⚖️",
      "modal": {
        "title": "Log Daily Weight",
        "inputs": [
          { "id": "weight_lbs", "label": "Weight (lbs)", "placeholder": "e.g. 185.2", "required": true },
          { "id": "notes", "label": "Notes (Optional)", "placeholder": "How are you feeling?", "required": false, "long": true }
        ]
      }
    }
  ]
}

📦 Updated Webhook Payload

When a modal form is submitted, your webhook receives the inputs cleanly aligned under a parent "modal_inputs" key:

{
  "source": "discord",
  "event_type": "panel_action",
  "command": "googlehealth",
  "args": ["log_weight"],
  "timestamp": "2026-06-18T17:15:48-04:00",
  "discord": {
    "user_display": "D🪐PE",
    "channel_name": "fitbit-general"
  },
  "modal_inputs": {
    "weight_lbs": "185.2",
    "notes": "Added support for interactive dropdown menus."
  }
}

v1.3.0 - Custom HTTP Headers Support

Choose a tag to compare

@nextgearslab nextgearslab released this 03 May 15:43

This release adds the ability to define custom HTTP headers on a per-command basis, allowing DashCord to communicate directly with third-party APIs (OpenAI, GitHub, Gantry, etc.) without needing an automation tool in the middle.

🚀 New Features

  • Per-Command Headers: You can now add a "headers" object to any command in routes.json to define specific authentication tokens, content types, or custom flags.
  • Global Override: Custom headers defined in routes.json will automatically override the global DASHCORD_SHARED_SECRET if the keys match, while leaving other commands untouched.

⚙️ Example Usage

"advanced-ai": {
  "endpoint": "https://api.openai.com/v1/chat/completions",
  "method": "POST",
  "headers": {
    "Authorization": "Bearer sk-proj-YourApiKeyHere",
    "OpenAI-Organization": "org-123456"
  }
}

v1.2.0 - Visual Status Indicators

Choose a tag to compare

@nextgearslab nextgearslab released this 03 Apr 13:26

This release improves user experience by adding real-time visual feedback. Users will no longer have to guess if the bot registered their input or if they are just waiting on a slow background automation workflow.

🚀 New Features

  • 👁️ Visual Feedback Reactions: The bot now automatically reacts to user messages with emojis to show current status. It displays ⏳ while your webhook is processing, and swaps to ✅ or ❌ when the automation finishes.
  • 📁 Universal Support: These visual indicators trigger for both standard typed commands (!ping) and automated file uploads!

⚙️ Config Changes

  • Added COMMAND_REACTION_ENABLED to toggle this feature on or off.
  • Added COMMAND_REACTION_PENDING, COMMAND_REACTION_SUCCESS, and COMMAND_REACTION_FAIL to .env so you can customize the exact emojis the bot uses.
  • Cleaned up and reorganized .env.example to group related settings and standardize boolean values.

v1.1.0 - Smart Silence & Co-existence Update

Choose a tag to compare

@nextgearslab nextgearslab released this 07 Mar 14:55

This release introduces "Smart Silence" logic, making DashCord a much better citizen in servers with multiple bots. DashCord is now intelligent enough to stay out of the way of other third-party bots and tools.

🚀 New Features

  • 🧠 Smart Silence: The bot now automatically ignores unknown commands in channels where it has no routes available. This prevents DashCord from "fighting" with other bots by spamming error messages when you use commands meant for other tools.
  • 🔇 Silent Channels: Added DISPLAY_UNKNOWN_COMMAND_ERROR_SILENT_CHANNELS to explicitly mute error messages in specific channels where multiple bots share space.
  • 📋 Enhanced Audit Logs: Terminal logs now clearly show whether an unknown command was silenced (and why) or if a help reply was sent, making it easier to troubleshoot channel permissions.

⚙️ Config Changes

  • Added DISPLAY_UNKNOWN_COMMAND_ERROR_SILENT_CHANNELS to .env.

v1.0.1 - Documentation & Example Updates

Choose a tag to compare

@nextgearslab nextgearslab released this 04 Mar 18:44

🔄 v1.0.1 Update Notes

This release expands the documentation and provided examples to better reflect the bot's advanced capabilities, including body templating, nonce-based idempotency, and intelligent file fan-out.


⚡ DashCord Core Features

  • 🧩 Sticky UI Panels: Persistent button panels that stay at the bottom of your chat automatically.
  • 📁 Intelligent File Fan-out: Automatic conversion of Discord attachments to Base64 with individual webhook triggers for batch processing.
  • 🚀 Zero-Code Bridge: Configuration-driven command routing via routes.json.
  • 🎭 Body Templating: Dynamic injection of Discord metadata and attachment data into custom JSON payloads.
  • 🐳 Docker Native: Fully containerized architecture with Docker Compose support.

Designed for home labs, automation enthusiasts, and n8n/Make power users.

Initial Release: DashCord Core

Choose a tag to compare

@nextgearslab nextgearslab released this 01 Mar 21:20

⚡ DashCord v1.0.0

The first stable release of DashCord - the headless Discord-to-automation bridge.

Key Features in this Release:

  • 🧩 Sticky UI Panels: Persistent button panels that stay at the bottom of your chat automatically.
  • 📁 Intelligent File Fan-out: Automatic conversion of Discord attachments to Base64 with individual webhook triggers for batch processing.
  • Zero-Code Bridge: Configuration-driven command routing via routes.json.
  • 🎭 Body Templating: Dynamic injection of Discord metadata into custom JSON payloads.
  • 🐳 Docker Native: Fully containerized architecture with Docker Compose support.

Designed for home labs, automation enthusiasts, and n8n/Make power users.