Releases: nextgearslab/DashCord
Release list
v1.8.0 - Dynamic Response Templating & 3rd-Party API Mapping
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
ephemeralboolean 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_templateutility. 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 hittinghttpbin.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
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_ELAPSEDon 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": falseinsideroutes.jsonfor stealthy or silent background pipeline triggers. - 🎨 Custom Panel Emojis: You are no longer restricted to global emojis. Define a custom
emojisblock 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": 300directly inside their command config, overriding the globalHTTP_TIMEOUT_SECONDSfallback. - 🛡️ Ephemeral Slash Command Replies: Native Discord Slash Commands now natively respect the
"ephemeral_replies": truecommand 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.examplewith 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, standardAuthorizationheader support, and native webhook response unwrapping.
v1.6.0 - Slash Commands & Async Performance Overhaul
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.jsonis now automatically registered as a global Discord Application Slash Command (e.g.,/weather,/ping). It includes an optionalargumentsinput box for variables, allowing for a fully modern Discord UI experience.
⚡ Performance Overhaul
- Fully Asynchronous Webhooks: Replaced the blocking
requestslibrary with nativeaiohttp.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=falseflag 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_loopandpost_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()andpanel_persist_loopconcurrently 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_onceto 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_taskcalls to modernasyncio.create_taskstandards.
v1.5.0 - Dynamic REST API, Visual Status Indicators & Sticky UI Improvements
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.jsonfile, 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-TokenHTTP 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.envfallbackPANEL_SHOW_TITLE_DEFAULT) to easily hide the default🧩 DashCord Panelheader. - 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_delayon commands (and a global.envfallbackPANEL_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
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 newmodal_inputspayload 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
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 inroutes.jsonto define specific authentication tokens, content types, or custom flags. - Global Override: Custom headers defined in
routes.jsonwill automatically override the globalDASHCORD_SHARED_SECRETif 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
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_ENABLEDto toggle this feature on or off. - Added
COMMAND_REACTION_PENDING,COMMAND_REACTION_SUCCESS, andCOMMAND_REACTION_FAILto.envso you can customize the exact emojis the bot uses. - Cleaned up and reorganized
.env.exampleto group related settings and standardize boolean values.
v1.1.0 - Smart Silence & Co-existence Update
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_CHANNELSto 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_CHANNELSto.env.
v1.0.1 - Documentation & Example Updates
🔄 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
⚡ 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.