Community

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.

Webhooks