Discord Integration
Link your Discord account once. Paid plans are granted the correct server role automatically, and actionable bot signals post live in the market-specific channels.
Connect your Discord
1. Authenticate via OAuth
Open Settings → Integrations and click Connect Discord. You are redirected to Discord, approve the requested scopes, and your Discord ID is linked to your TradingWizard account.
2. Claim your role
After linking, click Claim role. The server calls /api/discord/claim-role, verifies your plan, and assigns the Pro or Ultimate role in the TradingWizard guild. The button is disabled on Free.
What you'll receive
Bot signals
When a bot opens, updates, or closes a trade, the embed is posted to the matching channel. Only actionable signals make it through — see the filter below.
Market pulse
The hourly market pulse cron broadcasts a short macro update (regime, fear & greed, BTC dominance) to the pulse channel.
Role-gated channels
Your Pro or Ultimate role unlocks private channels (live analysis, premium signals, strategy room). Free members see community channels only.
Signal filter (materiality)
We do not post noise. Bot signals only reach public Discord channels when the verdict is buy or sell with confidence above the materiality threshold defined in lib/discordWebhooks.ts (currently 1.5% PnL for trade closures). Scratch trades, wait/hold signals, and low-conviction setups are skipped.
MATERIALITY = {
DISCORD_THRESHOLD: 1.5, // |PnL %| below this is not posted
PUBLIC_DISPLAY_THRESHOLD: 1.5,
SCRATCH_BAND: 0.5,
}Channels
Each market type routes to its own webhook URL, configured per environment in Vercel:
DISCORD_WEBHOOK_CRYPTO_SIGNALS // crypto open / close DISCORD_WEBHOOK_CRYPTO_UPDATES // crypto SL/TP modifications DISCORD_WEBHOOK_STOCK_SIGNALS // stock open / close DISCORD_WEBHOOK_STOCK_UPDATES // stock modifications DISCORD_WEBHOOK_FOREX_SIGNALS // forex open / close DISCORD_WEBHOOK_FOREX_UPDATES // forex modifications DISCORD_WEBHOOK_PULSE // hourly market pulse digest DISCORD_WEBHOOK_BOT_RESULTS // end-of-run bot summaries
Slash commands are registered once via /api/admin/register-discord-commands. Interactions hit /api/discord/interactions and respond via deferred editInteractionResponse.
Troubleshooting
Role did not appear after upgrading
Role assignment runs inside the Stripe webhook. If it failed (server hiccup, Discord API blip), open Settings → Integrations and click Claim role — this hits /api/discord/claim-role and re-syncs from your live subscription state.
Role removed after plan change
When a subscription is cancelled or downgrades to free, the customer.subscription.deleted Stripe webhook calls removeRole automatically. You can re-claim at any time by re-subscribing.
Not seeing the Claim button
Reconnect Discord. The button stays disabled until we have a valid linked Discord account and a non-free plan on file.
Next: Webhooks
How Stripe, TradingView, and SendGrid talk to TradingWizard, and how bot signals reach Discord.