An Advanced Combat Tracker (ACT) plugin that plays your triggers β text-to-speech and sound effects β through a Discord bot in a voice channel, so your whole party hears them.
Works with ACT Custom Triggers, Triggernometry, and Triggevent.
π Maintained fork. This is the actively maintained continuation of Makar8000/ACT-Discord-Triggers, revived after Discord's DAVE encryption rollout broke the original in early 2026. See Acknowledgments for full credit to the original author.
| Output β Discord bot | Output β this PC (local) |
|---|---|
![]() |
![]() |
| Text-to-Speech β engine & voice | Sound β effects & mastering |
![]() |
![]() |
- π₯οΈ Two output modes β stream triggers to a Discord voice channel for the whole party, or play them locally on this PC's speakers with no bot or Discord login required. Switch on the Output tab.
- π TTS in voice chat β fire trigger text-to-speech straight into a Discord voice channel.
- π§ Neural voices β an optional ONNX engine plays natural-sounding neural voices (60+ across several languages), downloaded on demand. Or stick with the offline Windows (SAPI) system voices β no download, nothing extra to install.
- π΅ Sound-file triggers β play sound effects through the bot in
.wav, MP3, OGG, or FLAC (MP3/OGG/FLAC via Triggernometry or Triggevent). - ποΈ Concurrent playback β overlapping triggers mix together instead of queueing, so nothing gets dropped or delayed.
- π² Random sound effects β optionally add a random audio effect (echo, reverb, pitch-shift, and more) to triggers as they play.
- π Auto-leveling β perceptual LUFS loudness matching evens out the volume so every callout and sound plays at a consistent level.
- ποΈ Master limiter β a look-ahead brickwall limiter rides overlapping triggers down to a true-peak-safe ceiling, so simultaneous sounds never clip.
- π‘ Selectable audio quality β choose the Discord voice bitrate (48 / 96 / 128 kbps) to trade bandwidth for clarity.
- π Discord DAVE support β speaks Discord's end-to-end voice encryption, which is now required to join voice channels.
- Windows
- Advanced Combat Tracker
- A Discord bot token (setup guide below)
Node.js is bundled in the release archive β you do not need to install it separately.
- Download the latest
ACT_DiscordTriggers-*.zipfrom the Releases page. - Right-click the downloaded zip β Properties β tick Unblock β OK.
(Windows flags
node.exe/DLLs downloaded from the internet; skipping this can trip SmartScreen or antivirus.) - Extract it into your ACT plugins folder:
%AppData%\Advanced Combat Tracker\Plugins. You should end up with aPlugins\ACT_DiscordTriggers\folder containingACT_DiscordTriggers.dll,node.exe,bundle.js, andnode_modules\. Keep all of these files together in that folder. - In ACT, open the Plugins tab β Browseβ¦, select
ACT_DiscordTriggers.dllinside that folder, and click Add/Enable Plugin.
Follow the First-Time Setup Guide to create a Discord bot, invite it to your server, and connect it to the plugin. From there:
- Settings & Configuration β every setting on the plugin tab, explained.
- Trigger Software β use it with ACT Custom Triggers, Triggernometry, and Triggevent.
- Common Questions & Issues β troubleshooting and FAQ.
Replace the whole plugin folder with the new release β don't just swap the
.dll. The plugin runs alongside the bundled node.exe / bundle.js /
node_modules/, and those are updated together.
The plugin targets .NET Framework 4.8 (the only runtime ACT loads), but Discord voice now runs in a separate Node.js process. This is what makes DAVE possible without dropping ACT compatibility:
ACT (net48) βloadsββΆ ACT_DiscordTriggers.dll (net48)
β spawns
βΌ
node.exe + bundle.js (discord.js + @snazzah/davey)
β²
β named pipe (length-prefixed JSON frames)
βΌ
ACT_DiscordTriggers.dll IPC client
Discord enforced DAVE end-to-end encryption on
voice in early 2026, and Discord.Net 3.19
(the first version with DAVE) dropped .NET Framework support β so the old
in-process voice path became unfixable. Moving voice into a bundled Node bridge
keeps ACT on net48 while staying current with Discord. The full design rationale
and alternatives considered are documented in
CLAUDE.md.
How a trigger becomes Opus packets β the complete signal flow from C# synthesis
through the bridge's DSP (r8brain resampling, LUFS auto-leveling, the float64
mix bus, the look-ahead master limiter) to the Discord voice socket, with
diagrams and a full numeric reference β is documented for contributors and
audio engineers in docs/AUDIO-CHAIN.md. The ranked
roadmap for taking the realtime path pro-grade lives in
docs/AUDIO-PIPELINE.md.
One command from a clean clone produces release/ with everything an end user
drops into ACT's plugins directory:
cd DiscordBridge-node && npm ci && cd ..
pwsh ./build.ps1
build.ps1 builds the plugin (dotnet build β net48 reference assemblies
auto-restore via NuGet, Costura.Fody merges into a single DLL), type-checks and
bundles the bridge, copies node.exe, stages the external node_modules/, runs
a spawn self-test (asserts BRIDGE_READY), and assembles release/.
For bridge-only iteration, use the npm scripts in DiscordBridge-node/:
npm run typecheck, npm run bundle, npm test.
dotnet test ACT_DiscordTriggers.Tests/ACT_DiscordTriggers.Tests.csproj # C# (net48): protocol + IPC + integration
cd DiscordBridge-node && npm test # JS (tsx + node:test)
Integration tests require the bridge to be built first (they spawn
DiscordBridge-node/dist/node.exe with bundle.js).
- .NET Framework 4.8 (plugin + tests)
- Node.js 22+ (bridge runtime)
- discord.js + @discordjs/voice (bridge)
- @snazzah/davey (DAVE E2EE)
This project began as a fork of Makar8000/ACT-Discord-Triggers by @Makar8000, who created and maintained the original plugin. The DAVE rewrite landed as PR #82 upstream, after which maintenance was handed off to this fork. All credit for the original design and years of upkeep goes to Makar8000 β thank you.
MIT β Copyright (c) 2017 Marcus Terry, Copyright (c) 2026 JoΓ£o Amaro Lagedo.



