Stream Discord channel alerts to Nyria
Add the Nyria bot to a Discord server, authorize a channel, and route every alert posted there into a Nyria strategy — including embeds, free-text fallbacks, and quoted-tweet (longed/shorted) calls.
By the end you will have the Nyria bot in your Discord server, one channel authorized as an alert source, and a strategy that parses every new message — embed, plain text, or quoted tweet — into a Nyria trade.
Your responsibility. You are the source of truth for whether alerts in a Discord channel are tradeable. Nyria parses what is posted; it does not vet the caller's edge, repaint behavior, or message timing. Always validate the strategy with paper trading before you go live.
Before you start
You need:
- A Nyria account with at least one connected broker. See Broker integrations (or the broker you use).
- Manage Server permission in the Discord server you want to read from. Nyria refuses to authorize channels in servers you do not administer.
- The channel ID or channel name where the alerts you want to trade are posted.
If you only have webhook output from Discord and not server-admin access, use TradingView or the raw webhook endpoint instead — see webhook-reference.mdx for the payload spec.
Steps
Open the Discord alert source in Nyria
In the Nyria web app, go to Integrations, scroll to the Alert sources section, and click Connect Discord. You are redirected to Discord's OAuth screen.
Authorize Nyria to read your Discord identity
Approve the OAuth scopes Discord shows you. Nyria requests:
identify— to map your Discord user to your Nyria account.guilds— to list the servers you are a member of so you can pick one.
Nyria does not request email or messages.read on your user account. The bot reads messages, not your user token.
Invite the Nyria bot to your server
After OAuth, Nyria shows an Invite bot button for each server where you have Manage Server. Click it. Discord opens its bot-invite flow with these scopes pre-filled:
botapplications.commands
And these permissions:
- View Channels
- Read Message History
- Send Messages (used only by the
/nyriaslash command on the channel you authorize — never to post unsolicited content)
Choose the server and click Authorize.
Authorize one channel
Back in Nyria, your server now shows in the Discord card. Click it, then click Authorize channel next to the channel that carries the alerts you want to trade.
One channel per strategy. If a caller posts in #stocks and #options,
authorize them separately and wire each to its own Nyria strategy. This
keeps the parse rules, position sizing, and broker routing per-channel.
You can confirm authorization from Discord by running:
/nyria statusin the authorized channel. The bot replies with the strategy name it is bound to.
Create a Discord strategy
In Nyria, click Create strategy, choose Discord as the alert source, and pick the server + channel you just authorized. Configure:
- Author filter (optional) — a Discord username or user ID. Only messages from this user are parsed. Use this when one channel hosts multiple callers.
- Keyword filter (optional) — a case-insensitive substring. Only messages containing it are parsed. Use this when alerts share a channel with chatter (for example
ALERTorSIGNAL). - Equity types — restrict to stocks, options, or crypto as your broker supports (equity futures coming soon). See Equity types.
Save the strategy. Nyria runs the channel's last 50 messages through the parser so you can validate the format before the strategy goes live.
Validate the parse on real messages
In the strategy's Validation tab, pick 3–5 historical messages from the channel and tag each one as Long entry, Short entry, Long exit, Short exit, or Ignore.
Nyria parses each tagged message and shows what it would have traded — symbol, side, contract (for options), and the open position it would have closed (for exits). Fix any mismatches before activating. A strategy cannot go live until at least one entry and one exit message parse cleanly.
Activate and connect a bot
From the strategy page, click Activate, then attach a bot that points at a connected broker account. The bot defines position sizing, max concurrent positions, and which broker account fills the orders. The strategy defines what gets parsed and how it maps to long/short entry/exit.
The next message that hits the authorized channel and passes the author/keyword filters fires a trade.
How Discord messages get parsed
Nyria reads three things from each Discord message in priority order:
- Embeds (if the message has any).
- Quoted tweet (if the message is a Twitter/X link and Discord auto-embeds the tweet).
- Free text (the message body itself, as a fallback).
The first source that yields a valid instrument + direction + action wins. The others are ignored for that message.
1. Embed parsing
When a bot, webhook, or Discord app posts a message with a rich embed, Nyria walks the embed in this order:
embed.titleembed.description- each
embed.fields[i].name+embed.fields[i].valuejoined by a space
Each piece is fed through the same parser as free text. The first piece that parses wins.
Example — a TradingView Discord webhook payload posts this embed:
{
"embeds": [
{
"title": "SPY long entry",
"description": "Trigger: 20EMA cross",
"fields": [
{ "name": "Strike", "value": "675C" },
{ "name": "Risk", "value": "1R" }
]
}
]
}Nyria parses SPY long entry from title, sees 675C in the fields, and submits an SPY 675 call buy-to-open through the strategy's bot. The remaining fields are ignored.
Embed colors and icons are not used for parsing. Only text content.
2. Free-text fallback
If the message has no embeds (or no embed piece parses), Nyria parses the plain message body. This is the common case for callers who type alerts by hand.
Free text accepts the same shapes documented for TradingView simple alerts:
SPY long entryclose short BTCAAPL 150C buy to opensold half SPY 675CThe parser is case-insensitive and ignores trailing punctuation, emoji, and @everyone / @here mentions. It does not infer intent from question marks or hedging language — thinking about SPY? is ignored on purpose.
3. Quoted-tweet rule (longed / shorted)
When a Discord user pastes a Twitter/X link, Discord auto-embeds the tweet as an embed with embed.description = tweet text and embed.author.name = @handle. Nyria treats this as a special case to support the common "I longed it" / "I shorted it" call-out pattern.
For a quoted-tweet embed, the parser additionally recognizes:
longed <SYMBOL>→ long entryshorted <SYMBOL>→ short entryclosed long <SYMBOL>→ long exitclosed short <SYMBOL>→ short exit
Example tweet content:
longed NVDA at 122.40, stop 121Pasted into the authorized channel, this fires an NVDA long entry. The price (122.40) and stop (121) are parsed as metadata but Nyria does not place a separate stop order from the alert text — stops, take-profits, and exits are driven by your strategy config and the caller's later exit alerts. (Nyria does not currently support sending Bracket, OCO, OTO, or attached-leg take-profit orders from a single alert.)
The quoted-tweet rule only fires when Discord auto-embeds the tweet. If Twitter/X blocks the unfurl (rate-limited, deleted tweet, private account), Nyria sees the bare link and falls back to free-text parsing of the message body. Tell your callers to type the symbol + direction in the message itself for redundancy.
Author filter: how to pin it correctly
The author filter accepts either:
username— for exampleSignalBot. Matches the Discord username (no discriminator).id— the raw Discord snowflake, for example123456789012345678. Most stable; usernames can change.
To copy a user's ID, enable Developer Mode in Discord (User Settings → Advanced → Developer Mode), right-click the user, and pick Copy User ID.
If a caller uses both a personal account and a server bot to post the same alert, pin the bot's ID — bots cannot be renamed by the user mid-stream.
Keyword filter: when to use it
Use the keyword filter when the alert channel is shared with chatter:
| Channel pattern | Keyword filter |
|---|---|
| Dedicated alerts channel | Leave empty |
Mixed channel with ALERT: prefix | ALERT |
| Mixed channel with emoji prefix | The text after the emoji, e.g. entry |
| Channel that doubles as both alerts and exits | Empty — let the parser decide per message |
Filter matching is case-insensitive substring. A keyword of entry matches Long entry SPY and Entry: AAPL but ignores analysis.
Common Discord-only quirks
Edits and deletes do nothing
Once Nyria fires a trade on a message, editing or deleting that message does not reverse, modify, or cancel the order. Discord delivers the original MESSAGE_CREATE event to the bot; subsequent MESSAGE_UPDATE / MESSAGE_DELETE events are recorded in strategy_logs for audit but never act on a position. Close the position with a normal exit alert.
The bot ignores its own messages
Nyria's bot will not parse messages where the author is itself, even if you /nyria echo a sample alert. Test parsing with the Validation tab in the strategy editor.
Threads inherit the parent channel's authorization
If you authorize #alerts and a caller starts a thread #alerts › NVDA discussion, messages in that thread are parsed under the same strategy. To exclude thread chatter, add a keyword filter or move the strategy to a stricter channel.
Embeds from forwarded messages
Discord's Forward feature wraps the original message in a message_reference block. Nyria parses the forwarded content as if it were posted directly. The original author is preserved for the Author filter — so if your filter pins SignalBot, a user forwarding SignalBot's message into the authorized channel still triggers.
Rate-limited reconnects
Discord's gateway throttles bot reconnects per server. During a Discord-side outage, the bot may miss up to ~30 seconds of messages while reconnecting. There is no replay for missed messages. If a caller posts during the window, the alert is lost — Nyria will not back-fill from message history.
Attachments are ignored
Image, video, and file attachments are not OCR'd. A screenshot of a chart with "long SPY" written on it does not parse. The caller must type the alert as text or post an embed.
@everyone and role pings
Mentions are stripped before parsing. @everyone long SPY is parsed identically to long SPY. The strategy still respects its author filter — a non-pinned user pinging @everyone does not bypass the filter.
Troubleshooting
"Server not found"
You are not an administrator on that server, or the bot has been kicked. Re-invite the bot from Integrations → Discord → Invite bot and confirm your role in the server's Server Settings → Members.
"Channel not authorized"
The channel was deleted, converted to a voice/forum/stage channel, or the bot lost View Channel permission via a channel override. Open the channel's permissions in Discord, ensure Nyria role has View Channels + Read Message History, then re-run the Authorize channel step in Nyria.
"Could not parse alert"
Nyria received the message but no embed piece, quoted tweet, or free-text shape matched. Open the message in the strategy's Validation tab — Nyria shows you which sources it tried and why each rejected. Common fixes:
- Caller wrote "added more SPY" — direction is implied, not stated. Ask the caller to write "added long SPY".
- Caller posted a bare chart image — see "Attachments are ignored" above.
- Embed put the symbol in
embed.footer— footers are not parsed. Move the symbol to title/description/fields.
For raw payload questions or to test the same parse logic from a webhook, see webhook-reference.mdx.
Trades fire on the wrong account
The strategy is wired to a bot, and the bot picks the broker account. Open the strategy's Bots tab and confirm the active bot points at the broker account you intended. Discord-side configuration does not pick the account.
"Multiple entries disabled"
The bot allows only one open position per strategy and one is already open. Either close the open position (post the matching exit alert in the channel) or change Max concurrent positions on the bot.
Related
- Discord integration overview — permissions, security, and account-linking details.
- Webhook payload reference — for testing the same parser against a raw HTTP request.
- Equity types — what stocks, options, crypto, and futures shapes the parser understands.
- Trading behavior — how entries, exits, and pyramiding behave once a parsed alert reaches the bot.
TradingView alert messages
A copy-paste reference for the JSON Nyria expects in a TradingView alert — the single strategy message, the per-side indicator messages, and every placeholder.
Stream Telegram channel alerts to Nyria
Add the Nyria Telegram bot to your channel, authorize Nyria to read it, and stream signal messages straight into your strategies.